Cluster Autoscaler 说明

最近更新时间:2024-10-18 14:21:42

我的收藏

简介

组件介绍

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: v1
data:
priorities: |-
100:
- np-l5wmakan #np-l5wmakan(节点池id)优先级为100。
50:
- np-9r9rh7kp #np-9r9rh7kp(节点池id)优先级为50。
kind: ConfigMap
metadata:
name: cluster-autoscaler-priority-expander #名称需固定为 cluster-autoscaler-priority-expander
namespace: kube-system

相关链接