3.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 所有,则 operand 不会更新
nodeAffinity字段。 -
如果为
kubernetes.io/arch标签设置了nodeSelector或nodeAffinity和preferredAffinity字段,则 operand 不会更新nodeAffinity字段。 -
如果为
kubernetes.io/arch标签只设置了nodeSelector或nodeAffinity字段,并且禁用了nodeAffinityScoring插件,则 operand 不会更新nodeAffinity字段。 -
如果
nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution字段已包含基于kubernetes.io/arch标签的分数节点的条件,则 operand 会忽略nodeAffinityScoring插件中的配置。
3.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
$ oc create ns openshift-multiarch-tuning-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
OperatorGroup对象:使用用于创建
OperatorGroup对象的配置创建 YAML 文件。创建
OperatorGroup对象的 YAML 配置示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
OperatorGroup对象:oc create -f <file_name>
$ oc create -f <file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<file_name>替换为包含OperatorGroup对象配置的 YAML 文件的名称。
创建
Subscription对象:使用用于创建
Subscription对象的配置创建 YAML 文件。创建
Subscription对象的 YAML 配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Subscription对象:oc create -f <file_name>
$ oc create -f <file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<file_name>替换为包含Subscription对象配置的 YAML 文件的名称。
有关配置 Subscription 对象和 OperatorGroup 对象的详情,请参阅"使用 CLI 安装 OperatorHub"。
验证
要验证是否安装了 Multiarch Tuning Operator,请运行以下命令:
oc get csv -n openshift-multiarch-tuning-operator
$ oc get csv -n openshift-multiarch-tuning-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE multiarch-tuning-operator.<version> Multiarch Tuning Operator <version> multiarch-tuning-operator.1.0.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE multiarch-tuning-operator.<version> Multiarch Tuning Operator <version> multiarch-tuning-operator.1.0.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 Operator 处于
Succeeded阶段,则安装可以成功。可选:要验证是否创建了
OperatorGroup对象,请运行以下命令:oc get operatorgroup -n openshift-multiarch-tuning-operator
$ oc get operatorgroup -n openshift-multiarch-tuning-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE openshift-multiarch-tuning-operator-q8zbb 133m
NAME AGE openshift-multiarch-tuning-operator-q8zbb 133mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:要验证是否已创建
Subscription对象,请运行以下命令:oc get subscription -n openshift-multiarch-tuning-operator
$ oc get subscription -n openshift-multiarch-tuning-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PACKAGE SOURCE CHANNEL multiarch-tuning-operator multiarch-tuning-operator redhat-operators stable
NAME PACKAGE SOURCE CHANNEL multiarch-tuning-operator multiarch-tuning-operator redhat-operators stableCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.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。
3.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 中设置架构首选项,因为用户已在 |
3.11.4. 创建 ClusterPodPlacementConfig 对象 复制链接链接已复制到粘贴板!
安装 Multiarch Tuning Operator 后,您必须创建 ClusterPodPlacementConfig 对象。在创建此对象时,Multiarch Tuning Operator 会部署一个操作对象,以启用架构感知的工作负载调度。
您只能创建 ClusterPodPlacementConfig 对象的一个实例。
ClusterPodPlacementConfig 对象配置示例
- 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
- 指定节点架构的分数。调度程序会根据您设置的架构分数以及 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
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。
3.11.4.1. 使用 CLI 创建 ClusterPodPlacementConfig 对象 复制链接链接已复制到粘贴板!
要部署启用架构感知工作负载调度的 pod 放置操作对象,您可以使用 OpenShift CLI (oc) 创建 ClusterPodPlacementConfig 对象。
先决条件
-
已安装
oc。 -
已以具有
cluster-admin权限的用户身份登录oc。 - 已安装 Multiarch Tuning Operator。
流程
创建
ClusterPodPlacementConfig对象 YAML 文件:ClusterPodPlacementConfig对象配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
ClusterPodPlacementConfig对象:oc create -f <file_name>
$ oc create -f <file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<file_name>替换为ClusterPodPlacementConfig对象 YAML 文件的名称。
验证
要检查
ClusterPodPlacementConfig对象是否已创建,请运行以下命令:oc get clusterpodplacementconfig
$ oc get clusterpodplacementconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE cluster 29s
NAME AGE cluster 29sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.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状态。
3.11.5. 使用 CLI 删除 ClusterPodPlacementConfig 对象 复制链接链接已复制到粘贴板!
您只能创建 ClusterPodPlacementConfig 对象的一个实例。如果要重新创建此对象,您必须首先删除现有的实例。
您可以使用 OpenShift CLI (oc)删除此对象。
先决条件
-
已安装
oc。 -
已以具有
cluster-admin权限的用户身份登录oc。
流程
-
登录 OpenShift CLI (
oc)。 运行以下命令来删除
ClusterPodPlacementConfig对象:oc delete clusterpodplacementconfig cluster
$ oc delete clusterpodplacementconfig clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要检查
ClusterPodPlacementConfig对象是否已删除,请运行以下命令:oc get clusterpodplacementconfig
$ oc get clusterpodplacementconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No resources found
No resources foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.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对象是否已删除。
3.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>
$ oc get subscription.operators.coreos.com -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace>替换为您要卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
NAME PACKAGE SOURCE CHANNEL openshift-multiarch-tuning-operator multiarch-tuning-operator redhat-operators stable
NAME PACKAGE SOURCE CHANNEL openshift-multiarch-tuning-operator multiarch-tuning-operator redhat-operators stableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取 Multiarch Tuning Operator 的
currentCSV值:oc get subscription.operators.coreos.com <subscription_name> -n <namespace> -o yaml | grep currentCSV
$ oc get subscription.operators.coreos.com <subscription_name> -n <namespace> -o yaml | grep currentCSV1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<subscription_name>替换为Subscription对象名称。例如:openshift-multiarch-tuning-operator。将<namespace>替换为您要卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
currentCSV: multiarch-tuning-operator.<version>
currentCSV: multiarch-tuning-operator.<version>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除
Subscription对象:oc delete subscription.operators.coreos.com <subscription_name> -n <namespace>
$ oc delete subscription.operators.coreos.com <subscription_name> -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<subscription_name>替换为Subscription对象名称。将<namespace>替换为您要卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
subscription.operators.coreos.com "openshift-multiarch-tuning-operator" deleted
subscription.operators.coreos.com "openshift-multiarch-tuning-operator" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
currentCSV值删除目标命名空间中 Multiarch Tuning Operator 的 CSV:oc delete clusterserviceversion <currentCSV_value> -n <namespace>
$ oc delete clusterserviceversion <currentCSV_value> -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<currentCSV>替换为 Multiarch Tuning Operator 的currentCSV值。例如:multiarch-tuning-operator.<version>。将<namespace>替换为您要卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
clusterserviceversion.operators.coreos.com "multiarch-tuning-operator.<version>" deleted
clusterserviceversion.operators.coreos.com "multiarch-tuning-operator.<version>" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证 Multiarch Tuning Operator 是否已卸载,请运行以下命令:
oc get csv -n <namespace>
$ oc get csv -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace>替换为已卸载 Multiarch Tuning Operator 的命名空间的名称。
输出示例
No resources found in openshift-multiarch-tuning-operator namespace.
No resources found in openshift-multiarch-tuning-operator namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.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 没有被列出。