缩短启动延迟时间的策略

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

后续步骤