在 Arm 架构上部署 Autopilot 工作负载


本页面了介绍如何配置 Google Kubernetes Engine (GKE) Autopilot 部署以请求由 Arm 架构支持的节点。

关于 Autopilot 中的 Arm 架构

Autopilot 集群为具有特定硬件要求的工作负载提供计算类。其中一些计算类支持多个 CPU 架构,例如 amd64arm64

Arm 节点使用场景

与类似的 x86 节点相比,采用 Arm 架构的节点可提供更高的成本效益。在以下情况下,您应该为 Autopilot 工作负载选择 Arm:

  • 您的环境依赖 Arm 架构进行构建和测试。
  • 您要为 Arm CPU 上运行的 Android 设备开发应用。
  • 您使用多架构映像并希望在运行工作负载时优化费用。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

如何在 Autopilot 中请求 Arm 节点

如需指示 Autopilot 在 Arm 节点上运行 Pod,请在 nodeSelector节点亲和性规则中指定以下标签之一:

  • kubernetes.io/arch: arm64。对于运行 1.31.3-gke.1056000 及更高版本的集群,GKE 会默认将 Pod 放置在 C4A 机器类型上。如果集群运行的是更早的版本,GKE 会将 Pod 放置在 T2A 机器类型上。
  • cloud.google.com/machine-family: ARM_MACHINE_SERIES。将 ARM_MACHINE_SERIES 替换为 Arm 机器系列,例如 C4AT2A。GKE 会将 Pod 放置在指定的系列中。

默认情况下,如果节点上有可用容量,使用任一标签可让 GKE 将其他 Pod 放置在同一节点上。如需为每个 Pod 请求专用节点,请将 cloud.google.com/compute-class: Performance 标签添加到清单中。如需了解详情,请参阅通过选择机器系列优化 Autopilot Pod 性能

或者,您也可以将 Scale-Out 标签与 arm64 标签搭配使用,以请求 T2A。您还可以为 Spot Pod 请求 Arm 架构。

部署工作负载时,Autopilot 会执行以下操作:

  1. 自动预配 Arm 节点以运行 Pod。
  2. 自动为新节点添加污点,以防止非 Arm Pod 被调度到这些节点上。
  3. 自动将容忍设置添加到 Arm Pod,以便可以调度到新节点上。

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: Performance
        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 将崩溃。我们强烈建议您明确请求所需的特定架构。

以下示例清单需要 Performance 类和 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:
                - Performance
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

建议

  • 作为流水线的一部分,构建并使用多架构映像。多架构映像可确保即使 Pod 放置在 x86 节点上也会运行。
  • 在工作负载清单中明确请求架构和计算类。如果没有指定,Autopilot 将使用所选计算类的默认架构,这可能不是 Arm。

可用性

您可以在支持 Arm 架构的Google Cloud 位置,在 Arm 架构上部署 Autopilot 工作负载。如需了解详情,请参阅可用区域和可用区

问题排查

如需了解常见错误和问题排查信息,请参阅排查 Arm 工作负载问题

后续步骤