×

多架构调整操作符优化多架构集群和正在过渡到多架构环境的单架构集群中的工作负载管理。

基于架构的工作负载调度允许调度程序将 Pod 部署到与 Pod 镜像架构匹配的节点上。

默认情况下,调度程序在确定将新的 Pod 部署到节点时,不会考虑 Pod 的容器镜像的架构。

要启用基于架构的工作负载调度,必须创建 `ClusterPodPlacementConfig` 对象。创建 `ClusterPodPlacementConfig` 对象时,多架构调整操作符会部署必要的操作数以支持基于架构的工作负载调度。

创建 Pod 时,操作数执行以下操作:

  1. 添加 `multiarch.openshift.io/scheduling-gate` 调度门,以防止调度 Pod。

  2. 计算一个调度谓词,其中包含 `kubernetes.io/arch` 标签支持的架构值。

  3. 将调度谓词集成到 Pod 说明中的 `nodeAffinity` 需求中。

  4. 从 Pod 中删除调度门。

注意以下操作数行为:

  • 如果 `nodeSelector` 字段已为工作负载配置了 `kubernetes.io/arch` 标签,则操作数不会更新该工作负载的 `nodeAffinity` 字段。

  • 如果 `nodeSelector` 字段未为工作负载配置 `kubernetes.io/arch` 标签,则操作数将更新该工作负载的 `nodeAffinity` 字段。但是,在该 `nodeAffinity` 字段中,操作数只更新未配置 `kubernetes.io/arch` 标签的节点选择器术语。

  • 如果nodeName字段已设置,多架构调整操作符将不会处理该Pod。

使用CLI安装多架构调整操作符

您可以使用OpenShift CLI (oc) 安装多架构调整操作符。

先决条件
  • 您已安装oc

  • 您已以具有cluster-admin权限的用户身份登录到oc

步骤
  1. 运行以下命令创建一个名为openshift-multiarch-tuning-operator的新项目

    $ oc create ns openshift-multiarch-tuning-operator
  2. 创建一个OperatorGroup对象

    1. 创建一个包含OperatorGroup对象配置的YAML文件。

      创建OperatorGroup对象的YAML示例配置
      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: openshift-multiarch-tuning-operator
        namespace: openshift-multiarch-tuning-operator
      spec: {}
    2. 运行以下命令创建OperatorGroup对象

      $ oc create -f <file_name> (1)
      1 <file_name>替换为包含OperatorGroup对象配置的YAML文件名。
  3. 创建一个Subscription对象

    1. 创建一个包含Subscription对象配置的YAML文件。

      创建Subscription对象的YAML示例配置
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-multiarch-tuning-operator
        namespace: openshift-multiarch-tuning-operator
      spec:
        channel: stable
        name: multiarch-tuning-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        installPlanApproval: Automatic
        startingCSV: multiarch-tuning-operator.v1.0.0
    2. 运行以下命令创建Subscription对象

      $ oc create -f <file_name> (1)
      1 <file_name>替换为包含Subscription对象配置的YAML文件名。

有关配置Subscription对象和OperatorGroup对象的更多详细信息,请参阅“使用CLI从OperatorHub安装”。

验证
  1. 要验证多架构调整操作符是否已安装,请运行以下命令

    $ oc get csv -n openshift-multiarch-tuning-operator
    示例输出
    NAME                               DISPLAY                     VERSION   REPLACES                              PHASE
    multiarch-tuning-operator.v1.0.0   Multiarch Tuning Operator   1.0.0     multiarch-tuning-operator.v0.9.0      Succeeded

    如果操作符处于Succeeded阶段,则安装成功。

  2. 可选:要验证OperatorGroup对象是否已创建,请运行以下命令

    $ oc get operatorgroup -n openshift-multiarch-tuning-operator
    示例输出
    NAME                                        AGE
    openshift-multiarch-tuning-operator-q8zbb   133m
  3. 可选:要验证Subscription对象是否已创建,请运行以下命令

    $ oc get subscription -n openshift-multiarch-tuning-operator
    示例输出
    NAME                        PACKAGE                     SOURCE                  CHANNEL
    multiarch-tuning-operator   multiarch-tuning-operator   redhat-operators        stable

使用Web控制台安装多架构调整操作符

您可以使用OpenShift Container Platform Web控制台安装多架构调整操作符。

先决条件
  • 您可以访问具有cluster-admin权限的集群。

  • 您可以访问OpenShift Container Platform Web控制台。

