本页面介绍了您可以为 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 |
用于其他硬件配置的默认请求
对于具有专用硬件(如 GPU)的节点上运行的 Pod,Autopilot 会将以下默认值应用于未在 Pod 规范中定义的资源:
硬件 | 资源 | 默认请求总计 |
---|---|---|
H100 (80GB) GPUnvidia-h100-80gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
A100 (40GB) GPUnvidia-tesla-a100 |
CPU |
|
内存 |
|
|
A100 (80GB) GPUnvidia-a100-80gb |
CPU |
|
内存 |
|
|
临时存储 |
|
|
L4 GPUnvidia-l4 |
CPU |
|
内存 |
|
|
T4 GPUnvidia-tesla-t4 |
CPU | 0.5 vCPU |
内存 | 2 GiB |
最小和最大资源请求
您的部署配置请求的总资源应在 Autopilot 允许的受支持的最小值和最大值范围内。您需要满足以下条件:
- 除非另行指定,否则所有计算类和硬件配置的临时存储请求必须介于 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 中的爆发可用性。
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:4 | CPU | 0.25 个 vCPU |
|
内存 | 1 GiB |
|
如需了解如何在 Autopilot Pod 中请求计算类,请参阅为 Autopilot Pod 选择计算类。
用于其他硬件配置的最小值和最大值
下表介绍了在具有特定硬件(如 GPU)的节点上运行的 Pod 的最小、最大和允许的 CPU 与内存比率。除非明确指定,否则在 1.28.6-gke.1369000 版或更高版本以及 1.29.1-gke.1575000 版或更高版本中,支持的最大临时存储空间为 122 GiB。对于早期版本,支持的最大临时存储空间为 10 GiB。
硬件 | CPU:内存比率 (vCPU:GiB) | 资源 | 下限 | 最大值 |
---|---|---|---|---|
H100 (80GB) GPUnvidia-h100-80gb |
未实施 | CPU |
|
|
内存 |
|
|
||
临时存储 |
|
|
||
A100 (40GB) GPUnvidia-tesla-a100 |
未实施 | CPU |
|
在 A100 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 |
|
在 A100 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
||
A100 (80GB) GPUnvidia-a100-80gb |
未实施 | CPU |
|
在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 |
|
在 A100 (80GB) GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
||
临时存储 |
|
|
||
L4 GPUnvidia-l4 |
|
CPU |
|
在 L4 GPU 节点上运行的所有 DaemonSet 的 CPU 请求总和不得超过 2 个 vCPU。 |
内存 |
|
在 L4 GPU 节点上运行的所有 DaemonSet 的内存请求总和不得超过 14 GiB。 |
||
T4 GPUnvidia-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 会修改临时存储请求,以满足每个容器所需的最小容量。所有容器的存储请求累计值不能超过允许的最大值。如果该值超过最大值,则 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 |
总数超过 0.25 个 vCPU 的多个容器
对于资源总数大于等于 0.25 个 vCPU 的多个容器,CPU 会舍入为 0.25 个 vCPU 的倍数,并且额外的 CPU 会添加到第一个容器。在此示例中,原始累计 CPU 为 0.32 个 vCPU,修改为总共 0.5 个 vCPU。
容器编号 | 原始请求 | 已修改的请求 |
---|---|---|
1 | CPU:0.17 个 vCPU 内存:0.5 GiB 临时存储:10 MiB |
CPU:0.35 个 vCPU 内存:0.5 GiB 临时存储:10 MiB |
2 | CPU:0.08 个 vCPU 内存:0.5 GiB 临时存储:10 MiB |
CPU:0.08 个 vCPU 内存:0.5 GiB 临时存储:10 MiB |
3 | CPU:0.07 个 vCPU 内存:0.5 GiB 临时存储:10 MiB |
CPU:0.07 个 vCPU 内存:0.5 GiB 临时存储:10 MiB |
4 | Init 容器,未定义的资源 | 将接收 Pod 资源 |
Pod 资源总数 | CPU:0.5 个 vCPU 内存: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 |