You need to enable JavaScript to run this app.
导航

节点伸缩原理

最近更新时间2023.09.20 19:52:16

首次发布时间2022.03.04 23:10:38

CA(Cluster Autoscaler,集群弹性伸缩)根据 Pod 的调度状态以及集群内节点资源的使用情况,对集群进行自动扩容或缩容,从而即保障 Pod 对应业务的正常运行,又能控制集群资源数量节约成本。

节点扩容

CA 扩容节点的流程如下:

  1. CA 定期(默认间隔 10s)检查集群中是否存在大于您自定义优先级(默认优先级为 10)的 Pending 状态 Pod。
  2. 如果存在由于资源不足导致 Pending 状态的 Pod 的时候,CA 会从用户的节点池中,根据用户配置的扩容算法,创建一个或多个节点。
  3. 节点将会被添加到集群中,成为 Ready 的节点,用来创建 Pod。
  4. Kubernetes 调度器分配 Pending 状态的 Pod 到新的节点上。如果仍然有一些 Pod 处于 Pending 状态,这个过程将会重复,将会有更多的节点添加到集群中。

alt

当集群中有多个节点池时,可以通过配置不同的扩容算法来选择节点,支持以下四种算法:

  • random:表示随机选择一个节点池进行扩容。
  • most-pods:表示选择能够调度最多 Pod 的节点池进行扩容。
  • least-waste:表示选择空闲 CPU 资源最少的节点池进行扩容。
  • priority:表示选择所设优先级最高的节点池进行扩容。

节点缩容

CA 缩容节点的流程如下:

  1. CA 定期(默认间隔 10s)监测节点的资源使用情况。
  2. 节点的资源请求值(Request)很低(阈值可配,默认 50%),且该节点上的 Pod 可以被调度到其他节点,同时节点所在集群中所有开启了弹性伸缩的节点池,长时间(时间可配,默认 10 分钟)没有执行任何扩容操作时,CA 将自动删除该节点,以达到节省资源的目的。

alt

说明

  • CA 仅根据 Pod 的调度情况和节点的整体资源使用情况来决定是否增加或删除节点,跟 Pod 或节点的资源度量(metrics)没有直接关系。
  • 由于在删除节点时,会发生 Pod 重新调度的情况。因此,如果配置了自动缩容,则应用必须可以容忍重新调度和短时的中断,或采用多副本的策略来避免业务中断。
  • 对于 GPU 类型规格的节点池,在扩容节点时 CA 会等待节点上分配 GPU 资源。如果长时间无法分配 GPU 资源,会导致 CA 无法正常扩缩容,因此在使用 GPU 类型规格的节点池时,请确保集群中也同时安装了 nvidia-device-plugin 组件。组件安装方法,请参见 nvidia-device-plugin

相关文档

Kubernetes 的节点伸缩原理,请参见 社区文档