本页面介绍了您可以为 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 |
|
内存 |
|
|
临时存储 |
|
|
横向扩容 | CPU | 0.5 vCPU |
内存 | 2 GiB |
用于加速器的默认请求
下表介绍了 GKE 为未在 Pod 规范的 requests
字段中指定值的 Pod 分配的默认值。此表适用于使用 Accelerator
计算类的 Pod,这是在 Autopilot 集群中运行加速器的推荐方式。
加速器 | 资源 | 默认请求总计 |
---|---|---|
NVIDIA H100 (80GB) GPUnvidia-h100-80gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
NVIDIA A100 (40GB) GPUnvidia-tesla-a100 |
CPU |
|
内存 |
|
|
NVIDIA A100 (80GB) GPUnvidia-a100-80gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
NVIDIA L4 GPUnvidia-l4 |
CPU |
|
内存 |
|
|
NVIDIA T4 GPUnvidia-tesla-t4 |
CPU |
|
内存 |
|
|
TPU v5etpu-v5-lite-device (单主机) |
CPU | 所有拓扑:1 个 mCPU |
内存 | 所有拓扑:1 MiB | |
TPU v5etpu-v5-lite-podslice (多主机) |
CPU | 所有拓扑:1 个 mCPU |
内存 | 所有拓扑:1 MiB | |
TPU v5ptpu-v5p-slice |
CPU | 所有拓扑:1 个 mCPU |
内存 | 所有拓扑:1 MiB | |
TPU v4tpu-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 | 该值取决于您的集群是否支持爆发,如下所示:
如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性。 |
30 个 vCPU |
内存 | 该值取决于您的集群是否支持爆发,如下所示:
如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性。 |
110 GiB | ||
加速器 | 请参阅加速器的最小值和最大值 | |||
平衡 | 1:1 到 1:8 之间 | CPU | 0.25 个 vCPU | 222 个 vCPU 如果选择了满足最低要求的 CPU 平台:
|
内存 | 0.5 GiB | 851 GiB 如果选择了满足最低要求的 CPU 平台:
|
||
性能 | 不适用 | CPU | 0.001 个 vCPU |
|
内存 | 1 MiB |
|
||
临时存储 | 10 MiB |
在 1.29.3-gke.1038000 及更高版本中,除非硬件包含本地 SSD,否则您可以指定 56 Ti 的最大临时存储请求。 |
||
横向扩容 | 1:4 | CPU | 0.25 个 vCPU |
|
内存 | 1 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 |
|
|
内存 |
|
|
|
临时存储 |
|
|
|
NVIDIA A100 (40GB)nvidia-tesla-a100 |
CPU | 0.001 个 vCPU |
在 A100 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 | 1 MiB |
在 A100 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
|
NVIDIA A100 (80GB)nvidia-a100-80gb |
CPU | 0.001 个 vCPU |
在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 | 1 MiB |
在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
|
临时存储 | 512 MiB |
|
|
NVIDIA L4nvidia-l4 |
CPU | 0.001 个 vCPU |
在 L4 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 | 1 MiB |
在 L4 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
|
NVIDIA Tesla T4nvidia-tesla-t4 |
CPU | 0.001 个 vCPU |
|
内存 | 1 MiB |
|
|
TPU v5etpu-v5-lite-device |
CPU | 0.001 个 vCPU |
|
内存 | 1 MiB |
|
|
临时存储 | 10 MiB | 56 TiB | |
TPU v5etpu-v5-lite-podslice |
CPU | 0.001 个 vCPU |
|
内存 | 1 MiB |
|
|
临时存储 | 10 MiB | 56 TiB | |
TPU v5ptpu-v5p-slice |
CPU | 0.001 个 vCPU | 280 个 vCPU |
内存 | 1 MiB | 448 GiB | |
临时存储 | 10 MiB | 56 TiB | |
TPU v4tpu-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 |
|
在 A100 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 |
|
在 A100 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
||
NVIDIA A100 (80GB)nvidia-a100-80gb |
未实施 | CPU |
|
在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 |
|
在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
||
临时存储 |
|
|
||
NVIDIA L4nvidia-l4 |
|
CPU |
|
在 L4 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 |
|
在 L4 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
||
NVIDIA Tesla T4nvidia-tesla-t4 |
1:1 到 1:6.25 之间 | CPU | 0.5 vCPU |
|
内存 | 0.5 GiB |
|
如需了解如何在 Autopilot Pod 中请求 GPU,请参阅在 Autopilot 中部署 GPU 工作负载。
用于工作负载分离和延长时长的资源请求
Autopilot 可让您使用如下方法操控 Kubernetes 调度和逐出行为:
- 使用污点和容忍及节点选择器来确保特定 Pod 仅放置在特定节点上。如需了解详情,请参阅在 GKE 中配置工作负载隔离。
- 使用 Pod 反亲和性来防止 Pod 共置在同一节点上。使用这些方法控制调度行为的工作负载的默认和最小资源请求,高于不使用这些方法的工作负载。
- 使用注解来保护 Pod 免遭节点自动升级和缩容事件导致的逐出长达七天。如需了解详情,请参阅延长 Autopilot Pod 的运行时间。
如果指定的请求小于最小值,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 规范中的资源设置 requests
和 limits
。Pod 的行为因 limits
与 requests
是否不同而变化,如下表所述:
设置的值 | Autopilot 行为 |
---|---|
requests 等于 limits |
Pod 使用 Guaranteed QoS 类。
|
设置了 requests ,未设置 limits |
该行为取决于您的集群是否支持爆发,如下所示:
如需检查您的集群是否支持爆发,请参阅 GKE 中的爆发可用性。 |
未设置 requests ,设置了 limits |
Autopilot 将 requests 设置为 limits 的值,这是默认的 Kubernetes 行为。 之前: resources: limits: cpu: "400m" 之后: resources: requests: cpu: "400m" limits: cpu: "400m" |
比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 将
如需检查您的集群是否支持爆发,请参阅 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 |