背景
Kubernetes服务简化了K8S集群的创建、升级和手动扩缩容。然而使用Kubernetes集群经常问到的一个问题是,我应该保持多大的节点规模来满足应用需求呢? Autoscaler的出现解决了这个问题,它可以自动的根据部署的应用所请求的资源量来动态的伸缩集群
名词解释
cluster-autoscaler (简称CA)是用来弹性伸缩kubernetes集群的。我们在使用kubernetes集群经常问到的一个问题是,我应该保持多大的节点规模来满足应用需求呢? cluster-autoscaler的出现解决了这个问题,它可以自动的根据部署的应用所请求的资源量来动态的伸缩集群。
架构
- Autoscaler:核心模块,负责整体扩缩容功能
- Estimator:负责评估计算扩容节点
- Simulator:负责模拟调度,计算缩容节点
- CA Cloud-Provider:与云交互进行节点的增删操作。社区目前仅支持AWS和GCE,其他云厂商需要自己实现CloudProvider和NodeGroup相关接口。
CA的架构如下图所示:
设计思路
实现流程设计
- 用户登陆创建自动伸缩集群
- 创建kubernetes集群成功后,调用伸缩组的OpenAPI,创建启动配置
- 创建自动伸缩组
- 启用自动伸缩组
- 集群节点绑定伸缩组
- 创建集群自动伸缩的Deployment(CA)
- CA根据Pending Pod数伸缩节点
实现
实现CloudProvider和NodeGroup相关接口
1 | type CloudProvider interface { |
1 | type NodeGroup interface { |
CA功能接口
创建CA
1 | apiVersion: extensions/v1beta1 |
参数 ${MIN}: ${MAX}: ${AUTO_SCALER_GROUP}
- MIN: 伸缩组节点最小值
- MAX: 伸缩组节点最大值
- AUTO_SCALER_GROUP: 伸缩组ID
修改CA
1 | apiVersion: extensions/v1beta1 |
参数:${MIN}:${MAX}:${AUTO_SCALER_GROUP}
- MIN: 伸缩组节点最小值
- MAX: 伸缩组节点最大值
- AUTO_SCALER_GROUP: 伸缩组ID
删除CA
1 | apiVersion: extensions/v1beta1 |