缩短启动延迟时间的策略

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 中检查调度延迟时间日志。如需查看相关说明,请参阅监控启动延迟时间指标。

后续步骤