Google Kubernetes Engine (GKE) 提供了多种策略,可帮助您在工作负载扩容时缩短 Pod 启动延迟时间。通过缩短节点预配、容器映像拉取和应用初始化方面的延迟时间,您可以帮助提高流量高峰期间的服务响应速度,并平衡基础架构费用。
您可以使用本文档比较 Pod 启动生命周期中的 GKE 启动延迟时间缩短策略,并选择适合您的工作负载要求的单个策略或分层组合。
了解 Pod 启动生命周期
当 GKE 中的工作负载扩容且现有节点没有足够的可分配容量来容纳新 Pod 时,端到端启动延迟时间会跨越三个连续阶段:
- 在节点预配和 Pod 调度阶段,集群自动扩缩器会预配新的 Compute Engine 虚拟机,初始化节点,并向控制平面注册该节点,以便 Kubernetes 调度器可以放置待处理的 Pod。
- 在容器映像拉取阶段,节点上的
kubelet组件会从您的 Container Registry 下载并解压缩 Pod 所需的容器映像。 - 在应用初始化阶段,容器运行时会启动应用进程,将依赖项或模型权重加载到内存中,并传递 Kubernetes 启动和就绪探测。
不同的 GKE 功能针对此生命周期的特定阶段。 如需了解哪个阶段对工作负载的启动时间贡献最大, 请参阅监控启动延迟时间指标。
比较启动延迟时间缩短策略
下表比较了 Pod 启动生命周期中的 GKE 启动延迟时间缩短策略:
| 策略 | 生命周期阶段 | 延迟时间配置文件 | 费用和配额配置文件 | 集群模式和硬件支持 | 适用场景 |
|---|---|---|---|---|---|
| 活跃 容量缓冲区(预览版) | 节点预配和 Pod 调度 | 立即调度 Pod,因为节点已在运行。 |
运行虚拟机的标准基于节点的计算费率。 消耗 Compute Engine vCPU、内存、磁盘和 IP 地址 配额,以及命名空间中的 Kubernetes 资源配额。 |
Standard 集群,以及具有 自定义 ComputeClass 的 Autopilot 集群(基于节点的结算)。 支持 CPU、GPU 和 TPU。 |
吸收突发流量,并伸缩对延迟敏感的 GPU、 TPU 或 CPU 工作负载。 |
| 备用 容量缓冲区(预览版) | 节点预配和 Pod 调度 | 在约 30 到 35 秒内恢复已暂停的节点,这比预配新节点更快。 |
暂停期间不收取虚拟机计算费用。产生启动磁盘和存储的内存状态的永久性磁盘存储费用 。 暂停期间消耗磁盘和 IP 地址配额,以及命名空间中的 Kubernetes 资源配额。 |
Standard 集群(具有节点自动预配功能)和 具有自定义 ComputeClass 的 Autopilot 集群。 仅支持 CPU(不支持 GPU、TPU 或本地 SSD)。 |
为持续的流量增长保持经济高效的突发容量 。 |
| 快速启动节点 | 节点预配和 Pod 调度 | 通过使用 预初始化的硬件,尽力缩短冷节点启动时间。 | 免费提供。 |
Autopilot 集群和 Standard 集群中的 Autopilot 工作负载。 支持符合条件的通用型和 GPU 机器系列,但不包括 本地 SSD 或 Spot 虚拟机。 |
以零配置或 闲置容量费用加快基准节点预配。 |
| 低优先级占位符 Pod | 节点预配和 Pod 调度 | 在逐出低优先级占位符 Pod 后立即调度 Pod。 |
运行节点的标准计算费率。 需要手动进行 Deployment 和 PriorityClass 管理。 |
Standard 和 Autopilot 集群。 | 在采用基于 Pod 的结算或 版本低于 1.35 的集群上预留备用容量。 |
| 映像流式传输 | 容器映像拉取 | 允许容器在无需等待整个映像下载完成的情况下 启动。 |
免费提供。 需要 Artifact Registry 或符合条件的 Docker Hub 代码库。 |
Autopilot(默认启用)和 Standard 集群。 | 缩短大型容器映像的映像拉取时间。 |
| 辅助启动磁盘 | 容器映像拉取 | 在节点预配的同时,将预先填充的 Persistent Disk 挂接到新节点。 | 按每个节点上挂接的 Persistent Disk 和磁盘映像 存储空间收费。 | Standard 和 Autopilot 集群。 | 预加载大型容器映像或静态数据集,例如 machine learning model weights。 |
| Pod 快照 | 应用初始化 | 直接从进程 内存和文件系统状态的已保存检查点恢复新的 Pod 副本。 | 按 Cloud Storage 中的快照存储空间收费。 |
在 GKE Sandbox 中运行 Pod 的 Standard 和 Autopilot 集群。 支持符合条件的 CPU 和 GPU 机器类型(不支持 TPU)。 |
绕过 AI 推理模型和 具有繁重启动例程的应用的漫长初始化过程。 |
| CPU 启动加速(预览版) | 应用初始化 | 在 Pod 启动期间暂时增加 CPU 请求和限制,然后 就地调整其大小。 | 在启动 窗口期间暂时消耗额外的节点 CPU 容量。 | 启用了 Pod 纵向自动扩缩的 Standard 和 Autopilot 集群。 | 加快 Java、 Python 或 Node.js 等运行时的 CPU 绑定初始化。 |
按 Pod 启动阶段选择策略
以下部分介绍了 Pod 启动生命周期的每个阶段的可用选项。
加快节点预配和 Pod 调度
当待处理的 Pod 无法容纳在现有节点上时,等待新节点启动通常是导致扩容延迟时间的最大因素。您可以使用以下策略来缩短或消除此延迟时间:
- 使用 容量缓冲区 以声明方式预留备用节点容量:
- 配置活跃缓冲区(
buffer.x-k8s.io/active-capacity策略),以使预配的节点保持运行状态并随时准备好立即调度 Pod。活跃缓冲区支持 CPU、GPU 和 TPU 工作负载。 - 配置备用缓冲区(
buffer.gke.io/standby-capacity策略),以使预配的 CPU 节点保持暂停状态。当工作负载扩容时,GKE 会在约 30 到 35 秒内恢复备用节点,从而避免运行闲置虚拟机的全部计算费用。
- 配置活跃缓冲区(
- 依赖于快速启动节点,以便在符合条件的 Autopilot 工作负载和 GPU 机器 系列上自动尽力预初始化硬件 。当 GKE 为符合条件的工作负载预配新节点时,它会自动使用快速启动节点。这包括为在兼容的 Autopilot 自定义 ComputeClass 上重新填充容量缓冲区而创建的节点。
- 如果您的工作负载使用 Autopilot 基于 Pod 的结算模型或在低于 1.35 的 GKE 版本上运行,请使用 Kubernetes PriorityClass 部署低优先级占位符 Pod。对于在受支持的 GKE 版本上使用基于节点的结算的集群,最好使用声明式容量缓冲区,因为它们不需要管理占位符 Deployment 或 Pod 逐出循环。
加快容器映像拉取
调度器将 Pod 放置在节点上后,节点必须先拉取容器映像,然后才能启动容器。您可以使用以下策略来缩短映像拉取延迟时间:
- 启用 映像流式传输,以便在 所需文件通过网络流式传输后立即启动容器,同时在后台下载映像的其余部分。Autopilot 集群默认针对 Artifact Registry 中符合条件的映像启用映像流式传输。
- 配置 辅助启动磁盘,以便将大型容器基础层 或静态数据集预加载到自定义磁盘映像上。当 GKE 创建节点时,它会在节点预配的同时挂接从磁盘映像实例化的 Persistent Disk。
- 运行 DaemonSet 以在备用缓冲区上预加载容器映像,
在节点初始化窗口期间(
buffer.gke.io/standby-capacity-init-time注解)。在 GKE 暂停备用节点之前,DaemonSet 会将工作负载映像拉取到节点的启动磁盘上,以便在节点恢复时映像已缓存。
加快应用初始化
即使节点正在运行且容器映像已存在,应用也可能需要花费大量时间来加载框架、编译即时 (JIT) 代码或将模型权重加载到内存中。您可以使用以下策略来缩短初始化时间:
- 配置 Pod 快照,以捕获 GKE Sandbox 中正在运行的 Pod 的 内存和文件系统状态的检查点。当工作负载横向扩缩时,GKE 会从 Cloud Storage 中的快照恢复新副本,以便 Pod 从拍摄快照的点恢复执行,而不是从全新状态初始化。
- 在 VerticalPodAutoscaler 上配置 CPU 启动加速,以便在准入和初始化期间为 Pod 分配
额外的 CPU。在 Pod 达到
Ready状态且配置的加速持续时间结束后,GKE 会将 Pod 的 CPU 请求就地缩减回其基准级别,而无需重启容器。
结合使用策略以实现端到端优化
由于这些策略在 Pod 启动生命周期的不同阶段运行,因此您可以将它们分层,以优化端到端扩容时间:
- 将小型活跃容量缓冲区与大型备用容量缓冲区相结合。在突发流量期间,活跃缓冲区会立即吸收 Pod 的初始突发。同时,GKE 会在约 30 到 35 秒内从备用缓冲区恢复节点,以补充活跃缓冲区并处理持续增长。在后台,集群自动扩缩器会预配并暂停新节点,以重新填充备用缓冲区。
- 对于备用容量缓冲区,请在节点暂停之前启用映像流式传输或 使用 DaemonSet 预加载容器映像, 以便节点在恢复时不会花费时间下载大型容器映像。
- 在容量缓冲区或快速启动节点之上分层 CPU 启动加速或 Pod 快照,以便在 GKE 将 Pod 调度到预配或预初始化的节点后,Pod 避免在启动期间受到 CPU 限制,或直接从已保存的快照恢复。
如需衡量任何单个或组合策略对工作负载的影响,请在 Cloud Monitoring 中查看 Pod 启动延迟时间分布 和 Pod 首次就绪延迟时间 图表,并在 Cloud Logging 中检查调度延迟时间日志。如需了解相关说明,请参阅监控启动延迟时间指标。