关于集群自动扩缩器
本文档介绍集群自动扩缩器,该自动扩缩器会自动控制节点池的大小。当您为节点池中的节点数量指定最小值和最大值时,便会启用集群自动扩缩器。您可以在创建节点池或更新节点池时指定这些值。
自动扩缩节点池
集群自动扩缩器会根据工作负载的需求自动调整给定节点池中的节点数量。您不需要手动添加或移除节点,也不需要过度预配节点池。您只需指定节点池的最小大小和最大大小即可,其他操作都是自动执行的。
在系统自动扩缩集群时,如果需要删除或移动资源,则工作负载可能会暂时中断。例如,如果工作负载包含具有单个副本的控制器,则在删除该副本的 Pod 的当前节点时,系统可能会将此 Pod 重新调度到其他节点上。因此,您必须将工作负载设计为可以容忍潜在的中断或确保关键的 Pod 不会中断。
集群自动扩缩器的工作原理
集群自动调节程序基于每个节点池工作。使用集群自动扩缩器配置节点池时,您可以指定节点池的最小大小和最大大小。 您可以在创建节点池或更新节点池时更改最小和最大大小。
集群自动扩缩器会根据该节点池中的资源请求(而不是实际资源利用率)自动增大或减小节点池的大小。如果 Pod 对象无法安排,并且节点池中的容量不足以满足请求,则集群自动扩缩器会添加节点。
如果节点未充分利用,并且所有 Pod 对象都可以安排在较少的节点上,则集群自动扩缩器也会将其移除。如果该节点无法在 10 分钟后正常排空,则会被强制终止。此时间段不可配置。
如果 Pod 请求的资源太少(例如,如果默认数量不足),则集群自动扩缩器不会纠正这种情况。您可以通过为所有工作负载创建足够的资源请求,帮助确保集群自动扩缩器尽可能准确地工作。如需了解详情,请参阅管理容器的资源。
操作条件
集群自动扩缩器在调整节点池的大小时会做出以下假设:
- 所有复制的 Pod 对象都可以在其他节点上重启,可能会导致短暂的中断。如果您的工作负载无法容忍中断,请将工作负载配置为在停用自动扩缩功能的节点池上运行。如需了解详情,请参阅使用节点污点控制调度。
- 集群自动扩缩器可以替换您执行的任何手动节点管理操作。
- 单个节点池中的所有节点都具有一组相同的标签。
- 纵向扩容后,集群自动扩缩器会选择空闲 CPU 或未使用内存最少的节点组。如果您在同一集群中有不同大小的节点(例如高 CPU 或高内存节点),则此行为会影响已扩容的节点池。
最小和最大节点池大小
您可以使用 min-nodes
和 max-nodes
标记来为集群中的每个节点池指定大小下限和上限。 如需停用自动扩缩,请将 min-nodes
和 max-nodes
设置为相同的数字。集群自动扩缩器会在这些大小边界内做出扩缩决策。
设置节点池的大小上限时,请确保其足够大,可以运行所有工作负载。如果集群中的节点池没有足够的内存和 CPU 来运行所有工作负载,则可能会发生服务中断。
使用 PodDisruptionBudget
保护工作负载
您可以使用 PodDisruptionBudget
配置 GKE on Azure 以防止工作负载中断。创建 PodDisruptionBudget
时,您可以指定应该可供使用的 Pod 副本数量下限,或是在任何给定时间可以处于不可用状态的 Pod 副本数量上限。如需了解详情,请参阅为应用指定中断预算。