步骤
  1. 登录到OpenShift Container Platform Web控制台。

  2. 导航到**操作符 → OperatorHub**。

  3. 在搜索字段中输入**多架构调整操作符**。

  4. 单击**多架构调整操作符**。

  5. 从**版本**列表中选择**多架构调整操作符**版本。

  6. 单击**安装**

  7. 在**操作符安装**页面上设置以下选项

    1. 将**更新通道**设置为**稳定**。

    2. 将**安装模式**设置为**集群上的所有命名空间**。

    3. 将**已安装命名空间**设置为**操作符推荐的命名空间**或**选择命名空间**。

      推荐的操作符命名空间是openshift-multiarch-tuning-operator。如果openshift-multiarch-tuning-operator命名空间不存在,它将在操作符安装期间创建。

      如果您选择**选择命名空间**,则必须从**选择项目**列表中为操作符选择一个命名空间。

    4. **更新审批**为**自动**或**手动**。

      如果您选择**自动**更新,操作符生命周期管理器 (OLM) 将自动更新多架构调整操作符的运行实例,无需任何干预。

      如果您选择**手动**更新,OLM 将创建一个更新请求。作为集群管理员,您必须手动批准更新请求才能将多架构调整操作符更新到较新版本。

  8. 可选:选择**在此命名空间上启用操作符推荐的集群监控**复选框。

  9. 单击**安装**。

验证
  1. 导航到**操作符** → **已安装的操作符**。

  2. 验证**多架构调整操作符**是否已列出,其**状态**字段在openshift-multiarch-tuning-operator命名空间中为**Succeeded**。

多架构调整操作符 Pod 标签和架构支持概述

安装多架构调整操作符后,您可以验证集群中工作负载的多架构支持。您可以使用 Pod 标签识别和管理基于其架构兼容性的 Pod。这些标签会自动设置在新创建的 Pod 上,以提供对其架构支持的见解。

下表描述了创建 Pod 时多架构调整操作符添加的标签

表 1. 创建 Pod 时多架构调整操作符添加的 Pod 标签
标签 描述

multiarch.openshift.io/multi-arch: ""

该 Pod 支持多种架构。

multiarch.openshift.io/single-arch: ""

该 Pod 只支持单一架构。

multiarch.openshift.io/arm64: ""

该 Pod 支持arm64架构。

multiarch.openshift.io/amd64: ""

该 Pod 支持amd64架构。

multiarch.openshift.io/ppc64le: ""

该 Pod 支持ppc64le架构。

multiarch.openshift.io/s390x: ""

该 Pod 支持s390x架构。

multirach.openshift.io/node-affinity: set

操作符已设置架构的节点亲和性要求。

multirach.openshift.io/node-affinity: not-set

操作符未设置节点亲和性要求。例如,当 Pod 已具有架构的节点亲和性时,多架构调整操作符会将此标签添加到 Pod。

multiarch.openshift.io/scheduling-gate: gated

该 Pod 受限。

multiarch.openshift.io/scheduling-gate: removed

该 Pod 限制已移除。

multiarch.openshift.io/inspection-error: ""

构建节点亲和性要求时发生错误。

创建ClusterPodPlacementConfig对象

安装多架构调整操作符后,您必须创建ClusterPodPlacementConfig对象。创建此对象时,多架构调整操作符将部署一个操作数,该操作数启用感知架构的工作负载调度。

您只能创建ClusterPodPlacementConfig对象的一个实例。

ClusterPodPlacementConfig对象配置示例
apiVersion: multiarch.openshift.io/v1beta1
kind: ClusterPodPlacementConfig
metadata:
  name: cluster (1)
spec:
  logVerbosityLevel: Normal (2)
  namespaceSelector: (3)
    matchExpressions:
      - key: multiarch.openshift.io/exclude-pod-placement
        operator: DoesNotExist
1 您必须将此字段值设置为cluster
2 可选:您可以将字段值设置为NormalDebugTraceTraceAll。默认情况下,该值为Normal
3 可选:您可以配置namespaceSelector来选择多架构调整操作符的 Pod 布置操作数必须处理 Pod 的nodeAffinity的命名空间。默认情况下考虑所有命名空间。

在此示例中,operator字段值设置为DoesNotExist。因此,如果在命名空间中将key字段值 (multiarch.openshift.io/exclude-pod-placement) 设置为标签,则操作数不会处理该命名空间中 Pod 的nodeAffinity。相反,操作数将处理不包含该标签的命名空间中 Pod 的nodeAffinity

