Autopilot 中的资源请求


本页面介绍了您可以为 Google Kubernetes Engine (GKE) Autopilot 工作负载指定的最大、最小和默认资源请求,以及 Autopilot 如何自动修改这些请求以保持工作负载稳定性。

Autopilot 中的资源请求概览

Autopilot 使用您在工作负载配置中指定的资源请求来配置运行工作负载的节点。Autopilot 会根据工作负载使用的计算类或硬件配置强制执行最小和最大资源请求。如果您没有为某些容器指定请求,则 Autopilot 会分配默认值以使这些容器正常运行。

在 Autopilot 集群中部署工作负载时,GKE 会根据所选计算类或硬件配置(例如 GPU)允许的最小值和最大值来验证工作负载配置。如果请求小于最小值,则 Autopilot 会自动修改工作负载配置,以使请求在允许的范围内。如果请求大于最大值,则 Autopilot 会拒绝您的工作负载并显示错误消息。

以下列表总结了资源请求的类别:

  • 默认资源请求:如果您没有为工作负载指定自己的请求,则 Autopilot 会添加这些请求
  • 最小和最大资源请求:Autopilot 会验证您指定的请求,以确保它们在这些限制范围内。如果您的请求超出了限制,则 Autopilot 会修改工作负载请求。
  • 工作负载分离和延长时长请求:Autopilot 为彼此分离的工作负载或防范 GKE 发起的逐出时长延长的 Pod 使用不同的默认值和不同的最小值。
  • DaemonSet 的资源请求:Autopilot 为 DaemonSet 中的容器使用不同默认值、最小值和最大值。

如何请求资源

在 Autopilot 中,您可以在 Pod 规范中请求资源。您可以请求的受支持的资源数下限和上限会因 Pod 运行的节点的硬件配置而变化。如需了解如何请求特定硬件配置,请参阅以下页面:

默认资源请求

如果您没有为 Pod 中的某些容器指定资源请求,则 Autopilot 会应用默认值。这些默认值适合许多较小的工作负载。

此外,无论选择什么计算类或硬件配置,Autopilot 都会应用以下默认资源请求:

  • DaemonSet 中的容器

    • CPU:50 mCPU
    • 内存:100 MiB
    • 临时存储:100 MiB
  • 所有其他容器

    • 临时存储:1 GiB

如需详细了解 Autopilot 集群限制,请参阅配额和限制

用于计算类的默认请求

对于在计算类上运行的 Pod,Autopilot 会将以下默认值应用于未在 Pod 规范中定义的资源。如果您仅设置其中一个请求并将另一个请求留空,GKE 会使用最小和最大请求部分中定义的 CPU 与内存比率将缺失的请求设置为符合该比率的值。

计算类 资源 默认请求
通用(默认) CPU 0.5 vCPU
内存 2 GiB
加速器 请参阅“加速器的默认资源”部分
平衡 CPU 0.5 vCPU
内存 2 GiB
性能 CPU
  • C3 机器系列:2 个 vCPU
  • 具有本地 SSD 的 C3 机器系列:2 个 vCPU
  • C3D 机器系列:2 个 vCPU
  • 具有本地 SSD 的 C3D 机器系列:4 个 vCPU
  • H3 机器系列:80 个 vCPU
  • C2 机器系列:2 个 vCPU
  • C2D 机器系列:2 个 vCPU
  • T2A 机器系列:2 个 vCPU
  • T2D 机器系列:2 个 vCPU
内存
  • C3 机器系列:8 GiB
  • 具有本地 SSD 的 C3 机器系列:8 GiB
  • C3D 机器系列:8 GiB
  • 具有本地 SSD 的 C3D 机器系列:16 GiB
  • H3 机器系列:320 GiB
  • C2 机器系列:8 GiB
  • C2D 机器系列:8 GiB
  • T2A 机器系列:8 GiB
  • T2D 机器系列:8 GiB
临时存储
  • C3 机器系列:1 GiB
  • 具有本地 SSD 的 C3 机器系列:1 GiB
  • C3D 机器系列:1 GiB
  • 具有本地 SSD 的 C3D 机器系列:1 GiB
  • H3 机器系列:1 GiB
  • C2 机器系列:1 GiB
  • C2D 机器系列:1 GiB
  • T2A 机器系列:1 GiB
  • T2D 机器系列:1 GiB
