CA(Cluster Autoscaler,集群弹性伸缩)根据 Pod 的调度状态以及集群内节点资源的使用情况,对集群进行自动扩容或缩容,从而即保障 Pod 对应业务的正常运行,又能控制集群资源数量节约成本。
节点扩容
CA 扩容节点的流程如下:
- CA 定期(默认间隔 10s)检查集群中是否存在大于您自定义优先级(默认优先级为 10)的 Pending 状态 Pod。
- 如果存在由于资源不足导致 Pending 状态的 Pod 的时候,CA 会从用户的节点池中,根据用户配置的扩容算法,创建一个或多个节点。
- 节点将会被添加到集群中,成为 Ready 的节点,用来创建 Pod。
- Kubernetes 调度器分配 Pending 状态的 Pod 到新的节点上。如果仍然有一些 Pod 处于 Pending 状态,这个过程将会重复,将会有更多的节点添加到集群中。
当集群中有多个节点池时,可以通过配置不同的扩容算法来选择节点,支持以下四种算法:
- random:表示随机选择一个节点池进行扩容。
- most-pods:表示选择能够调度最多 Pod 的节点池进行扩容。
- least-waste:表示选择空闲 CPU 资源最少的节点池进行扩容。
- priority:表示选择所设优先级最高的节点池进行扩容。
节点缩容
CA 缩容节点的流程如下:
- CA 定期(默认间隔 10s)监测节点的资源使用情况。
- 节点的资源请求值(Request)很低(阈值可配,默认 50%),且该节点上的 Pod 可以被调度到其他节点,同时节点所在集群中所有开启了弹性伸缩的节点池,长时间(时间可配,默认 10 分钟)没有执行任何扩容操作时,CA 将自动删除该节点,以达到节省资源的目的。
说明
- CA 仅根据 Pod 的调度情况和节点的整体资源使用情况来决定是否增加或删除节点,跟 Pod 或节点的资源度量(metrics)没有直接关系。
- 由于在删除节点时,会发生 Pod 重新调度的情况。因此,如果配置了自动缩容,则应用必须可以容忍重新调度和短时的中断,或采用多副本的策略来避免业务中断。
- 对于 GPU 类型规格的节点池,在扩容节点时 CA 会等待节点上分配 GPU 资源。如果长时间无法分配 GPU 资源,会导致 CA 无法正常扩缩容,因此在使用 GPU 类型规格的节点池时,请确保集群中也同时安装了 nvidia-device-plugin 组件。组件安装方法,请参见 nvidia-device-plugin。
相关文档
Kubernetes 的节点伸缩原理,请参见 社区文档。