如果您希望操作数仅处理特定命名空间中 Pod 的nodeAffinity,您可以按如下方式配置namespaceSelector

namespaceSelector:
  matchExpressions:
    - key: multiarch.openshift.io/include-pod-placement
      operator: Exists

在此示例中,operator字段值设置为Exists。因此,操作数仅处理包含multiarch.openshift.io/include-pod-placement标签的命名空间中 Pod 的nodeAffinity

此操作符排除以kube-开头的命名空间中的 Pod。它还排除预计应在控制平面节点上调度的 Pod。

使用CLI创建ClusterPodPlacementConfig对象

要部署启用架构感知工作负载调度的 Pod 布置操作符,您可以使用 OpenShift CLI (oc) 创建 ClusterPodPlacementConfig 对象。

先决条件
  • 您已安装oc

  • 您已以具有cluster-admin权限的用户身份登录到oc

  • 您已安装 Multiarch Tuning Operator。

步骤
  1. 创建一个 ClusterPodPlacementConfig 对象 YAML 文件

    ClusterPodPlacementConfig对象配置示例
    apiVersion: multiarch.openshift.io/v1beta1
    kind: ClusterPodPlacementConfig
    metadata:
      name: cluster
    spec:
      logVerbosityLevel: Normal
      namespaceSelector:
        matchExpressions:
          - key: multiarch.openshift.io/exclude-pod-placement
            operator: DoesNotExist
  2. 运行以下命令创建 ClusterPodPlacementConfig 对象

    $ oc create -f <file_name> (1)
    1 <file_name> 替换为 ClusterPodPlacementConfig 对象 YAML 文件的名称。
验证
  • 要检查 ClusterPodPlacementConfig 对象是否已创建,请运行以下命令

    $ oc get clusterpodplacementconfig
    示例输出
    NAME      AGE
    cluster   29s

使用 Web 控制台创建 ClusterPodPlacementConfig 对象

要部署启用架构感知工作负载调度的 Pod 布置操作符,您可以使用 OpenShift Container Platform Web 控制台创建 ClusterPodPlacementConfig 对象。

先决条件
  • 您可以访问具有cluster-admin权限的集群。

  • 您可以访问OpenShift Container Platform Web控制台。

  • 您已安装 Multiarch Tuning Operator。

步骤
  1. 登录到OpenShift Container Platform Web控制台。

  2. 导航到**操作符** → **已安装的操作符**。

  3. 在**已安装的操作符**页面上,单击**Multiarch Tuning Operator**。

  4. 单击**集群 Pod 布置配置**选项卡。

  5. 选择**表单视图**或**YAML 视图**。

  6. 配置 ClusterPodPlacementConfig 对象参数。

  7. 单击**创建**。

  8. 可选:如果您想编辑 ClusterPodPlacementConfig 对象,请执行以下操作

    1. 单击**集群 Pod 布置配置**选项卡。

    2. 从选项菜单中选择**编辑 ClusterPodPlacementConfig**。

    3. 单击**YAML** 并编辑 ClusterPodPlacementConfig 对象参数。

    4. 单击**保存**。

验证
  • 在**集群 Pod 布置配置**页面上,检查 ClusterPodPlacementConfig 对象是否处于就绪状态。

使用 CLI 删除 ClusterPodPlacementConfig 对象

您只能创建 ClusterPodPlacementConfig 对象的一个实例。如果您想重新创建此对象,必须先删除现有实例。

您可以使用 OpenShift CLI (oc) 删除此对象。

先决条件
  • 您已安装oc

  • 您已以具有cluster-admin权限的用户身份登录到oc

步骤
  1. 登录到 OpenShift CLI (oc)。

  2. 运行以下命令删除 ClusterPodPlacementConfig 对象

    $ oc delete clusterpodplacementconfig cluster
验证
  • 要检查 ClusterPodPlacementConfig 对象是否已删除,请运行以下命令

    $ oc get clusterpodplacementconfig
    示例输出
    No resources found

使用 Web 控制台删除 ClusterPodPlacementConfig 对象

您只能创建 ClusterPodPlacementConfig 对象的一个实例。如果您想重新创建此对象,必须先删除现有实例。

您可以使用 OpenShift Container Platform Web 控制台删除此对象。

先决条件
  • 您可以访问具有cluster-admin权限的集群。

  • 您可以访问OpenShift Container Platform Web控制台。

  • 您已创建 ClusterPodPlacementConfig 对象。