横向扩容 CPU 0.5 vCPU
内存 2 GiB

用于加速器的默认请求

下表介绍了 GKE 为未在 Pod 规范的 requests 字段中指定值的 Pod 分配的默认值。此表适用于使用 Accelerator 计算类的 Pod,这是在 Autopilot 集群中运行加速器的推荐方式。

加速器 资源 默认请求总计
NVIDIA H100 (80GB) GPU
nvidia-h100-80gb
CPU
  • 8 个 GPU:200 个 vCPU
内存
  • 8 个 GPU:1400 GiB
临时存储
  • 8 个 GPU:1 GiB
NVIDIA A100 (40GB) GPU
nvidia-tesla-a100
CPU
  • 1 个 GPU:9 个 vCPU
  • 2 个 GPU:20 个 vCPU
  • 4 个 GPU:44 个 vCPU
  • 8 个 GPU:92 个 vCPU
  • 16 个 GPU:92 个 vCPU
内存
  • 1 个 GPU:60 GiB
  • 2 个 GPU:134 GiB
  • 4 个 GPU:296 GiB
  • 8 个 GPU:618 GiB
  • 16 个 GPU:1250 GiB
NVIDIA A100 (80GB) GPU
nvidia-a100-80gb
CPU
  • 1 个 GPU:9 个 vCPU
  • 2 个 GPU:20 个 vCPU
  • 4 个 GPU:44 个 vCPU
  • 8 个 GPU:92 个 vCPU
内存
  • 1 个 GPU:134 GiB
  • 2 个 GPU:296 GiB
  • 4 个 GPU:618 GiB
  • 8 个 GPU:1250 GiB
临时存储
  • 1 个 GPU:1 GiB
  • 2 个 GPU:1 GiB
  • 4 个 GPU:1 GiB
  • 8 个 GPU:1 GiB
NVIDIA L4 GPU
nvidia-l4
CPU
  • 1 个 GPU:2 个 vCPU
  • 2 个 GPU:21 个 vCPU
  • 4 个 GPU:45 个 vCPU
  • 8 个 GPU:93 个 vCPU
内存
  • 1 个 GPU:7 GiB
  • 2 个 GPU:78 GiB
  • 4 个 GPU:170 GiB
  • 8 个 GPU:355 GiB
NVIDIA T4 GPU
nvidia-tesla-t4
CPU
  • 1 个 GPU:0.5 个 vCPU
  • 4 个 GPU:0.5 个 vCPU
内存
  • 1 个 GPU:2 GiB
  • 4 个 GPU:2 GiB
TPU v5e
tpu-v5-lite-device(单主机)
CPU 所有拓扑:1 个 mCPU
内存 所有拓扑:1 MiB
TPU v5e
tpu-v5-lite-podslice(多主机)
CPU 所有拓扑:1 个 mCPU
内存 所有拓扑:1 MiB
TPU v5p
tpu-v5p-slice
CPU 所有拓扑:1 个 mCPU
内存 所有拓扑:1 MiB
TPU v4
tpu-v4-podslice
CPU 所有拓扑:1 个 mCPU
内存 所有拓扑:1 MiB

不使用加速器计算类的受支持 GPU

如果您不使用加速器计算类,则仅支持以下 GPU。这些 GPU 的默认资源请求与“加速器”计算类中的请求相同:

  • NVIDIA A100 (40GB)
  • NVIDIA A100 (80GB)
  • NVIDIA L4
  • NVIDIA Tesla T4

最小和最大资源请求

