Autopilot 中的计算类


本页面介绍可用于运行具有特定硬件要求的 Google Kubernetes Engine (GKE) Autopilot 工作负载的计算类。如需了解相关说明,请参阅在特定计算类上运行 Autopilot Pod

Autopilot 计算类概览

默认情况下,GKE Autopilot Pod 在针对通用工作负载(如 Web 服务和中强度批处理作业)进行了优化的计算平台上运行。此通用平台提供可靠、经过费用优化的硬件配置,可满足大多数工作负载的要求。

如果您的工作负载具有独特的硬件要求(例如执行机器学习或 AI 任务、运行实时高流量数据库或者需要特定的 CPU 平台和架构),则 Autopilot 会提供计算类。这些计算类是 Compute Engine 机器系列的精选部分,可提供超出默认 Autopilot 计算类的灵活性。例如,Scale-Out 计算类使用关闭并发多线程并针对扩容进行了优化的虚拟机。

您可以根据每个工作负载的要求请求由特定计算类支持的节点。与默认的通用计算类类似,Autopilot 会根据您运行的 Pod 管理所请求计算类的容量和资源分配。您可以在 Pod 级别请求计算类,以通过选择最适合每个 Pod 需求的方式来优化成本效率。

选择特定 CPU 架构

如果您的工作负载是针对特定 CPU 平台或架构设计的,则可以选择在 Pod 规范中选择这些平台或架构。比方说,如果您希望 Pod 在使用 Arm 架构的节点上运行,则可以在 Scale-Out 计算类中选择 arm64

价格

GKE Autopilot Pod 的价格取决于 Pod 调度到的节点。如需了解通用工作负载和特定计算类上的 Spot Pod 的价格信息,以及任何承诺使用折扣的信息,请参阅 Autopilot 模式价格

通用或专用计算类上的 Spot Pod 不符合承诺使用折扣的条件。

何时使用特定计算类

下表介绍了 Autopilot 支持的计算类的技术概览,以及每个平台上运行的 Pod 的示例用例。如果您未请求计算类,则 Autopilot 会将 Pod 放置在通用计算平台上,该平台旨在以最优方式运行大多数工作负载。

工作负载要求 计算类 说明 实际使用示例
不需要特定硬件的工作负载 通用

如果您未在 Pod 规范中明确请求计算类,则 Autopilot 会使用通用计算平台。

您不能在规范中明确选择通用平台。

E2 机器系列提供支持。

  • 网络服务器
  • 中小型数据库
  • 开发环境
大于通用计算类最大值或特定 CPU 平台的 CPU 或内存请求 Balanced
  • 可用 CPU:AMD EPYC Rome、AMD EPYC Milan、Intel Ice Lake、Intel Cascade Lake
  • 可用架构:amd64
  • 支持的资源请求大于通用类型
  • 能够为 pod 设置满足最低要求的 CPU 平台,例如“Intel Ice Lake 或更高版本”。

N2 机器系列 (Intel) 或 N2D 机器系列 (AMD) 提供支持。

  • 网络服务器
  • 大中型数据库
  • 缓存
  • 流式传输和媒体传送
单核心单线程计算和横向扩缩 Scale-Out
  • 可用 CPU:Ampere Altra Arm 或 AMD EPYC Milan
  • Compute Engine 机器系列:T2A (Arm)、T2D (x86)
  • 可用架构:arm64 或 amd64
  • SMT 停用。一个 vCPU 等于一个物理核心。
  • 最高时钟频率为 3.5GHz

Tau T2A 机器系列 (Arm) 或 Tau T2D 机器系列 (x86) 提供支持。

  • 网络服务器
  • 容器化的微服务
  • 数据日志处理
  • 大型 Java 应用

如何在 Autopilot 中选择计算类

如需了解详细说明,请参阅为 Autopilot Pod 选择计算类

如需指示 Autopilot 将 Pod 放置在特定计算类上,请在 nodeSelector节点亲和性规则中指定“cloud.google.com/compute-class”标签,如以下示例所示:

nodeSelector

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: hello-app
      template:
        metadata:
          labels:
            app: hello-app
        spec:
          nodeSelector:
            cloud.google.com/compute-class: "COMPUTE_CLASS"
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            resources:
              requests:
                cpu: "2000m"
                memory: "2Gi"
    

