为了提高工作负载稳定性,Google Kubernetes Engine (GKE) Autopilot 模式会管理 Pod 资源请求(例如 CPU、内存或临时存储空间)的值。本页面包含以下信息,可用于规划高效、稳定且经济实惠的工作负载:
- Autopilot 应用于未指定值的 Pod 的默认值。
- Autopilot 对资源请求强制执行的最小值和最大值。
- 默认值、最小值和最大值如何根据 Pod 请求的硬件而变化。
本页面适用于预配和配置云资源以及部署工作负载的运维人员和开发者。如需详细了解我们在 Google Cloud内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
您应当已熟悉 Kubernetes 资源管理。
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 | 0.5 个 vCPU |
内存 | 2 GiB |
最小和最大资源请求
您的部署配置请求的总资源应在 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 10 mCPU,每个 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 | 不强制执行最小请求 |
|
内存 | 不强制执行最小请求 |
|
||
临时存储 | 不强制执行最小请求 |
|
||
横向扩容 | 1:4 | CPU | 0.25 个 vCPU |
|
内存 | 1 GiB |
|
如需了解如何在 Autopilot Pod 中请求计算类,请参阅为 Autopilot Pod 选择计算类。
加速器的最小值和最大值
GKE 不会对使用加速器的 Pod 强制执行最小 CPU、内存或临时存储空间请求。下表根据您使用的加速器数量和类型,介绍了每种资源的最大请求。
除非明确指定,否则支持的最大临时存储空间为 56 TiB。
加速器类型 | 资源 | 最大值 |
---|---|---|
NVIDIA B200nvidia-B200 |
CPU |
|
内存 |
|
|
临时存储 |
|
|
NVIDIA H200 (141GB)nvidia-h200-141gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
NVIDIA H100 Mega (80GB)nvidia-h100-mega-80gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
NVIDIA H100 (80GB)nvidia-h100-80gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
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 |
CPU |
|
内存 |
|
|
TPU v5etpu-v5-lite-podslice |
CPU |
|
内存 |
|
|
临时存储 | 56 TiB | |
TPU v5ptpu-v5p-slice |
CPU | 280 个 vCPU |
内存 | 448 GiB | |
临时存储 | 56 TiB | |
TPU v4tpu-v4-podslice |
CPU | 240 个 vCPU |
内存 | 407 GiB | |
临时存储 | 56 TiB |
如需了解如何在 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 容器按顺序运行,并且所有 init 容器都必须先完成运行,然后应用容器才能开始运行。在 Autopilot 集群中,如果您没有为 init 容器指定 CPU 或内存请求,或者明确将请求设置为 0
,则 Autopilot 会在创建期间修改您的 Pod,以便为每个 init 容器添加资源请求。分配给每个 init 容器的请求等于 Pod 中所有应用容器的请求总和。这是默认行为。
此行为与 Standard 集群不同,在 Standard 集群中,init 容器可以使用 Pod 调度到的节点上可用的任何未分配资源。
为 init 容器自动分配资源
系统会在创建 Pod 时自动为 init 容器分配资源。我们建议您不要在 Autopilot 集群中为 init 容器手动指定资源请求,以便每个容器默认获取可供 Pod 使用的完整资源。
如果您在创建 Pod 后更改了其中非 init 容器的资源请求,Autopilot 不会自动调整 init 容器的资源请求。因此,您可能会发现费用与 Pod 的实际资源用量不一致。您的账单费用取决于 Pod 的有效资源请求,即以下两者中较大的一个:
- Pod 中任何单个 init 容器的最大资源请求。
- Pod 中所有应用容器的请求总和。
如需了解详情,请参阅 Autopilot 中的自动资源管理。
为 init 容器手动分配资源
如果您需要更改应用容器的现有资源请求,以管理费用和资源,我们建议您执行以下操作之一来调整 init 容器请求:
- 手动更新 init 容器的资源请求,使其与 Pod 上的新请求总数相匹配。手动指定资源请求时,请考虑以下事项:
- 低于 Pod 总资源的请求可能会限制 init 容器。
- 如果请求高于 Pod 总资源,可能会增加费用。
- 移除资源请求,以便 Autopilot 重新计算这些请求。Autopilot 会默认根据 Pod 中所有应用容器当前请求的资源总和,重新为每个 init 容器分配资源。
在 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 |