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

用于其他硬件配置的默认请求

对于具有专用硬件(如 GPU)的节点上运行的 Pod,Autopilot 会将以下默认值应用于未在 Pod 规范中定义的资源:

硬件 资源 默认请求总计
H100 (80GB) GPU
nvidia-h100-80gb
CPU
  • 8 个 GPU:200 个 vCPU
内存
  • 8 个 GPU:1400 GiB
临时存储
  • 8 个 GPU:1 GiB
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
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
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
T4 GPU
nvidia-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

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

  • 支持爆发的集群: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 机器系列:1345 GiB
  • 具有本地 SSD 的 C3 机器系列:670 GiB
  • C3D 机器系列:2750 GiB
  • 具有本地 SSD 的 C3D 机器系列:1375 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:4 CPU 0.25 个 vCPU
  • arm64:43 个 vCPU
  • amd64:54 个 vCPU
内存 1 GiB
  • arm64:172 GiB
  • amd64:216 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) GPU
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
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: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。

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: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
L4 GPU
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。

T4 GPU
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 会修改临时存储请求,以满足每个容器所需的最小容量。所有容器的存储请求累计值不能超过允许的最大值。如果该值超过最大值,则 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

后续步骤