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


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

关于 Autopilot 中的 Arm 架构

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

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 以获取最新版本。

请求计算类和 Arm 架构

如需指示 Autopilot 将 Pod 放置在支持 Arm 架构的计算类上,请在 nodeSelector节点亲和性规则中指定以下两个标签:

cloud.google.com/compute-class: COMPUTE_CLASS
kubernetes.io/arch: arm64

COMPUTE_CLASS 替换为支持 Arm 架构的计算类的名称,例如 Scale-Out

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

  1. 自动预配 Arm 节点以运行 Pod。
  2. 自动为新节点添加污点,以防止非 Arm Pod 被调度到这些节点上。
  3. 自动将容忍设置添加到 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 工作负载问题

后续步骤