本页面介绍了如何准备要调度到 GKE Standard 集群中的 Arm 节点上的工作负载。如需详细了解如何使用 Autopilot 调度 Arm 工作负载,请参阅在 Arm 架构上部署 Autopilot 工作负载。
为了成功将工作负载调度到 Arm 节点,您必须拥有以下各项:
- 与 Arm 兼容的容器映像。如需对此检查确认,请参阅我的工作负载是否已准备好使用 Arm?
- 与 Arm 兼容的工作负载可以调度到的 Arm 节点。如需创建必要的资源,请参阅创建具有 Arm 节点的集群和节点池。
- Google Cloud 区域或可用区中具有可用 Arm 虚拟机的集群。如需查看可过滤的机器类型和平台表,请参阅可用的区域和可用区。
概览
默认情况下,通过在所有 Arm 节点上放置污点 (kubernetes.io/arch=arm64:NoSchedule
),GKE 仅会将工作负载调度到基于 x86 的节点(具有 Intel 或 AMD 处理器的 Compute Engine 机器系列)。此污点可防止与 x86 兼容的工作负载被意外调度到 Arm 节点。如果您要将工作负载部署到 Arm 节点,请使用本页面中所述的字段指导调度器将工作负载发送到所需的节点类型。
请使用以下某个字段:
使用节点选择器或节点亲和性规则时,只有在您已声明工作负载的容器映像可以在节点的架构上运行的情况下,GKE 才会调度与 Arm 兼容的工作负载。
如果您按照以下部分所述,使用节点选择器或使用节点亲和性规则调度与 Arm 兼容的工作负载,GKE 会自动向工作负载配置添加容忍设置,以便 Pod 可以在 Arm 节点上运行。
添加到工作负载的此容忍设置与添加到所有 Arm 节点的污点 (kubernetes.io/arch=arm64:NoSchedule
) 匹配,以允许将工作负载调度到 Arm 节点上。
在某些情况下(例如,您拥有可以在任何节点上运行的多架构映像),您可能需要手动将此容忍设置添加到工作负载配置中。如需查看相关说明,请参阅使用容忍设置将多架构工作负载调度到任何架构。
使用节点选择器调度 Arm 工作负载
将以下节点选择器添加到规范中:
nodeSelector:
kubernetes.io/arch: arm64
节点选择器指定此工作负载应仅调度到具有 arm64
标签的节点(GKE 集群上的所有 Arm 节点都具有此标签)。
当工作负载配置中包含此节点选择器时,GKE 会添加容忍设置以与污点匹配,从而允许将工作负载调度到 Arm 节点上。
使用节点亲和性规则调度 Arm 工作负载
您还可以使用节点亲和性来调度工作负载。
将工作负载调度到单个架构
将以下节点亲和性规则添加到规范中:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
节点亲和性规则指定工作负载应仅调度到具有 arm64
标签的节点(GKE 集群上的所有 Arm 节点都具有此标签)。
当工作负载配置中包含此节点亲和性规则时,GKE 会添加容忍设置以与污点匹配,从而允许将工作负载调度到 Arm 节点上。
将工作负载调度到 x86 和 Arm 架构
如果要跨 x86(Intel 和 AMD 处理器)和 Arm 架构调度工作负载,您可以通过不同的方式指定这一配置。
使用容忍设置将多架构工作负载调度到任何架构
如果您要将多架构映像调度到 Standard 集群中的任何可用架构类型,则只需将容忍设置添加到工作负载规范中:您无需使用本页面中所述的节点选择器或节点亲和性规则,因为工作负载可以调度到所有架构类型。
添加容忍设置:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
通过此容忍设置,GKE 可以将工作负载调度到具有任何架构类型的节点。
例如,如果您的集群具有以下节点池:
- my-t2a-node-pool,使用 t2a-standard-16 虚拟机 (
arm64
)。 - my-c2-node-pool,使用 c2-standard-8 虚拟机 (
amd64
)。 - my-t2d-node-pool,使用 t2-standard-48 虚拟机 (
amd64
)。
如果您向此集群部署在工作负载配置中使用多架构映像和 arm64
容忍设置的工作负载,GKE 可能会在所有节点池中调度此工作负载。
使用节点亲和性规则将多架构工作负载调度到任何架构
如果您希望在多种架构类型(包括 x86 和 Arm)的节点上调度工作负载,还可以使用节点亲和性规则。使用节点亲和性规则,您可以准确指定要将工作负载调度到的架构类型。这是在 Autopilot 集群上调度工作负载的建议方法。如需了解详情,请参阅在 Arm 架构上部署 Autopilot 工作负载。
对于基于 x86 的工作负载,您不需要这些节点选择器、节点亲和性规则或容忍设置即可调度工作负载。如果您只想将映像调度到基于 x86 的节点,则无需使用这些字段。
如需将工作负载调度到任何架构类型,请在节点亲和性字段的 values
部分中同时列出 arm64
和 amd64
。amd64
包括使用 x86 处理器的所有节点。
以下示例指定此工作负载可以调度到具有 Arm 处理器或 x86 处理器的节点:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
每种架构类型的标签如下:
arm64
,用于使用 Arm 处理器的节点(例如 Tau T2A)。amd64
,用于使用 AMD 处理器的节点(例如 Tau T2D)或使用 Intel 处理器的节点(例如 C2)。
例如,如果您的集群具有以下节点池和给定的节点亲和性规则:
- my-t2a-node-pool,使用 t2a-standard-16 虚拟机 (
arm64
)。 - my-c2-node-pool,使用 c2-standard-8 虚拟机 (
amd64
)。 - my-t2d-node-pool,使用 t2-standard-48 虚拟机 (
amd64
)。
如果您向此集群部署使用多架构映像的工作负载以及在 values
列表中包含 arm64
的节点亲和性规则,GKE 会在工作负载配置中添加容忍设置并且可能会在所有节点池中调度此工作负载。
部署工作负载
现在您已指定应将与 Arm 兼容的工作负载调度到的位置,接下来可以部署工作负载了。
将工作负载部署到 GKE 集群时,各种架构类型的操作步骤相同。只要您完成了前提步骤,就可以部署与 Arm 兼容的工作负载,就像部署任何其他工作负载一样。如需查看部署工作负载的示例,请参阅以下页面:
问题排查
如需了解常见错误和问题排查信息,请参阅排查 Arm 工作负载问题。