4.10. 使用多架构计算机器管理集群
4.10.1. 使用多架构计算机器在集群中调度工作负载
使用不同架构的计算节点在集群中部署工作负载需要注意和监控集群。您可能需要进行进一步的操作,才能成功将 pod 放置到集群的节点中。
您可以使用 Multiarch Tuning Operator 在带有多架构计算机器的集群中启用对工作负载的架构调度。Multiarch Tuning Operator 根据 pod 在创建时支持的架构在 pod 规格中实施额外的调度程序 predicates。如需更多信息,请参阅使用 Multiarch Tuning Operator 在多架构集群上管理工作负载。
如需有关节点关联性、调度、污点和容限的更多信息,请参阅以下文档:
4.10.1.1. 多架构节点工作负载部署示例
在使用不同架构的计算节点将工作负载调度到具有不同架构的计算节点上之前,请考虑以下用例:
- 使用节点关联性在节点上调度工作负载
- 您可以只允许将工作负载调度到其镜像支持的一组节点上,您可以在 pod 模板规格中设置 - spec.affinity.nodeAffinity字段。- 将 - nodeAffinity设置为特定架构的部署示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 指定支持的构架。有效值包括amd64,arm64, 或这两个值。
 
- 为特定架构污点每个节点
- 您可以污点节点,以避免与其架构不兼容的工作负载调度到该节点上。如果集群正在使用 - MachineSet对象,您可以在- .spec.template.spec.taints字段中添加参数,以避免在带有不支持的架构的节点上调度工作负载。- 在污点节点前,您必须缩减 - MachineSet对象或删除可用的机器。您可以使用以下命令之一缩减机器集:- oc scale --replicas=0 machineset <machineset> -n openshift-machine-api - $ oc scale --replicas=0 machineset <machineset> -n openshift-machine-api- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 或者: - oc edit machineset <machineset> -n openshift-machine-api - $ oc edit machineset <machineset> -n openshift-machine-api- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 有关扩展机器集的更多信息,请参阅"修改计算机器集"。 
 - 带有污点集的 - MachineSet示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 您还可以运行以下命令来在特定节点上设置污点: - oc adm taint nodes <node-name> multi-arch.openshift.io/arch=arm64:NoSchedule - $ oc adm taint nodes <node-name> multi-arch.openshift.io/arch=arm64:NoSchedule- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建默认容限
- 您可以运行以下命令来注解命名空间,以便所有工作负载都获得相同的默认容限: - oc annotate namespace my-namespace \ 'scheduler.alpha.kubernetes.io/defaultTolerations'='[{"operator": "Exists", "effect": "NoSchedule", "key": "multi-arch.openshift.io/arch"}]'- $ oc annotate namespace my-namespace \ 'scheduler.alpha.kubernetes.io/defaultTolerations'='[{"operator": "Exists", "effect": "NoSchedule", "key": "multi-arch.openshift.io/arch"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在工作负载中容忍架构污点
- 在具有定义污点的节点上,工作负载不会调度到该节点上。但是,您可以通过在 pod 的规格中设置容限来允许调度它们。 - 具有容限的部署示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 本例部署也可以在指定了 - multi-arch.openshift.io/arch=arm64污点的节点上允许。
- 使用带有污点和容限的节点关联性
- 当调度程序计算一组要调度 pod 的节点时,容限可能会扩大集合,而节点关联性会限制集合。如果将污点设置为特定架构的节点,则需要以下示例容限才能调度 pod。 - 使用节点关联性和容限集的部署示例。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
其他资源
您可以在集群中的 64 位 ARM 计算机器上启用 Red Hat Enterprise Linux CoreOS (RHCOS) 内核中的 64k 内存页。64k 页大小内核规格可用于大型 GPU 或高内存工作负载。这使用 Machine Config Operator (MCO) 完成,它使用机器配置池来更新内核。要启用 64k 页面大小,您必须为 ARM64 指定一个机器配置池,以便在内核中启用。
使用 64k 页专用于 64 位 ARM 架构计算节点或在 64 位 ARM 机器上安装的集群。如果您使用 64 位 x86 机器在机器配置池中配置 64k 页内核,机器配置池和 MCO 将降级。
先决条件
- 
							已安装 OpenShift CLI(oc)。
- 您在其中一个支持的平台中使用不同架构的计算节点创建集群。
流程
- 标记您要运行 64k 页大小内核的节点: - oc label node <node_name> <label> - $ oc label node <node_name> <label>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 示例命令 - oc label node worker-arm64-01 node-role.kubernetes.io/worker-64k-pages= - $ oc label node worker-arm64-01 node-role.kubernetes.io/worker-64k-pages=- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建包含使用 ARM64 架构和 - worker-64k-pages角色的 worker 角色的机器配置池:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在计算节点上创建机器配置,以使用 - 64k-pages参数启用- 64k-pages。- oc create -f <filename>.yaml - $ oc create -f <filename>.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - MachineConfig 示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 64k-pages类型仅支持基于 64 位 ARM 架构。- realtime类型仅支持基于 64 位 x86 架构。
验证
- 要查看您的新 - worker-64k-pages机器配置池,请运行以下命令:- oc get mcp - $ oc get mcp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9d55ac9a91127c36314e1efe7d77fbf8 True False False 3 3 3 0 361d worker rendered-worker-e7b61751c4a5b7ff995d64b967c421ff True False False 7 7 7 0 361d worker-64k-pages rendered-worker-64k-pages-e7b61751c4a5b7ff995d64b967c421ff True False False 2 2 2 0 35m - NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9d55ac9a91127c36314e1efe7d77fbf8 True False False 3 3 3 0 361d worker rendered-worker-e7b61751c4a5b7ff995d64b967c421ff True False False 7 7 7 0 361d worker-64k-pages rendered-worker-64k-pages-e7b61751c4a5b7ff995d64b967c421ff True False False 2 2 2 0 35m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
4.10.3. 在多架构计算机器上的镜像流中导入清单列表
					在带有多架构计算机器的 OpenShift Container Platform 4.16 集群中,集群中的镜像流不会自动导入清单列表。您必须手动将默认的 importMode 选项改为 PreserveOriginal 选项,才能导入清单列表。
				
先决条件
- 
							已安装 OpenShift Container Platform CLI (oc)。
流程
- 以下示例命令演示了如何对 - ImageStreamcli-artifacts 进行补丁,以便- cli-artifacts:latest镜像流标签作为清单列表导入。- oc patch is/cli-artifacts -n openshift -p '{"spec":{"tags":[{"name":"latest","importPolicy":{"importMode":"PreserveOriginal"}}]}}'- $ oc patch is/cli-artifacts -n openshift -p '{"spec":{"tags":[{"name":"latest","importPolicy":{"importMode":"PreserveOriginal"}}]}}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 您可以通过检查镜像流标签来检查是否正确导入的清单列表。以下命令将列出特定标签的各个架构清单。 - oc get istag cli-artifacts:latest -n openshift -oyaml - $ oc get istag cli-artifacts:latest -n openshift -oyaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果存在 - dockerImageManifests对象,则清单列表导入成功。- dockerImageManifests对象的输出示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow