本页面了介绍如何配置 Google Kubernetes Engine (GKE) Autopilot 部署以请求由 Arm 架构支持的节点。
关于 Autopilot 中的 Arm 架构
Autopilot 集群为具有特定硬件要求的工作负载提供计算类。其中一些计算类支持多个 CPU 架构,例如 amd64
和 arm64
。
Arm 节点使用场景
与类似的 x86 节点相比,采用 Arm 架构的节点可提供更高的成本效益。在以下情况下,您应该为 Autopilot 工作负载选择 Arm:
- 您的环境依赖 Arm 架构进行构建和测试。
- 您要为 Arm CPU 上运行的 Android 设备开发应用。
- 您使用多架构映像并希望在运行工作负载时优化费用。
如何在 Autopilot 中请求 Arm 节点
如需为 Pod 请求 Arm 节点,您必须请求具有 Arm 架构的节点,并请求支持 Arm 节点的计算类。以下部分介绍了如何使用 Pod 规范中的节点选择器或节点亲和性规则来请求计算类和 Arm 架构。
如需查看支持 Arm 架构的计算类列表,请参阅 Autopilot 中的计算类。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
- 确保您拥有运行 GKE 1.24.1-gke.1400 版或更高版本的 GKE Autopilot 集群。 如需设置版本,请在 create 或 upgrade 命令中使用
--cluster-version
标志。 - 确保您拥有
T2A
Compute Engine 机器类型的配额。 - 确保您有一个容器映像专为 Arm 架构而构建的 Pod。
请求计算类和 Arm 架构
如需指示 Autopilot 将 Pod 放置在支持 Arm 架构的计算类上,请在 nodeSelector 或节点亲和性规则中指定以下两个标签:
cloud.google.com/compute-class: COMPUTE_CLASS
kubernetes.io/arch: arm64
将 COMPUTE_CLASS
替换为支持 Arm 架构的计算类的名称,例如 Scale-Out
。
部署工作负载时,Autopilot 会执行以下操作:
- 自动预配 Arm 节点以运行 Pod。
- 自动为新节点添加污点,以防止非 Arm Pod 被调度到这些节点上。
- 自动将容忍设置添加到 Arm Pod,以便可以调度到新节点上。
您还可以为 Spot Pod 请求 Arm 架构。
Arm 架构的示例请求
以下示例规范介绍如何使用节点选择器或节点亲和性规则在 Autopilot 中请求 Arm 架构。
nodeSelector
以下示例清单展示了如何在 nodeSelector 中请求 Arm 节点:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-arm
spec:
replicas: 3
selector:
matchLabels:
app: nginx-arm
template:
metadata:
labels:
app: nginx-arm
spec:
nodeSelector:
cloud.google.com/compute-class: Scale-Out
kubernetes.io/arch: arm64
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
nodeAffinity
您可以使用节点亲和性请求 Arm 节点。您还可以指定要使用的节点亲和性类型:
requiredDuringSchedulingIgnoredDuringExecution
:必须使用指定的计算类和架构。preferredDuringSchedulingIgnoredDuringExecution
:尽力使用指定的计算类和架构。比方说,如果现有 x86 节点可分配,则 GKE 会将您的 Pod 放在 x86 节点上,而不是预配新的 Arm 节点。除非您使用多架构映像清单,否则您的 Pod 将崩溃。我们强烈建议您明确请求所需的特定架构。
以下示例清单需要 Scale-Out
类和 Arm 节点:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-arm
spec:
replicas: 3
selector:
matchLabels:
app: nginx-arm
template:
metadata:
labels:
app: nginx-arm
spec:
terminationGracePeriodSeconds: 25
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
ephemeral-storage: 1Gi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/compute-class
operator: In
values:
- Scale-Out
- key: kubernetes.io/arch
operator: In
values:
- arm64
建议
- 作为流水线的一部分,构建并使用多架构映像。多架构映像可确保即使 Pod 放置在 x86 节点上也会运行。
- 在工作负载清单中明确请求架构和计算类。如果没有指定,Autopilot 将使用所选计算类的默认架构,这可能不是 Arm。
可用性
在以下 Google Cloud 区域中,您可以在 Arm 架构上部署 Autopilot 工作负载:
- us-central1
- europe-west4
- asia-southeast1
问题排查
如需了解常见错误和问题排查信息,请参阅排查 Arm 工作负载问题。