通过选择机器系列优化 Autopilot Pod 性能


本页面介绍了如何将工作负载放置在特定的 Compute Engine 机器系列上,以便在 Google Kubernetes Engine (GKE) Autopilot 集群中实现最佳工作负载性能。

确保您熟悉以下内容:

机器系列选择的运作方式

您可以将 cloud.google.com/machine-family 节点选择器添加到 Pod 规范中,以便 Autopilot 为该 Pod 分配特定的 Compute Engine 硬件。例如,您可以为需要更强 CPU 的 Pod 选择 C3 机器系列,或为需要更多内存的 Pod 选择 N1 机器系列。Autopilot 会预配所选机器系列中的一个预定义机器类型,以最佳方式运行您的工作负载。

除了实现最佳 Pod 性能之外,选择特定的机器系列还具有以下优势:

  • 高效的节点利用率:默认情况下,Autopilot 会通过在每个节点上尽可能多地调度请求同一机器系列的 Pod 来优化节点资源使用率。这种方法可优化节点上的资源使用率,从而提高性价比。如果您的工作负载需要访问节点上的所有资源,您可以视需要将工作负载配置为为每个节点请求一个 Pod。

  • 可爆发的工作负载:您可以通过将资源限制设置为高于请求,将 Pod 配置为爆发使用节点上未使用资源容量。如需了解详情,请参阅在 GKE 中配置 Pod 爆发

为每个 Pod 请求专用节点

如果您的 CPU 密集型工作负载需要稳定获取所有节点资源,可以视需要配置 Pod,以便 Autopilot 将请求机器系列的 Pod 放置在其自己的节点上。

当您运行大规模 CPU 密集型工作负载(例如 AI/机器学习训练工作负载或高性能计算 [HPC] 批量工作负载)时,建议每个 Pod 配专用节点。

在多 Pod 调度和单 Pod 调度之间进行选择

请按照以下指南,根据您的要求选择 Pod 调度行为:

价格

Compute Engine 会向您收取底层虚拟机和任何挂接硬件的费用,同时收取 Autopilot 节点管理和可伸缩性附加费。如需了解详情,请参阅 GKE 价格

准备工作

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

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。
  • 确保您已有运行 1.30.1-gke.1396000 版或更高版本的 Autopilot 集群。如需创建集群,请参阅创建 Autopilot 集群

选择机器系列

本部分介绍如何在 Pod 中选择特定的 Compute Engine 机器系列。

  1. 将以下清单保存为 machine-series-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: machine-series-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 5
            memory: "25Gi"
          limits:
            cpu: 20
            memory: 100Gi
    

    MACHINE_SERIES 替换为 Pod 的 Compute Engine 机器系列,例如 c3。如需查看支持的值,请参阅本页面中的支持的机器系列

  2. 部署 Pod:

    kubectl apply -f machine-series-pod.yaml
    

借助此清单,Autopilot 可在有可用容量的情况下,高效地将选择同一机器系列的其他 Pod 调度到同一节点,从而优化节点资源使用率。

使用本地 SSD

如果您指定了提供本地 SSD 的机器系列,则选择机器系列的 Pod 可以将本地 SSD 用于临时存储空间。Autopilot 在为 Pod 选择 Compute Engine 机器类型时会考虑临时存储空间请求。

  1. 将以下清单保存为 local-ssd-pod.yaml

      apiVersion: v1
      kind: Pod
    metadata:
      name: local-ssd-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 6
            memory: "25Gi"
            ephemeral: "100Gi"
          limits:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

    MACHINE_SERIES 替换为还支持本地 SSD 的支持的机器系列。如果指定的机器系列不支持本地 SSD,部署将失败并显示错误。

  2. 部署 Pod:

    kubectl apply -f local-ssd-pod.yaml
    

为 Pod 请求专用节点

如果您的 Pod 有特定的性能要求,例如需要稳定获取节点的所有资源,您可以通过指定 cloud.google.com/compute-class: Performance 节点选择器以及机器系列节点选择器,为每个 Pod 请求专用节点。这会指示 Autopilot 将您的 Pod 放置在使用指定机器系列且专用于该 Pod 的新节点上。此节点选择器还可防止 Autopilot 将其他 Pod 调度到该节点上。

  1. 将以下清单保存为 dedicated-node-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: dedicated-node-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/compute-class: Performance
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

    MACHINE_SERIES 替换为也支持每节点调度一个 Pod 的支持的机器系列。如果指定的机器系列不支持每节点调度一个 Pod,部署将失败并显示错误。

  2. 部署 Pod:

    kubectl apply -f dedicated-node-pod.yaml
    

部署此清单时,Autopilot 会执行以下操作:

  • 确保所部署 Pod 至少请求性能优化节点的最少资源
  • 计算所部署 Pod 和集群中任何 DaemonSet 的资源请求总量。
  • 预配由所选机器系列提供支持的节点。
  • 使用节点选择器和容忍组合修改 Pod 清单,以确保 Pod 在其自己的节点上运行。

支持的机器系列

machine-family 选择器支持以下机器系列:

(始终捆绑)

如需比较这些机器系列及其应用场景,请参阅 Compute Engine 文档中的机器系列比较

与其他 GKE 特性的兼容性

您使用的 Pod 可以选择具有以下 GKE 功能和特性的机器系列:

Spot Pod 和扩展运行时 Pod 互斥。GKE 不会对每个节点都有专用 Pod 的情况强制执行更高的最少资源请求,即使它们使用工作负载分离也是如此。

GKE 如何选择机器类型

为了选择指定机器系列中的机器类型,GKE 会计算 Pod 以及在新节点上运行的任何 DaemonSet 的总 CPU、总内存和总临时存储空间请求数。GKE 将这些值向上舍入到支持所有这些总数的最接近的可用 Compute Engine 机器类型。

  • 示例 1:假设具有四个副本的 Deployment 选择 C3D 机器系列。您无需为每个 Pod 请求专用节点。每个副本的资源请求如下所示:

    • 500m vCPU
    • 1 GiB 内存

    Autopilot 将所有 Pod 放置在由 c3d-standard-4 机器类型支持的节点上,该机器类型具有 4 个 vCPU 和 16 GB 内存。

  • 示例 2:假设某个 Pod 选择 C3D 机器系列和本地 SSD 作为临时存储空间。您为 Pod 请求专用节点。包含 DaemonSet 的资源请求总数如下所示:

    • 12 vCPU
    • 50 GiB 的内存
    • 200 GiB 的临时存储空间

    Autopilot 将 Pod 放置在使用 c3d-standard-16-lssd 机器类型的节点上,该机器类型具有 16 个 vCPU、64 GiB 内存和 365 GiB 本地 SSD 容量。

后续步骤