以最佳性能运行 CPU 密集型工作负载


本页面介绍如何指示 Google Kubernetes Engine (GKE) 将每个 Pod 放置在其自己的节点上,以优化 CPU 密集型工作负载的性能,从而拥有对该节点的所有资源的完全访问权限。如需使用此 Pod 放置模型,请在 Autopilot 工作负载中请求性能计算类

性能计算类的优势

当您运行可能需要访问底层虚拟机 (VM) 功能的大规模 CPU 密集型工作负载时,每个 Pod 的专用节点都是理想之选。例如,CPU 密集型 AI/机器学习训练工作负载或高性能计算 (HPC) 批量工作负载。

这些专用节点上的 Pod 具有以下优势:

  • 可预测的性能:随时访问所有节点资源。
  • 可爆发的工作负载:如果您未在清单中设置资源限制,则性能类 Pod 可能会爆发到节点上的所有未使用容量,且将 Kubernetes 节点压力逐出风险降至最低。

性能类 Pod 的工作原理

您部署了一个具有以下特征的 Pod:

  • 选择性能类和 Compute Engine 机器系列
  • 指定资源请求量,理想情况下不指定资源限制

GKE 会执行以下操作:

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

与其他 GKE 特性的兼容性

您可以将性能类 Pod 与以下 GKE 功能和特性搭配使用:

Spot Pod 和扩展运行时 Pod 互斥。GKE 不会对使用工作负载分离的性能类 Pod 强制执行更高的最少资源请求。

价格

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

准备工作

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

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

连接到集群

使用 Google Cloud CLI 连接到 Autopilot 集群:

gcloud container clusters get-credentials CLUSTER_NAME \
    --location=LOCATION

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • LOCATION:集群的 Compute Engine 位置

部署性能类 Pod

  1. 将以下清单保存为 perf-class-pod.yaml

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

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

  2. 部署 Pod:

    kubectl apply -f perf-class-pod.yaml
    

在性能类 Pod 中使用本地 SSD

如果您选择包含本地 SSD 的机器系列,则性能类 Pod 可以将本地 SSD 用于临时存储。在为性能类 Pod 预配节点时,GKE 会考虑临时存储请求。

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: performance-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Performance
        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: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

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

  2. 部署 Pod:

    kubectl apply -f perf-class-pod.yaml
    

支持的机器系列

性能计算类支持以下机器系列:

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

GKE 如何选择机器大小

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

  • 示例 1:假设某个性能类 Pod 选择 C3 机器系列。包含 DaemonSet 的资源请求总数如下所示:

    • 70 vCPU
    • 200 GiB 的内存

    GKE 将 Pod 放置在由 c3-standard-88 机器类型支持的节点上,该机器类型具有 88 个 vCPU 和 352 GB 内存。

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

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

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

后续步骤