简介
组件介绍
Cluster Autoscaler(简称 CA)组件基于模拟调度算法为集群提供节点自动扩缩容能力,支持在资源不足时扩容新节点,在资源闲置时缩容旧节点。
说明:
该组件需搭配节点池一起使用,现已支持原生节点、普通节点。
使用该能力需确保节点池已开启弹性伸缩。
部署在集群内的 Kubernetes 对象
kubernetes 对象名称 | 类型 | 资源量 | Namespaces |
cluster-autoscaler | PodDisruptionBudget | - | kube-system |
cluster-autoscaler | ServiceAccount | - | kube-system |
cluster-autoscaler | Secret | - | kube-system |
cluster-autoscaler | ClusterRole | - | - |
cluster-autoscaler | ClusterRoleBinding | - | - |
cluster-autoscaler | Role | - | kube-system |
cluster-autoscaler | RoleBinding | - | kube-system |
cluster-autoscaler | Service | - | kube-system |
cluster-autoscaler | Deployment | 0.5C1G(针对新建) | kube-system |
使用场景
当集群中出现因资源不足而无法调度的实例(Pod)时,自动触发节点扩容,通过模拟调度选择合适的节点类型,为您减少人力成本。
当满足节点空闲缩容条件时,自动触发节点缩容,为您节约资源成本。
限制条件
k8s 集群版本 >= 1.16
组件原理
扩容原理
1. 当集群中资源不足时(集群的计算/存储/网络等资源满足不了 Pod 的 Request /亲和性规则),CA 会监测到因无法调度而 Pending 的 Pod。
2. CA 根据每个节点池的节点模板进行调度判断,挑选合适的节点模板。
3. 若有多个模板合适,即有多个可扩的节点池备选,CA 会调用 expanders 从多个模板挑选最优模板并对对应节点池进行扩容。
缩容原理
1. CA(Cluster Autoscaler)监测到分配率(即 Request 值,取 CPU 分配率和 MEM 分配率的最大值)低于设定的节点。计算分配率时,可以设置 Daemonset 类型不计入 Pod 占用资源。
2. CA 判断集群的状态是否可以触发缩容,需要满足如下要求:
节点空闲时长要求(默认10分钟)。
集群扩容缓冲时间要求(默认10分钟)。
3. CA 判断该节点是否符合缩容条件。您可以按需设置以下不缩容条件(满足条件的节点不会被 CA 缩容):
含有本地存储的节点。
含有 Kube-system namespace 下非 DaemonSet 管理的 Pod 的节点。
4. CA 驱逐节点上的 Pod 后释放/关机节点。
完全空闲节点可并发缩容(可设置最大并发缩容数)。
非完全空闲节点逐个缩容。
注意:
包年包月类型的普通节点和原生节点不支持自动缩容。
参数说明
模块 | 功能项 | 参数值介绍 |
扩容 | 扩容算法 | 随机(默认):如果可扩容节点池有多个,从中任意选择一个节点池进行扩容。 most-pods:如果可扩容节点池有多个,从中选择运行 Pod 数量最多的节点池进行扩容。 least-waste:如果可扩容节点池有多个,从中选择一个资源浪费最少的节点池进行扩容。 priority:如果可扩容节点池有多个,会按照您自定义的 ConfigMap(详情参考下方),选择优先级高的节点池进行扩容(该特性仅支持原生节点池,对普通节点不生效)。 |
缩容 | 最大并发缩容数 | 发起缩容时,同时支持缩容的节点数量。 说明:只缩容符合完全空闲的空节点;如果存在 Pod, 每次缩容最多一个节点。 |
| 缩容条件 | 阈值:Pod 占用资源/可分配资源百分比小于 x%时开始判断缩容条件。 |
| | 触发时延:节点连续空闲 x 分钟后被缩容。 |
| | 静默时间:集群扩容 x 分钟开始判断缩容条件。 |
| 不缩容节点 | 含有本地存储 Pod 的节点(本地存储包括 hostPath 和 emptyDir)。 含有 kube-system namespace 下非 DaemonSet 管理的 Pod 的节点。 |
自定义 ConfigMap 使用 priority 扩容算法
说明:
该特性仅支持原生节点池,对普通节点池不生效。
优先级取值1~100,必须为正整数。
一个节点池 ID 属于且只属于一个优先级。
如果节点池 ID 没有配置在 ConfigMap 中,即使满足扩容需求,也会由于优先级未配置而不扩容。
示例如下:
apiVersion: v1data:priorities: |-100:- np-l5wmakan #np-l5wmakan(节点池id)优先级为100。50:- np-9r9rh7kp #np-9r9rh7kp(节点池id)优先级为50。kind: ConfigMapmetadata:name: cluster-autoscaler-priority-expander #名称需固定为 cluster-autoscaler-priority-expandernamespace: kube-system