根据您的用例将 COMPUTE_CLASS 替换为计算类的名称,例如 Scale-Out

nodeAffinity

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: hello-app
      template:
        metadata:
          labels:
            app: hello-app
        spec:
          terminationGracePeriodSeconds: 25
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            resources:
              requests:
                cpu: "2000m"
                memory: "2Gi"
                ephemeral-storage: "1Gi"
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: cloud.google.com/compute-class
                    operator: In
                    values:
                    - "COMPUTE_CLASS"
      

根据您的用例将 COMPUTE_CLASS 替换为计算类的名称,例如 Scale-Out

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

  • 自动预配由指定配置支持的节点以运行 Pod。
  • 自动向新节点添加污点,以防止其他 Pod 调度到这些节点上。污点对于每个计算类都是唯一的。如果您还选择了 CPU 架构,GKE 会添加一个对该架构唯一的污点。
  • 自动将与已应用的污点对应的容忍设置添加到已部署的 Pod,以便让 GKE 将这些 Pod 放置在新节点上。

比方说,如果您为 Pod 请求 Scale-Out 计算类:

  1. Autopilot 会为这些节点添加特定于 Scale-Out 的污点。
  2. Autopilot 会将该污点的容忍设置添加到 Scale-Out Pod。

未请求 Scale-Out 的 Pod 不会获得容忍设置。因此,GKE 不会将这些 Pod 调度到 Scale-Out 节点上。

如果您未在工作负载规范中明确请求计算类,则 Autopilot 会将 Pod 调度到使用默认通用计算类的节点上。大多数工作负载可以在通用计算类上运行,且不存在任何问题。

如何请求 CPU 架构

在某些情况下,您的工作负载可能针对特定架构构建,例如 Arm。某些计算类(例如平衡或横向扩容)支持多个 CPU 架构。如需在请求计算类的同时请求特定架构,您可以在节点选择器或节点亲和性规则中指定标签,如以下示例所示:

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: COMPUTE_CLASS
        kubernetes.io/arch: ARCHITECTURE
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

ARCHITECTURE 替换为所需的 CPU 架构,例如 arm64amd64

如果您未明确请求架构,则 Autopilot 会使用指定计算类的默认架构。

Autopilot 上的 Arm 架构

Autopilot 支持对使用 Arm CPU 架构的节点的请求。Arm 节点比类似的 x86 节点更经济实惠,同时提升了性能。如需了解如何请求 Arm 节点,请参阅在 Arm 架构上部署 Autopilot 工作负载

确保您在部署中使用正确的映像。如果您的 Pod 使用 Arm 映像,而您没有请求 Arm 节点,则 Autopilot 会在 x86 节点上调度 Pod,而 Pod 会因此崩溃。同样,如果您不小心使用 x86 映像,但为 Pod 请求 Arm 节点,Pod 将崩溃。

Autopilot 针对计算类工作负载的验证

Autopilot 会验证您的工作负载清单,以确保节点选择器或节点亲和性规则中的计算类和架构请求的格式正确。以下规则适用:

  • 计算类不超过一个。
  • 没有不支持的计算类。
  • GKE 版本必须支持计算类。
  • 所选的架构不超过一个。
  • 计算类必须支持所选的架构。

如果您的工作负载清单未通过其中任何验证,则 Autopilot 会拒绝工作负载。

计算类别区域可用性

下表介绍了可使用特定计算类和 CPU 架构的区域:

计算类可用性
通用 所有区域
Balanced 所有区域
Scale-Out

Arm 架构 (arm64):

  • asia-southeast1
  • europe-west4
  • us-central1

x86 架构 (amd64):

  • asia-east1
  • asia-southeast1
  • australia-southeast1
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • southamerica-east1
  • us-central1
  • us-east1
  • us-east4
  • us-west1
  • us-west4

如果计算类在特定区域中可用,则在该区域中至少有两个可用区的硬件可供使用。

默认、最小和最大资源请求

为 Autopilot 工作负载选择计算类时,请确保指定的资源请求满足该计算类的最小和最大请求。如需了解默认请求以及每个计算类的最小和最大请求,请参阅 GKE Autopilot 中的资源请求和限制

后续步骤