Autopilot 集群中的“均衡”和“横向扩缩”ComputeClass 简介


您可以在 Google Kubernetes Engine (GKE) Autopilot 集群中使用 BalancedScale-Out ComputeClasses 来运行需要额外计算容量或专用 CPU 配置的工作负载。本页面面向希望获得比默认 Autopilot 集群配置更灵活的计算选项的集群管理员。

均衡型和横向扩缩型 ComputeClass 概览

默认情况下,GKE Autopilot 集群中的 Pod 在容器优化型计算平台上运行。此平台非常适合 Web 服务器和中等强度的批量作业等通用工作负载。容器优化型计算平台提供可靠、可扩缩、经过费用优化的硬件配置,可满足大多数工作负载的要求。

如果您的工作负载具有独特的硬件要求(例如执行机器学习或 AI 任务、运行实时高流量数据库或者需要特定的 CPU 平台和架构),则可以使用 ComputeClasses 来预配该硬件。

在 Autopilot 集群中,GKE 仅提供以下精选的 ComputeClass,让您可以运行需要比默认容器优化型计算平台更灵活的 Pod:

  • Balanced:与容器优化型计算平台相比,可提供更高的 CPU 和内存容量上限。
  • Scale-Out:停用并发多线程 (SMT),并针对扩容进行了优化。

这些 ComputeClass 仅在 Autopilot 集群中可用。与默认的容器优化型计算平台类似,Autopilot 会根据您运行的 Pod 管理节点容量和资源分配。

可实现更高灵活性的自定义 ComputeClass

如果 Autopilot 集群中的“均衡”或“横向扩缩”ComputeClass 无法满足您的工作负载要求,您可以配置自己的 ComputeClass。您可以使用一组节点属性将 ComputeClass Kubernetes 自定义资源部署到集群,GKE 会使用这些属性来配置集群中的新节点。例如,借助这些自定义 ComputeClass,您可以在任何 GKE Autopilot 或 Standard 集群中,将工作负载部署在与 BalancedScale-Out ComputeClass 相同的硬件上。如需了解详情,请参阅 GKE Standard 中的 Autopilot 模式工作负载简介

价格

使用 BalancedScale-Out ComputeClass 的 Pod 根据以下 SKU 计费:

如需了解详情,请参阅 GKE 价格

均衡和横向扩缩技术细节

本部分介绍了 BalancedScale-Out 类的机器类型和使用场景。如果您未在 Pod 中请求 ComputeClass,则 Autopilot 默认会将 Pod 放置在容器优化型计算平台上。有时,您可能会在使用容器优化型计算平台的 Autopilot 节点中看到 ek 作为节点机器系列。EK 机器是 Autopilot 专用的 E2 机器类型。

下表从技术角度简要介绍了 BalancedScale-Out ComputeClass。

均衡型和扩容型 ComputeClass
Balanced

提供比容器优化计算平台最大值更高的 CPU 容量和内存容量。 提供额外的 CPU 平台,并能够为 pod 设置满足最低要求的 CPU 平台,例如 Intel Ice Lake 或更高版本。

  • 可用 CPU:AMD EPYC Rome、AMD EPYC Milan、Intel Ice Lake、Intel Cascade Lake
  • 可用架构:amd64
  • 机器系列N2(Intel CPU)或 N2D 机器系列(AMD CPU)。

Balanced 类可用于以下应用:

  • 网络服务器
  • 大中型数据库
  • 缓存
  • 流式传输和媒体传送
  • Hyperdisk Throughput 和 Extreme 存储空间
Scale-Out

提供单核心单线程计算和横向伸缩。

  • 可用 CPU:Ampere Altra Arm 或 AMD EPYC Milan
  • 可用架构:arm64 或 amd64
  • 机器系列T2A (Arm) 或 T2D (x86)。
  • 其他功能
    • SMT 已停用,因此一个 vCPU 等于一个物理核心。
    • 最高时钟速度为 3.5GHz。

Scale-Out 类可用于以下应用:

  • 网络服务器
  • 容器化的微服务
  • 数据日志处理
  • 大型 Java 应用
  • Hyperdisk Throughput 存储空间

工作负载中的 ComputeClass 选择

如需为 GKE 工作负载使用 ComputeClass,您可以在工作负载清单中使用 cloud.google.com/compute-class 标签的节点选择器来选择 ComputeClass。

以下示例 Deployment 清单选择了一个 ComputeClass:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "4Gi"

COMPUTE_CLASS 替换为 ComputeClass 的名称,例如 BalancedScale-Out。您可以在一个工作负载中最多选择一个 ComputeClass。

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

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

例如,如果您为 Pod 请求 Scale-Out ComputeClass:

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

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

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

如何请求 CPU 架构

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

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。您最多可以在工作负载中选择一种架构。您选择的 ComputeClass 必须支持您指定的架构。

如果您未明确请求架构,则 Autopilot 会使用 ComputeClass 的默认架构。

Autopilot 上的 Arm 架构

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

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

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

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

后续步骤