您的部署配置请求的总资源应在 Autopilot 允许的受支持的最小值和最大值范围内。您需要满足以下条件:

  • 临时存储空间请求

    • 除非您的节点已连接本地 SSD,否则临时存储空间会使用虚拟机启动磁盘。

      包含本地 SSD 的计算硬件(例如 A100 [80GB] GPU、H100 [80GB] GPU 或 Z3 机器系列)支持的最大请求等于本地 SSD 的大小减去任何系统开销。如需了解此系统开销,请参阅由本地 SSD 支持的临时存储空间

    • 在 GKE 1.29.3-gke.1038000 及更高版本中,性能类 Pod 和硬件加速器 Pod 支持的临时存储空间请求的最大值为 56 TiB,除非硬件包含本地 SSD。

      在所有其他 Autopilot Pod(无论 GKE 版本如何)中,Pod 中所有容器的临时存储请求总数必须介于 10 MiB 到 10 GiB 之间,除非另有说明。

    • 对于较大的卷,请使用通用临时卷,它们可为临时存储空间提供等效的功能和性能,但灵活性更高,因为它们可以与任何 GKE 存储方案搭配使用。例如,使用 pd-balanced 的通用临时卷的大小上限为 64 TiB。

  • 对于 DaemonSet Pod,最小资源请求如下所示:

    • 支持爆发的集群:每个 Pod 1 mCPU,每个 Pod 2 MiB 的内存,Pod 中每个容器 10 MiB 的临时存储空间。
    • 不支持爆发的集群:每个 Pod 10mCPU,每个 Pod 10 MiB 的内存,Pod 中每个容器 10 MiB 的临时存储。

    如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

  • 如果您的集群支持爆发,Autopilot 不会强制将 Pod CPU 请求增量设为 0.25 个 vCPU。如果您的集群不支持爆发,则 Autopilot 会将 CPU 请求向上舍入到最接近的 0.25 个 vCPU。如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

  • CPU 与内存比率必须在所选计算类或硬件配置的允许范围内。如果 CPU 与内存比率超出允许的范围,则 Autopilot 会自动增加较小的资源。例如,如果您为 Scale-Out 类上运行的 Pod 请求 1 个 vCPU 和 16 GiB 内存(比率为 1:16),则 Autopilot 会将 CPU 请求增加到 4 个 vCPU,比率将更改为 1:4。

计算类的下限和上限

下表介绍了 Autopilot 支持的每个计算类的最小、最大和允许的 CPU:内存比率:

计算类 CPU:内存比率 (vCPU:GiB) 资源 最小值 最大值
通用(默认) 1:1 到 1:6.5 之间 CPU

该值取决于您的集群是否支持爆发,如下所示:

  • 支持爆发的集群:50m CPU
  • 不支持爆发的集群:250m CPU

如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

30 个 vCPU
内存

该值取决于您的集群是否支持爆发,如下所示:

  • 支持爆发的集群:52 MiB
  • 不支持爆发的集群:512 MiB

如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

110 GiB
加速器 请参阅加速器的最小值和最大值
平衡 1:1 到 1:8 之间 CPU 0.25 个 vCPU

222 个 vCPU

如果选择了满足最低要求的 CPU 平台

  • Intel 平台:126 个 vCPU
  • AMD 平台:222 个 vCPU
内存 0.5 GiB

851 GiB

如果选择了满足最低要求的 CPU 平台

  • Intel 平台:823 GiB
  • AMD 平台:851 GiB
性能 不适用 CPU 0.001 个 vCPU
  • C3 机器系列:174 个 vCPU
  • 具有本地 SSD 的 C3 机器系列:174 个 vCPU
  • C3D 机器系列:358 个 vCPU
  • 具有本地 SSD 的 C3D 机器系列:358 个 vCPU
  • H3 机器系列:86 个 vCPU
  • C2 机器系列:58 个 vCPU
  • C2D 机器系列:110 个 vCPU
  • T2A 机器系列:46 个 vCPU
  • T2D 机器系列:58 个 vCPU
内存 1 MiB
  • C3 机器系列:1,345 GiB
  • 具有本地 SSD 的 C3 机器系列:670 GiB
  • C3D 机器系列:2750 GiB
  • 具有本地 SSD 的 C3D 机器系列:1,375 GiB
  • H3 机器系列:330 GiB
  • C2 机器系列:218 GiB
  • C2D 机器系列:835 GiB
  • T2A 机器系列:172 GiB
  • T2D 机器系列:218 GiB
临时存储 10 MiB
  • C3 机器系列:250 GiB
  • 具有本地 SSD 的 C3 机器系列:10,000 GiB
  • C3D 机器系列:250 GiB
  • 具有本地 SSD 的 C3D 机器系列:10,000 GiB
  • H3 机器系列:250 GiB
  • C2 机器系列:250 GiB
  • C2D 机器系列:250 GiB
  • T2A 机器系列:250 GiB
  • T2D 机器系列:250 GiB

