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 工作负载。 支持不含本地 SSD 或 Spot 虚拟机的符合条件的通用和 GPU 机器系列。 |
无需配置或闲置容量费用,即可加快基准节点预配速度。 |
| 低优先级占位 Pod | 节点预配和 Pod 调度 | 逐出优先级较低的占位 Pod 后,立即调度 Pod。 |
运行节点的标准计算费率。 需要手动管理 Deployment 和 PriorityClass。 |
Standard 和 Autopilot 集群。 | 在采用基于 Pod 的结算方式或 1.35 之前版本的集群上预留备用容量。 |
| 映像流式传输 | 容器映像拉取 | 让容器无需等待整个映像下载完成即可启动。 |
免费提供。 需要 Artifact Registry 或符合条件的 Docker Hub 代码库。 |
Autopilot(默认启用)和 Standard 集群。 | 缩短大型容器映像的映像拉取时间。 |
| 辅助启动磁盘 | 容器映像拉取 | 在预配节点的同时,将预先填充的 Persistent Disk 挂接到新节点。 | 按每个节点上挂接的 Persistent Disk 和磁盘映像存储空间计费。 | Standard 和 Autopilot 集群。 | 预加载大型容器映像或静态数据集(例如机器学习模型权重)。 |
| Pod 快照 | 应用初始化 | 直接从进程内存和文件系统状态的已保存检查点恢复新的 Pod 副本。 | 按 Cloud Storage 中的快照存储空间计费。 |
在 GKE Sandbox 中运行 Pod 的 Standard 和 Autopilot 集群。 支持符合条件的 CPU 和 GPU 机器类型(不支持 TPU)。 |
绕过 AI 推理模型和具有繁重启动例程的应用的冗长初始化。 |
| CPU 启动加速(预览版) | 应用初始化 | 在 Pod 启动期间暂时增加 CPU 请求和限制,然后就地调整其大小。 | 在启动窗口期间临时消耗额外的节点 CPU 容量。 | 启用了 Pod 纵向自动扩缩的标准集群和 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。
- 在节点初始化窗口(
buffer.gke.io/standby-capacity-init-time注解)期间,运行 DaemonSet 以在备用缓冲区上预加载容器映像。在 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 中检查调度延迟时间日志。如需查看相关说明,请参阅监控启动延迟时间指标。