什么是 Cluster Autoscaler
- 首先你需要有一朵云「公有 Or 私有」
- Node 不足 Or Node GG 是一件很麻烦的事情
- CA 很好的解决了,根据预先给到的上下限 Node 数 & 利用率自动 Up & Down
CA 模块拆解
- autoscaler: 核心模块,扩缩容功能
- Estimator: 计算扩容节点 「Bin Packing Problem」
- Simulator:模拟调度,计算缩容节点
- Cloud Provider: 云厂商交互核心「厂商好不好主要看这个 & 虚拟机弹性」
核心代码逻辑
main.go - run(healthCheck) - autoscaler.RunOnce(loopStart)
core/autoscaler.go - static_autoscaler.go - RunOnce # 判断是否需要 Up Or Down
scale_up.go - ScaleUp - context.ExpanderStrategy.BestOption
estimator/binpacking_estimator.go #核心算法
注意点
- Down:watch 现有 node 的情况,利用 cpu + mem 的利用率情况来进行评估是否需要缩多少,如果 Node 为空为批量操作,如果 Node 不为空为 For 循环
- Up:这个就比较简单了,当看到有 Pod Pending 的话,就开始同样使用 cpu + mem 希望用的量来进行计算得出多少 Node 后通知云 API 进行扩容 ,Bin Packing Problem 为核心算法 「类似出去玩整理行李」
-
综上:如果当弹性出现致命问题的时候
- 厂商无机器「库存问题」
- 厂商 Down & Up 回调 k8s api 出现问题 「占着坑位 Or 坑位门关了但是里面没东西」
- 厂商 Up 机器过慢的问题么,就是虚拟机的问题了
文档总结
Ps. 别人写的很好 ...