在 1.29.3-gke.1038000 及更高版本中,除非硬件包含本地 SSD,否则您可以指定 56 Ti 的最大临时存储请求。

横向扩容 1:4 CPU 0.25 个 vCPU
  • arm64:43 个 vCPU
  • amd64:54 个 vCPU
内存 1 GiB
  • arm64:172 GiB
  • amd64:216 GiB

如需了解如何在 Autopilot Pod 中请求计算类,请参阅为 Autopilot Pod 选择计算类

加速器的最小值和最大值

以下部分介绍了使用 GPU 和 TPU 等硬件加速器的 Pod 的最小、最大和允许的 CPU 与内存比率。

除非明确指定,否则在 1.28.6-gke.1369000 版或更高版本以及 1.29.1-gke.1575000 版或更高版本中,支持的最大临时存储空间为 122 GiB。对于早期版本,支持的最大临时存储空间为 10 GiB。

加速器计算类的最小值和最大值

下表显示了使用“Accelerator”计算类的 Pod 的最小和最大资源请求。使用 GKE Autopilot 集群运行加速器时,建议采用这种方式。在加速器计算类中,GKE 不会强制执行 CPU 与内存请求比率。

加速器类型 资源 最小值 最大值
NVIDIA H100 (80GB)
nvidia-h100-80gb
CPU
  • 8 个 GPU:0.001 个 vCPU
  • 8 个 GPU:206 个 vCPU
内存
  • 8 个 GPU:1 MiB
  • 8 个 GPU:1795 GiB
临时存储
  • 8 个 GPU:10 MiB
  • 8 个 GPU:5250 GiB
NVIDIA A100 (40GB)
nvidia-tesla-a100
CPU 0.001 个 vCPU
  • 1 个 GPU:11 个 vCPU
  • 2 个 GPU:22 个 vCPU
  • 4 个 GPU:46 个 vCPU
  • 8 个 GPU:94 个 vCPU
  • 16 个 GPU:94 个 vCPU

在 A100 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。

内存 1 MiB
  • 1 个 GPU:74 GiB
  • 2 个 GPU:148 GiB
  • 4 个 GPU:310 GiB
  • 8 个 GPU:632 GiB
  • 16 个 GPU:1264 GiB

在 A100 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。

NVIDIA A100 (80GB)
nvidia-a100-80gb
CPU 0.001 个 vCPU
  • 1 个 GPU:11 个 vCPU
  • 2 个 GPU:22 个 vCPU
  • 4 个 GPU:46 个 vCPU
  • 8 个 GPU:94 个 vCPU

在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。

内存 1 MiB
  • 1 个 GPU:148 GiB
  • 2 个 GPU:310 GiB
  • 4 个 GPU:632 GiB
  • 8 个 GPU:1264 GiB

在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。

临时存储 512 MiB
  • 1 个 GPU:280 GiB
  • 2 个 GPU:585 GiB
  • 4 个 GPU:1220 GiB
  • 8 个 GPU:2540 GiB
NVIDIA L4
nvidia-l4
CPU 0.001 个 vCPU
  • 1 个 GPU:31 个 vCPU
  • 2 个 GPU:23 个 vCPU
  • 4 个 GPU:47 个 vCPU
  • 8 个 GPU:95 个 vCPU

在 L4 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。

内存 1 MiB
  • 1 个 GPU:115 GiB
  • 2 个 GPU:86 GiB
  • 4 个 GPU:177 GiB
  • 8 个 GPU:363 GiB

在 L4 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。

NVIDIA Tesla T4
nvidia-tesla-t4
CPU 0.001 个 vCPU
  • 1 个 GPU:46 个 vCPU
  • 2 个 GPU:46 个 vCPU
  • 4 个 GPU:94 个 vCPU
内存 1 MiB
  • 1 个 GPU:287.5 GiB
  • 2 个 GPU:287.5 GiB
  • 4 个 GPU:587.5 GiB
TPU v5e
tpu-v5-lite-device
CPU 0.001 个 vCPU
  • 1x1 拓扑:24 个 vCPU
  • 2x2 拓扑:112 个 vCPU
  • 2x4 拓扑:224 个 vCPU
