cluster-autoscaler 是一个k8s组件,它能够自动增加或减少集群的节点数量(自动扩容或自动缩容),使得所有的pod都能有node可以运行,合理的配置集群的节点资源。
触发Node扩容的方式
cluster-autoscaler(CA)每隔一段时间会进行扫描,当发现有Pod request的资源无法被现有的Node满足处于Pending状态,CA就会自动增加新的Node以便于Pod能正常启动。这个扫描间隔默认情况下是10s,可以通过修改CA的启动命令选项--scan-interval=10s
来设置为其他值
触发Node缩容的方式
通过配置--scale-down-utilization-threshold=0.7
启动命令选项可以控制CA在Node CPU利用率低于70%时将其纳入候选的缩容Node列表中,当Node处于缩容候选列表中超过一定时间后利用率未超过70%且Node上没有阻止缩容的Pod,节点就会被摘除,候选等待时长通过--scale-down-unneeded-time=10m
选项配置,一般是十分钟。
Pod阻止Node缩容的情况
- Pod 配置了 PodDisruptionBudget (PDB)
- kube-system Pod 默认不在 Node 上运行或者未配置 PDB
- Pod 不是通过 deployment, replica set, job, stateful set 等控制器创建的
- Pod 使用了本地存储local storage
- 其他原因导致的 Pod 无法重新调度,如资源不足,其他 Node 无法满足 NodeSelector 或 Affinity 等
如果遇到不明原因的扩缩容异常,通过查看cluster-autoscaler pod的标准输出日志可以看到较为详细的扩容与缩容判定过程,一般就可以定位到影响Node扩缩容的具体是什么问题了。