4.11. 使用 Multiarch Tuning Operator 管理多架构集群中的工作负载
Multiarch Tuning Operator 在多架构集群中优化工作负载管理,以及在到多架构环境的单架构集群中进行工作负载管理。
通过架构感知的工作负载调度,调度程序可以将 pod 放置到与 pod 镜像架构匹配的节点上。
默认情况下,调度程序不会在决定新 pod 放置到节点上时考虑 pod 容器镜像的架构。
要启用架构感知工作负载调度,您必须创建 ClusterPodPlacementConfig
对象。在创建 ClusterPodPlacementConfig
对象时,Multiarch Tuning Operator 会部署必要的操作对象来支持架构感知的工作负载调度。您还可以使用 ClusterPodPlacementConfig
对象中的 nodeAffinityScoring
插件来为节点架构设置集群范围的分数。如果启用 nodeAffinityScoring
插件,调度程序首先过滤具有兼容架构的节点,然后将 pod 放置到分数最高的节点上。
创建 pod 时,操作对象执行以下操作:
-
添加
multiarch.openshift.io/scheduling-gate
调度门,以防止调度 pod。 -
计算一个调度 predicate,其中包含
kubernetes.io/arch
标签支持的架构值。 -
将调度 predicate 集成为 pod 规格中的
nodeAffinity
要求。 - 从 pod 中删除调度授权。
请注意以下操作对象行为:
-
如果
nodeSelector
字段已配置了工作负载的kubernetes.io/arch
标签,则操作对象不会更新该工作负载的nodeAffinity
字段。 -
如果
nodeSelector
字段没有使用工作负载的kubernetes.io/arch
标签配置,则操作对象会更新该工作负载的nodeAffinity
字段。但是,在这个nodeAffinity
字段中,操作对象只更新没有使用kubernetes.io/arch
标签配置的节点选择器术语。 -
如果已经设置了
nodeName
字段,Multiarch Tuning Operator 不会处理 pod。 -
如果 pod 归 DaemonSet 所有,则操作对象不会更新
nodeAffinity
字段。 -
如果为
kubernetes.io/arch
标签设置了nodeSelector
或nodeAffinity
和preferredAffinity
字段,则操作对象不会更新nodeAffinity
字段。 -
如果只为
kubernetes.io/arch
标签设置了nodeSelector
或nodeAffinity
字段,并且禁用nodeAffinityScoring
插件,则操作对象不会更新nodeAffinity
字段。 -
如果
nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution
字段已包含基于kubernetes.io/arch
标签的分数节点的术语,则操作对象会忽略nodeAffinityScoring
插件中的配置。
4.11.1. 使用 CLI 安装 Multiarch Tuning Operator
您可以使用 OpenShift CLI (oc
)安装 Multiarch Tuning Operator。
先决条件
-
已安装
oc
。 -
已以具有
cluster-admin
权限的用户身份登录oc
。
流程
运行以下命令,创建一个名为
openshift-multiarch-tuning-operator
的新项目:$ oc create ns openshift-multiarch-tuning-operator
创建一个
OperatorGroup
对象:使用用于创建
OperatorGroup
对象的配置创建 YAML 文件。创建
OperatorGroup
对象的 YAML 配置示例:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-multiarch-tuning-operator namespace: openshift-multiarch-tuning-operator spec: {}
运行以下命令来创建
OperatorGroup
对象:$ oc create -f <file_name> 1
- 1
- 将
<file_name>
替换为包含OperatorGroup
对象配置的 YAML 文件的名称。
创建
Subscription
对象:使用用于创建
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.<version>
运行以下命令来创建
Subscription
对象:$ oc create -f <file_name> 1
- 1
- 将
<file_name>
替换为包含Subscription
对象配置的 YAML 文件的名称。
有关配置 Subscription
对象和 OperatorGroup
对象的详情,请参阅"使用 CLI 安装 OperatorHub"。
验证
要验证是否安装了 Multiarch Tuning Operator,请运行以下命令:
$ oc get csv -n openshift-multiarch-tuning-operator
输出示例
NAME DISPLAY VERSION REPLACES PHASE multiarch-tuning-operator.<version> Multiarch Tuning Operator <version> multiarch-tuning-operator.1.0.0 Succeeded
如果 Operator 处于
Succeeded
阶段,则安装可以成功。可选:要验证是否创建了
OperatorGroup
对象,请运行以下命令:$ oc get operatorgroup -n openshift-multiarch-tuning-operator
输出示例
NAME AGE openshift-multiarch-tuning-operator-q8zbb 133m
可选:要验证是否已创建
Subscription
对象,请运行以下命令:$ oc get subscription -n openshift-multiarch-tuning-operator
输出示例
NAME PACKAGE SOURCE CHANNEL multiarch-tuning-operator multiarch-tuning-operator redhat-operators stable
4.11.2. 使用 Web 控制台安装 Multiarch Tuning Operator
您可以使用 OpenShift Container Platform Web 控制台安装 Multiarch Tuning Operator。
先决条件
-
您可以使用
cluster-admin
权限访问集群。 - 访问 OpenShift Container Platform web 控制台。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
进入到 Operators
OperatorHub。 - 在搜索字段中输入 Multiarch Tuning Operator。
- 点 Multiarch Tuning Operator。
- 从 Version 列表中选择 Multiarch Tuning Operator 版本。
- 点 Install
在 Operator 安装页面中设置以下选项 :
- 将 Update Channel 设置为 stable。
- 将 Installation Mode 设置为 All namespaces on the cluster。
将 Installed Namespace 设置为 Operator recommended Namespace 或 Select a Namespace。
推荐的 Operator 命名空间是
openshift-multiarch-tuning-operator
。如果openshift-multiarch-tuning-operator
命名空间不存在,它会在 Operator 安装过程中创建。如果选择 Select a namespace,则必须从 Select Project 列表中选择 Operator 的命名空间。
将 Update approval 设置为 Automatic 或 Manual。
如果选择 Automatic 更新,Operator Lifecycle Manager (OLM) 将自动更新 Multiarch Tuning Operator 的运行实例,而无需任何干预。
如果选择 手动 更新,OLM 会创建一个更新请求。作为集群管理员,您必须手动批准更新请求,才能将 Multiarch Tuning Operator 更新至更新的版本。
- 可选:选择 Enable Operator recommended cluster monitoring on this Namespace 复选框。
- 点 Install。
验证
-
导航到 Operators
Installed Operators。 -
验证 Multiarch Tuning Operator 是否已列出,Status 字段在
openshift-multiarch-tuning-operator
命名空间中为 Succeeded。
4.11.3. Multiarch Tuning Operator pod 标签和构架支持概述
安装 Multiarch Tuning Operator 后,您可以验证集群中工作负载的多架构支持。您可以使用 pod 标签根据其架构兼容性来识别和管理 pod。这些标签会在新创建的 pod 上自动设置,以深入了解其架构支持。
下表描述了创建 pod 时 Multiarch Tuning Operator 添加的标签:
标签 | 描述 |
---|---|
| pod 支持多种架构。 |
| pod 只支持单架构。 |
|
pod 支持 |
|
pod 支持 |
|
pod 支持 |
|
pod 支持 |
| Operator 已为架构设置了节点关联性要求。 |
| Operator 没有设置节点关联性要求。例如,当 pod 已具有架构的节点关联性时,Multiarch Tuning Operator 会将此标签添加到 pod。 |
| pod 使用门功能。 |
| pod 门被删除。 |
| 构建节点关联性要求时出错。 |
| Operator 在 pod 中设置了架构首选项。 |
|
Operator 没有在 pod 中设置架构首选项,因为用户已在 |
4.11.4. 创建 ClusterPodPlacementConfig 对象
安装 Multiarch Tuning Operator 后,您必须创建 ClusterPodPlacementConfig
对象。在创建此对象时,Multiarch Tuning Operator 会部署一个操作对象,以启用架构感知的工作负载调度。
您只能创建 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 plugins: 4 nodeAffinityScoring: 5 enabled: true 6 platforms: 7 - architecture: amd64 8 weight: 100 9 - architecture: arm64 weight: 50
- 1
- 您必须将此字段值设置为
cluster
。 - 2
- 可选: 您可以将字段值设置为
Normal
,Debug
,Trace
, 或TraceAll
。该值默认设置为Normal
。 - 3
- 可选: 您可以配置
namespaceSelector
来选择 Multiarch Tuning Operator 的 pod 放置操作对象必须处理 pod 的nodeAffinity
的命名空间。默认情况下,考虑所有命名空间。 - 4
- 可选:包括架构感知工作负载调度的插件列表。
- 5
- 可选: 您可以使用此插件为 pod 放置设置架构首选项。启用后,调度程序首先过滤掉不满足 pod 要求的节点。然后,它根据
nodeAffinityScoring.platforms
字段中定义的架构分数来优先选择剩余的节点。 - 6
- 可选:将此字段设置为
true
以启用nodeAffinityScoring
插件。默认值为false
。 - 7
- 可选:定义架构列表及其对应的分数。
- 8
- 将节点架构指定为 score。调度程序会根据您设置的架构分数以及 pod 规格中定义的调度要求来优先选择 pod 放置的节点。接受的值是
arm64、
、amd64
ppc64le
或s390x
。 - 9
- 为架构分配一个分数。此字段的值必须在 1 (最低优先级)到
100
(最高优先级)范围内进行配置。调度程序使用此分数来优先选择 pod 放置的节点,从而优先选择具有更高分数的架构的节点。
在本例中,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
。
此 Operator 排除以 kube-
开始的命名空间中的 pod。它还排除要在 control plane 节点上调度的 pod。
4.11.4.1. 使用 CLI 创建 ClusterPodPlacementConfig 对象
要部署启用架构感知工作负载调度的 pod 放置操作对象,您可以使用 OpenShift CLI (oc
) 创建 ClusterPodPlacementConfig
对象。
先决条件
-
已安装
oc
。 -
已以具有
cluster-admin
权限的用户身份登录oc
。 - 已安装 Multiarch Tuning Operator。
流程
创建
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 plugins: nodeAffinityScoring: enabled: true platforms: - architecture: amd64 weight: 100 - architecture: arm64 weight: 50
运行以下命令来创建
ClusterPodPlacementConfig
对象:$ oc create -f <file_name> 1
- 1
- 将
<file_name>
替换为ClusterPodPlacementConfig
对象 YAML 文件的名称。
验证
要检查
ClusterPodPlacementConfig
对象是否已创建,请运行以下命令:$ oc get clusterpodplacementconfig
输出示例
NAME AGE cluster 29s
4.11.4.2. 使用 Web 控制台创建 ClusterPodPlacementConfig 对象
要部署启用架构感知工作负载调度的 pod 放置操作对象,您可以使用 OpenShift Container Platform Web 控制台创建 ClusterPodPlacementConfig
对象。
先决条件
-
您可以使用
cluster-admin
权限访问集群。 - 访问 OpenShift Container Platform web 控制台。
- 已安装 Multiarch Tuning Operator。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
导航到 Operators
Installed Operators。 - 在 Installed Operators 页面中,点 Multiarch Tuning Operator。
- 点 Cluster Pod Placement Config 选项卡。
- 选择 Form view 或 YAML view。
-
配置
ClusterPodPlacementConfig
对象参数。 - 点 Create。
可选:如果要编辑
ClusterPodPlacementConfig
对象,请执行以下操作:- 点 Cluster Pod Placement Config 选项卡。
- 从选项菜单中选择 Edit ClusterPodPlacementConfig。
-
点 YAML 并编辑
ClusterPodPlacementConfig
对象参数。 - 点击 Save。
验证
-
在 Cluster Pod Placement Config 页面中,检查
ClusterPodPlacementConfig
对象是否处于Ready
状态。
4.11.5. 使用 CLI 删除 ClusterPodPlacementConfig 对象
您只能创建 ClusterPodPlacementConfig
对象的一个实例。如果要重新创建此对象,您必须首先删除现有的实例。
您可以使用 OpenShift CLI (oc
)删除此对象。
先决条件
-
已安装
oc
。 -
已以具有
cluster-admin
权限的用户身份登录oc
。
流程
-
登录 OpenShift CLI (
oc
)。 运行以下命令来删除
ClusterPodPlacementConfig
对象:$ oc delete clusterpodplacementconfig cluster
验证
要检查
ClusterPodPlacementConfig
对象是否已删除,请运行以下命令:$ oc get clusterpodplacementconfig
输出示例
No resources found
4.11.6. 使用 Web 控制台删除 ClusterPodPlacementConfig 对象
您只能创建 ClusterPodPlacementConfig
对象的一个实例。如果要重新创建此对象,您必须首先删除现有的实例。
您可以使用 OpenShift Container Platform Web 控制台删除此对象。
先决条件
-
您可以使用
cluster-admin
权限访问集群。 - 访问 OpenShift Container Platform web 控制台。
-
您已创建了
ClusterPodPlacementConfig
对象。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
导航到 Operators
Installed Operators。 - 在 Installed Operators 页面中,点 Multiarch Tuning Operator。
- 点 Cluster Pod Placement Config 选项卡。
- 从选项菜单中选择 Delete ClusterPodPlacementConfig。
- 点击 Delete。
验证
-
在 Cluster Pod Placement Config 页面中,检查
ClusterPodPlacementConfig
对象是否已删除。
4.11.7. 使用 CLI 卸载 Multiarch Tuning Operator
您可以使用 OpenShift CLI (oc
)卸载 Multiarch Tuning Operator。
先决条件
-
已安装
oc
。 -
已以具有
cluster-admin
权限的用户身份登录oc
。 已删除
ClusterPodPlacementConfig
对象。重要在卸载 Multiarch Tuning Operator 前,您必须删除
ClusterPodPlacementConfig
对象。在不删除ClusterPodPlacementConfig
对象的情况下卸载 Operator 可能会导致意外行为。
流程
运行以下命令,获取 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
运行以下命令,获取 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.<version>
运行以下命令来删除
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
运行以下命令,使用
currentCSV
值删除目标命名空间中 Multiarch Tuning Operator 的 CSV:$ oc delete clusterserviceversion <currentCSV_value> -n <namespace> 1
- 1
- 将
<currentCSV>
替换为 Multiarch Tuning Operator 的currentCSV
值。例如:multiarch-tuning-operator.<version>
。将<namespace>
替换为您要卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
clusterserviceversion.operators.coreos.com "multiarch-tuning-operator.<version>" deleted
验证
要验证 Multiarch Tuning Operator 是否已卸载,请运行以下命令:
$ oc get csv -n <namespace> 1
- 1
- 将
<namespace>
替换为已卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
No resources found in openshift-multiarch-tuning-operator namespace.
4.11.8. 使用 Web 控制台卸载 Multiarch Tuning Operator
您可以使用 OpenShift Container Platform Web 控制台卸载 Multiarch Tuning Operator。
先决条件
-
您可以使用
cluster-admin
权限访问集群。 已删除
ClusterPodPlacementConfig
对象。重要在卸载 Multiarch Tuning Operator 前,您必须删除
ClusterPodPlacementConfig
对象。在不删除ClusterPodPlacementConfig
对象的情况下卸载 Operator 可能会导致意外行为。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
-
进入到 Operators
OperatorHub。 - 在搜索字段中输入 Multiarch Tuning Operator。
- 点 Multiarch Tuning Operator。
- 点 Details 标签页。
- 在 Actions 菜单中,选择 Uninstall Operator。
- 出现提示时,点 Uninstall。
验证
-
导航到 Operators
Installed Operators。 - 在 Installed Operators 页面中,验证 Multiarch Tuning Operator 没有被列出。