×

在独立的 OpenShift Container Platform 集群中,机器配置池管理一组节点。您可以使用MachineConfigPool自定义资源 (CR) 来处理机器配置。

在托管控制平面中,MachineConfigPool CR 不存在。节点池包含一组计算节点。您可以使用节点池来处理机器配置。

为托管控制平面配置节点池

在托管控制平面中,您可以通过在管理集群中的配置映射中创建MachineConfig对象来配置节点池。

步骤
  1. 要在管理集群中的配置映射中创建MachineConfig对象,请输入以下信息

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <configmap-name>
      namespace: clusters
    data:
      config: |
        apiVersion: machineconfiguration.openshift.io/v1
        kind: MachineConfig
        metadata:
          labels:
            machineconfiguration.openshift.io/role: worker
          name: <machineconfig-name>
        spec:
          config:
            ignition:
              version: 3.2.0
            storage:
              files:
              - contents:
                  source: data:...
                mode: 420
                overwrite: true
                path: ${PATH} (1)
    1 设置节点上存储MachineConfig对象的路劲。
  2. 将对象添加到配置映射后,您可以按如下方式将配置映射应用于节点池

    $ oc edit nodepool <nodepool_name> --namespace <hosted_cluster_namespace>
    apiVersion: hypershift.openshift.io/v1alpha1
    kind: NodePool
    metadata:
    # ...
      name: nodepool-1
      namespace: clusters
    # ...
    spec:
      config:
      - name: ${configmap-name}
    # ...

在托管集群中配置节点调优

要设置托管集群中节点上的节点级调优,您可以使用节点调优运算符。在托管控制平面中,您可以通过创建包含Tuned对象的配置映射并在节点池中引用这些配置映射来配置节点调优。

步骤
  1. 创建一个包含有效 tuned 清单的配置映射,并在节点池中引用该清单。在以下示例中,Tuned清单定义了一个配置文件,该配置文件将vm.dirty_ratio设置为 55,适用于包含值为任意值的tuned-1-node-label节点标签的节点。将以下ConfigMap清单保存在名为tuned-1.yaml的文件中

        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: tuned-1
          namespace: clusters
        data:
          tuning: |
            apiVersion: tuned.openshift.io/v1
            kind: Tuned
            metadata:
              name: tuned-1
              namespace: openshift-cluster-node-tuning-operator
            spec:
              profile:
              - data: |
                  [main]
                  summary=Custom OpenShift profile
                  include=openshift-node
                  [sysctl]
                  vm.dirty_ratio="55"
                name: tuned-1-profile
              recommend:
              - priority: 20
                profile: tuned-1-profile

    如果您没有向Tuned规范的spec.recommend部分中的条目添加任何标签,则假定基于节点池的匹配,因此spec.recommend部分中优先级最高的配置文件将应用于池中的节点。虽然您可以通过在Tuned.spec.recommend.match部分设置标签值来实现更细粒度的基于节点标签的匹配,但除非您将节点池的.spec.management.upgradeType值设置为InPlace,否则节点标签在升级过程中不会持久化。

  2. 在管理集群中创建ConfigMap对象

    $ oc --kubeconfig="$MGMT_KUBECONFIG" create -f tuned-1.yaml
  3. 在节点池的spec.tuningConfig字段中引用ConfigMap对象,方法是编辑节点池或创建一个节点池。在此示例中,假设您只有一个名为nodepool-1NodePool,其中包含 2 个节点。

        apiVersion: hypershift.openshift.io/v1alpha1
        kind: NodePool
        metadata:
          ...
          name: nodepool-1
          namespace: clusters
        ...
        spec:
          ...
          tuningConfig:
          - name: tuned-1
        status:
        ...

    您可以在多个节点池中引用相同的配置映射。在托管控制平面中,节点调优运算符将节点池名称和命名空间的哈希附加到Tuned CR 的名称,以区分它们。在此情况之外,请勿为同一托管集群的不同Tuned CR 创建多个同名的 TuneD 配置文件。

验证

创建包含Tuned清单的ConfigMap对象并在NodePool中引用它之后,节点调优运算符会将Tuned对象同步到托管集群。您可以验证定义了哪些Tuned对象以及哪些 TuneD 配置文件应用于每个节点。

  1. 列出托管集群中的Tuned对象

    $ oc --kubeconfig="$HC_KUBECONFIG" get tuned.tuned.openshift.io -n openshift-cluster-node-tuning-operator
    示例输出
    NAME       AGE
    default    7m36s
    rendered   7m36s
    tuned-1    65s
  2. 列出托管集群中的Profile对象

    $ oc --kubeconfig="$HC_KUBECONFIG" get profile.tuned.openshift.io -n openshift-cluster-node-tuning-operator
    示例输出
    NAME                           TUNED            APPLIED   DEGRADED   AGE
    nodepool-1-worker-1            tuned-1-profile  True      False      7m43s
    nodepool-1-worker-2            tuned-1-profile  True      False      7m14s

    如果没有创建自定义配置文件,则默认情况下会应用openshift-node配置文件。

  3. 要确认调优是否正确应用,请在节点上启动一个调试 shell 并检查 sysctl 值

    $ oc --kubeconfig="$HC_KUBECONFIG" debug node/nodepool-1-worker-1 -- chroot /host sysctl vm.dirty_ratio
    示例输出
    vm.dirty_ratio = 55

为托管控制平面部署 SR-IOV 运算符

配置和部署托管服务集群后,您可以在托管集群上创建对 SR-IOV 运算符的订阅。SR-IOV pod 运行在工作机器上,而不是控制平面。

先决条件

您必须在 AWS 上配置和部署托管集群。

步骤
  1. 创建命名空间和运算符组

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-sriov-network-operator
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: sriov-network-operators
      namespace: openshift-sriov-network-operator
    spec:
      targetNamespaces:
      - openshift-sriov-network-operator
  2. 创建对 SR-IOV 运算符的订阅

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: sriov-network-operator-subsription
      namespace: openshift-sriov-network-operator
    spec:
      channel: stable
      name: sriov-network-operator
      config:
        nodeSelector:
          node-role.kubernetes.io/worker: ""
      source: s/qe-app-registry/redhat-operators
      sourceNamespace: openshift-marketplace
验证
  1. 要验证 SR-IOV 运算符是否已准备就绪,请运行以下命令并查看结果输出

    $ oc get csv -n openshift-sriov-network-operator
    示例输出
    NAME                                         DISPLAY                   VERSION               REPLACES                                     PHASE
    sriov-network-operator.4.17.0-202211021237   SR-IOV Network Operator   4.17.0-202211021237   sriov-network-operator.4.17.0-202210290517   Succeeded
  2. 要验证 SR-IOV Pod 是否已部署,请运行以下命令:

    $ oc get pods -n openshift-sriov-network-operator