内存 1 MiB
  • 1x1 拓扑:48 GiB
  • 2x2 拓扑:192 GiB
  • 2x4 拓扑:384 GiB
临时存储 10 MiB 56 TiB
TPU v5e
tpu-v5-lite-podslice
CPU 0.001 个 vCPU
  • 1x1 拓扑:24 个 vCPU
  • 2x2 拓扑:112 个 vCPU
  • 2x4 拓扑(4 芯片请求):112 个 vCPU
  • 2x4 拓扑(8 芯片请求):224 个 vCPU
  • 4x4 拓扑:112 个 vCPU
  • 4x8 拓扑:112 个 vCPU
  • 8x8 拓扑:112 个 vCPU
  • 8x16 拓扑:112 个 vCPU
  • 16x16 拓扑:112 个 vCPU
内存 1 MiB
  • 1x1 拓扑:48 GiB
  • 2x2 拓扑:192 GiB
  • 2x4 拓扑(4 个芯片请求):192 GiB
  • 2x4 拓扑(8 芯片请求):384 GiB
  • 4x4 拓扑:192 GiB
  • 4x8 拓扑:192 GiB
  • 8x8 拓扑:192 GiB
  • 8x16 拓扑:192 GiB
  • 16x16 拓扑:192 GiB
临时存储 10 MiB 56 TiB
TPU v5p
tpu-v5p-slice
CPU 0.001 个 vCPU 280 个 vCPU
内存 1 MiB 448 GiB
临时存储 10 MiB 56 TiB
TPU v4
tpu-v4-podslice
CPU 0.001 个 vCPU 240 个 vCPU
内存 1 MiB 407 GiB
临时存储 10 MiB 56 TiB

如需了解如何在 Autopilot Pod 中请求 GPU,请参阅在 Autopilot 中部署 GPU 工作负载

没有计算类的 GPU 的最小值和最大值

下表显示了不使用加速器计算类的 Pod 的最小和最大资源请求:

GPU 类型 CPU:内存比率 (vCPU:GiB) 资源 最小值 最大值
NVIDIA A100 (40GB)
nvidia-tesla-a100
未实施 CPU
  • 1 个 GPU:9 个 vCPU
  • 2 个 GPU:20 个 vCPU
  • 4 个 GPU:44 个 vCPU
  • 8 个 GPU:92 个 vCPU
  • 16 个 GPU:92 个 vCPU
  • 1 个 GPU:11 个 vCPU
  • 2 个 GPU:22 个 vCPU
  • 4 个 GPU:46 个 vCPU
  • 8 个 GPU:94 个 vCPU
  • 16 个 GPU:94 个 vCPU

在 A100 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。

内存
  • 1 个 GPU:60 GiB
  • 2 个 GPU:134 GiB
  • 4 个 GPU:296 GiB
  • 8 个 GPU:618 GiB
  • 16 个 GPU:1250 GiB
  • 1 个 GPU:74 GiB
  • 2 个 GPU:148 GiB
  • 4 个 GPU:310 GiB
  • 8 个 GPU:632 GiB
  • 16 个 GPU:1264 GiB

在 A100 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。

NVIDIA A100 (80GB)
nvidia-a100-80gb
未实施 CPU
  • 1 个 GPU:9 个 vCPU
  • 2 个 GPU:20 个 vCPU
  • 4 个 GPU:44 个 vCPU
  • 8 个 GPU:92 个 vCPU
  • 1 个 GPU:11 个 vCPU
  • 2 个 GPU:22 个 vCPU
  • 4 个 GPU:46 个 vCPU
  • 8 个 GPU:94 个 vCPU

在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。

内存
  • 1 个 GPU:134 GiB
  • 2 个 GPU:296 GiB
  • 4 个 GPU:618 GiB
  • 8 个 GPU:1250 GiB
  • 1 个 GPU:148 GiB
  • 2 个 GPU:310 GiB
  • 4 个 GPU:632 GiB
  • 8 个 GPU:1264 GiB

在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。

临时存储
  • 1 个 GPU:512 MiB
  • 2 个 GPU:512 MiB
  • 4 个 GPU:512 MiB
  • 8 个 GPU:512 MiB
  • 1 个 GPU:280 GiB
  • 2 个 GPU:585 GiB
  • 4 个 GPU:1220 GiB
  • 8 个 GPU:2540 GiB
