容量缓冲简介

容量缓冲区可让您主动管理集群中的备用容量,从而帮助您缩短 Google Kubernetes Engine (GKE) 工作负载的 Pod 启动延迟时间。通过提前预留备用容量,您可以确保节点在需要时有可用容量,从而缩短伸缩事件期间调度新 Pod 所需的时间。

本文档介绍了容量缓冲区的工作原理。如需了解如何启用和使用 容量缓冲区,请参阅配置容量缓冲区

何时使用容量缓冲区

对于对启动延迟敏感且需要快速扩缩的应用,请使用容量缓冲区。当流量突然增加时,容量缓冲区会提供预配的容量。

容量缓冲区具有以下优势:

  • 最大限度地缩短伸缩延迟时间:通过使用容量缓冲区,关键工作负载会立即在 预配的节点上运行。容量缓冲区有助于消除与虚拟机启动和映像拉取相关的延迟,从而帮助您在流量高峰期间保持严格的服务等级目标 (SLO)。
  • 经济高效的过度预配:容量缓冲区可帮助您维持固定大小的安全网。对于大规模工作负载,这种方法通常比其他过度预配方法(例如,降低 HorizontalPodAutoscaler (HPA) 利用率目标)更经济高效,因为其他方法可能会随着集群的增长而线性增加闲置容量。
  • 满足工作负载要求 :您可以完全控制容量缓冲区的大小。您可以选择纳入自定义 DaemonSet 或数据,并控制映像预加载和工作负载预启动。

对于需要快速纵向扩缩的延迟敏感型工作负载,我们建议使用容量缓冲区,例如 AI 推理、销售活动期间的零售应用或玩家活动高峰期间的游戏服务器。

对于对启动延迟不敏感的工作负载(例如批处理作业),我们不建议使用容量缓冲区。对于这些工作负载,过度预配资源没有任何好处。

容量缓冲区的工作原理

如需实现容量缓冲区,请使用 Kubernetes CapacityBuffer 自定义资源来定义备用容量缓冲区。GKE 集群自动扩缩器会监控 CapacityBuffer 资源,并将其视为待处理需求,以帮助确保备用容量可用。如果集群没有足够的容量来满足缓冲区中定义的资源请求,集群自动扩缩器会预配额外的节点。

当高优先级工作负载纵向扩缩时,GKE 会立即在缓冲区中的可用容量上调度该工作负载。这种立即调度适用于缓冲区中预留的副本数或资源量,避免了与节点预配相关的典型延迟。当工作负载使用缓冲区单元时,集群自动扩缩器会预配一个新节点来重新填充缓冲区。

活跃缓冲区 可为适合预留容量的工作负载提供运行中的虚拟机,以实现低延迟伸缩。由于节点已准备就绪,因此它们在纵向扩缩事件期间为初始缓冲区消耗提供尽可能低的延迟。

CapacityBuffer CRD

如需配置容量缓冲区,请创建 CapacityBuffer 自定义资源定义 (CRD)。您可以配置容量缓冲区以满足不同的条件:

  • 固定副本:指定固定数量的缓冲区 Pod。此配置是创建已知大小的缓冲区的最简单方法。
  • **基于百分比**:将缓冲区空间定义为现有可伸缩工作负载(例如 Deployment)的百分比。缓冲区空间会在引用工作负载扩缩时动态调整。
  • 资源限制:定义 缓冲区应预留的 CPU 和内存总量。控制器会根据引用的 Pod 模板的资源请求计算要创建的缓冲区 Pod 的数量。

如需了解详情,请参阅 CapacityBuffer CRD 参考文档

要求和限制

容量缓冲区有以下要求和限制:

  • 容量缓冲区适用于运行 1.35.2-gke.1842000 或更高版本的 GKE 集群。
  • 容量缓冲区仅支持使用基于节点的结算模式的工作负载。容量缓冲区不支持使用 基于 Pod 的结算模式的工作负载。
  • 我们建议您在集群中启用 节点自动预配。 节点自动预配允许集群自动扩缩器根据 CapacityBuffer 中的资源请求创建新的节点池。如果您未启用节点自动预配,集群自动扩缩器只会纵向扩缩现有节点池。

后续步骤