步骤
  1. 登录到OpenShift Container Platform Web控制台。

  2. 导航到**操作符** → **已安装的操作符**。

  3. 在**已安装的操作符**页面上,单击**Multiarch Tuning Operator**。

  4. 单击**集群 Pod 布置配置**选项卡。

  5. 从选项菜单中选择**删除 ClusterPodPlacementConfig**。

  6. 单击**删除**。

验证
  • 在**集群 Pod 布置配置**页面上,检查 ClusterPodPlacementConfig 对象是否已删除。

使用 CLI 卸载 Multiarch Tuning Operator

您可以使用 OpenShift CLI (oc) 卸载 Multiarch Tuning Operator。

先决条件
  • 您已安装oc

  • 您已以具有cluster-admin权限的用户身份登录到oc

  • 您已删除 ClusterPodPlacementConfig 对象。

    在卸载 Multiarch Tuning Operator 之前,必须删除 ClusterPodPlacementConfig 对象。在不删除 ClusterPodPlacementConfig 对象的情况下卸载 Operator 可能会导致意外行为。

步骤
  1. 运行以下命令获取 Multiarch Tuning Operator 的 Subscription 对象名称

    $ oc get subscription.operators.coreos.com -n <namespace> (1)
    1 <namespace> 替换为您要卸载 Multiarch Tuning Operator 的命名空间名称。
    示例输出
    NAME                                  PACKAGE                     SOURCE             CHANNEL
    openshift-multiarch-tuning-operator   multiarch-tuning-operator   redhat-operators   stable
  2. 运行以下命令获取 Multiarch Tuning Operator 的 currentCSV

    $ oc get subscription.operators.coreos.com <subscription_name> -n <namespace> -o yaml | grep currentCSV (1)
    1 <subscription_name> 替换为 Subscription 对象名称。例如:openshift-multiarch-tuning-operator。将 <namespace> 替换为您要卸载 Multiarch Tuning Operator 的命名空间名称。
    示例输出
    currentCSV: multiarch-tuning-operator.v1.0.0
  3. 运行以下命令删除 Subscription 对象

    $ oc delete subscription.operators.coreos.com <subscription_name> -n <namespace> (1)
    1 <subscription_name> 替换为 Subscription 对象名称。将 <namespace> 替换为您要卸载 Multiarch Tuning Operator 的命名空间名称。
    示例输出
    subscription.operators.coreos.com "openshift-multiarch-tuning-operator" deleted
  4. 使用 currentCSV 值运行以下命令删除目标命名空间中 Multiarch Tuning Operator 的 CSV

    $ oc delete clusterserviceversion <currentCSV_value> -n <namespace> (1)
    1 <currentCSV> 替换为 Multiarch Tuning Operator 的 currentCSV 值。例如:multiarch-tuning-operator.v1.0.0。将 <namespace> 替换为您要卸载 Multiarch Tuning Operator 的命名空间名称。
    示例输出
    clusterserviceversion.operators.coreos.com "multiarch-tuning-operator.v1.0.0" deleted
验证
  • 要验证 Multiarch Tuning Operator 是否已卸载,请运行以下命令

    $ oc get csv -n <namespace> (1)
    1 <namespace> 替换为您已卸载 Multiarch Tuning Operator 的命名空间名称。
    示例输出
    No resources found in openshift-multiarch-tuning-operator namespace.

使用 Web 控制台卸载 Multiarch Tuning Operator

您可以使用 OpenShift Container Platform Web 控制台卸载 Multiarch Tuning Operator。

先决条件
  • 您可以使用具有 cluster-admin 权限的集群。

  • 您已删除 ClusterPodPlacementConfig 对象。

    在卸载 Multiarch Tuning Operator 之前,必须删除 ClusterPodPlacementConfig 对象。在不删除 ClusterPodPlacementConfig 对象的情况下卸载 Operator 可能会导致意外行为。

步骤
  1. 登录到OpenShift Container Platform Web控制台。

  2. 导航到**操作符 → OperatorHub**。

  3. 在搜索字段中输入**多架构调整操作符**。

  4. 单击**多架构调整操作符**。

  5. 单击**详细信息**选项卡。

  6. 从**操作**菜单中,选择**卸载操作符**。

  7. 出现提示时,单击**卸载**。

验证
  1. 导航到**操作符** → **已安装的操作符**。

  2. 在**已安装的操作符**页面上,验证**Multiarch Tuning Operator** 是否未列出。