NVIDIA L4
nvidia-l4
  • 1 个 GPU:1:3.5 和 1:4 之间
  • 2、4 和 8 个 GPU:未强制执行
CPU
  • 1 个 GPU:2 个 vCPU
  • 2 个 GPU:21 个 vCPU
  • 4 个 GPU:45 个 vCPU
  • 8 个 GPU:93 个 vCPU
  • 1 个 GPU:31 个 vCPU
  • 2 个 GPU:23 个 vCPU
  • 4 个 GPU:47 个 vCPU
  • 8 个 GPU:95 个 vCPU

在 L4 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。

内存
  • 1 个 GPU:7 GiB
  • 2 个 GPU:78 GiB
  • 4 个 GPU:170 GiB
  • 8 个 GPU:355 GiB
  • 1 个 GPU:115 GiB
  • 2 个 GPU:86 GiB
  • 4 个 GPU:177 GiB
  • 8 个 GPU:363 GiB

在 L4 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。

NVIDIA Tesla T4
nvidia-tesla-t4
1:1 到 1:6.25 之间 CPU 0.5 vCPU
  • 1 个 GPU:46 个 vCPU
  • 2 个 GPU:46 个 vCPU
  • 4 个 GPU:94 个 vCPU
内存 0.5 GiB
  • 1 个 GPU:287.5 GiB
  • 2 个 GPU:287.5 GiB
  • 4 个 GPU:587.5 GiB

如需了解如何在 Autopilot Pod 中请求 GPU,请参阅在 Autopilot 中部署 GPU 工作负载

用于工作负载分离和延长时长的资源请求

Autopilot 可让您使用如下方法操控 Kubernetes 调度和逐出行为:

如果指定的请求小于最小值,Autopilot 的行为会根据您使用的方法发生变化,如下所示:

  • 污点、容忍、选择器和时长延长的 Pod:Autopilot 会修改 Pod 以在调度 Pod 时增加请求。
  • Pod 反亲和性:Autopilot 会拒绝 Pod 并显示错误消息。

下表介绍了您可以指定的默认请求和最小资源请求。如果配置或计算类未在此表中,Autopilot 不会强制执行特殊的最小值或默认值。

计算类 资源 默认 最小值
通用 CPU 0.5 vCPU 0.5 vCPU
内存 2 GiB 0.5 GiB
平衡 CPU 2 个 vCPU 1 个 vCPU
内存 8 GiB 4 GiB
横向扩容 CPU 0.5 vCPU 0.5 vCPU
内存 2 GiB 2 GiB

Init 容器

Init 容器按顺序运行,并且必须在应用容器启动之前完成。如果您没有为 Autopilot init 容器指定资源请求,则 GKE 会为每个 init 容器分配可供 Pod 使用的总资源。此行为与 GKE Standard 中不同,在 GKE Standard 中,每个 init 容器可以使用 Pod 调度到的节点上可用的任何未分配资源。

与应用容器不同,GKE 建议您不要为 Autopilot init 容器指定资源请求,以便每个容器获取 Pod 可用的全部资源。如果您请求的资源少于默认值,请限制 init 容器。如果您请求的资源多于 Autopilot 默认值,则可能会增加 Pod 生命周期的账单。

在 Autopilot 中设置资源限制

Kubernetes 可让您为 Pod 规范中的资源设置 requestslimits。Pod 的行为因 limitsrequests 是否不同而变化,如下表所述:

设置的值 Autopilot 行为
requests 等于 limits Pod 使用 Guaranteed QoS 类。
设置了 requests,未设置 limits

该行为取决于您的集群是否支持爆发,如下所示:

  • 支持爆发的集群:Pod 可以爆发到可用的可爆发容量
  • 不支持爆发的集群:GKE 将 limits 设置为等于 requests

如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

未设置 requests,设置了 limits Autopilot 将 requests 设置为 limits 的值,这是默认的 Kubernetes 行为。

之前:

resources:
  limits:
    cpu: "400m"

之后:

resources:
  requests:
    cpu: "400m"
  limits:
    cpu: "400m"
limitsrequests

该行为取决于您的集群是否支持爆发,如下所示:

  • 支持爆发的集群:Pod 可以爆发到 limits 中指定的值。
  • 不支持爆发的集群:GKE 将 limits 设置为等于 requests

如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

requests 大于 limits Autopilot 将 requests 设置为 limits 的值。

之前:

resources:
  requests:
    cpu: "450m"
  limits:
    cpu: "400m"

之后:

resources:
  requests:
    cpu: "400m"
  limits:
    cpu: "400m"
未设置 requests,未设置 limits

Autopilot 将 requests 设置为计算类或硬件配置的默认值。

limits 的行为取决于您的集群是否支持爆发,如下所示:

  • 支持爆发的集群:Autopilot 不设置 limits
  • 不支持爆发的集群:GKE 将 limits 设置为等于 requests

如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性

在大多数情况下,请为工作负载设置足够的资源请求和相同的限制。

对于需要的资源暂时超过其稳定状态的工作负载(例如在启动期间或较高流量期间),请将限制设置为高于请求,以便让 Pod 可以爆发。如需了解详情,请参阅在 GKE 中配置 Pod 爆发

Autopilot 中的自动资源管理

如果您为工作负载指定的资源请求超出了允许的范围,或者您没有为某些容器请求资源,则 Autopilot 会修改工作负载配置,以符合允许的限制。Autopilot 在将默认值应用于未指定请求的容器后会计算资源比率和资源扩容要求。

  • 缺失请求:如果您没有在某些容器中请求资源,则 Autopilot 会为计算类或硬件配置应用默认请求。
  • CPU:内存比率:Autopilot 会扩容较小的资源,以使比率在允许的范围内。
  • 临时存储:Autopilot 会修改临时存储请求,以满足每个容器所需的最小容量。所有容器的存储请求累计值不能超过允许的最大值。在 1.28.6-gke.1317000 之前,如果请求的临时存储空间的值超过上限,Autopilot 会缩减该值。在 1.28.6-gke.1317000 及更高版本中,Autopilot 会拒绝您的工作负载。
  • 请求数量低于最小值:如果您请求的资源少于所选硬件配置所允许的最小值,Autopilot 会自动修改 Pod 以请求至少达到资源最小值。

默认情况下,当 Autopilot 自动扩缩资源以满足最小或默认资源值时,GKE 会为 Pod 清单中的第一个容器分配额外容量。在 GKE 1.27.2-gke.2200 及更高版本中,您可以通过将以下内容添加到 Pod 清单中的 annotations 字段,指示 GKE 将额外的资源分配给特定容器:

autopilot.gke.io/primary-container: "CONTAINER_NAME"

CONTAINER_NAME 替换为容器的名称。

资源修改示例

以下示例场景演示了 Autopilot 如何修改工作负载配置以满足正在运行的 Pod 和容器的要求。

vCPU 小于 0.05 个的单个容器

容器编号 原始请求 修改后的请求
1 CPU:30 mCPU
内存:0.5 GiB
临时存储:10 MiB
CPU:50 mCPU
内存:0.5 GiB
临时存储:10 MiB

CPU 总数小于 0.05 个 vCPU 的多个容器

容器编号 原始请求 已修改的请求
1 CPU:10 mCPU
内存:0.5 GiB
临时存储:10 MiB
CPU:30 mCPU
内存:0.5 GiB
临时存储:10 MiB
2 CPU:10 mCPU
内存:0.5 GiB
临时存储:10 MiB
CPU:10 mCPU
内存:0.5 GiB
临时存储:10 MiB
3 CPU:10 mvCPU
内存:0.5 GiB
临时存储:10 MiB
CPU:10 mCPU
内存:0.5 GiB
临时存储:10 MiB
Pod 资源总数 CPU:50 mCPU
内存:1.5 GiB
临时存储:30 MiB

内存对于请求的 CPU 来说过低的单个容器

在此示例中,内存对于 CPU 数量来说过低(至少为 1 vCPU:1 GiB)。CPU 与内存允许的最小比率为 1:1。如果比率小于此比率,则内存请求会增加。

容器编号 原始请求 修改后的请求
1 CPU:4 个 vCPU
内存:1 GiB
临时存储:10 MiB
CPU:4 个 vCPU
内存:4 GiB
临时存储:10 MiB
Pod 资源总数 CPU:4 个 vCPU
内存:4 GiB
临时存储:10 MiB

后续步骤