k8s

Cluster Autoscaler

背景

当集群需要的资源是动态的,业务有明显的波峰波谷。如果集群保持固定的大小,在集群规划时,需要按照最高规格去规划,这样当波谷时,集群的利用率就很低。而如果按照最小规格去规划,当业务越来越多时,pod可能就无法启动了。

修改deployment中的replica可以手工扩缩容,但是不知道具体什么时间业务到达波峰。那么如果根据业务来动态扩展集群资源呢,这时就可以用Cluster Autoscaler。

工作机制

  • 扩容
    由于资源不足,Pod 调度失败,即有 Pod一直处于 Pending 状态。
    file
  • 缩容
    node 的资源利用率较低时,持续10 分钟低于 50%。
    此 node 上存在的 Pod 都能被重新调度到其他 node 上运行。

架构

  • Autoscaler: 核心模块,负责整体扩缩容功能。
  • Estimator:负责评估计算扩容节点。
  • Simulator:负责模拟调度,计算缩容节点。
  • cloud-Provider:与云交互进行节点的增删操作,每个支持 CA 的主流厂商都实现自己的 plugin实现动态缩放。

file

扩展机制

  • 为了自动创建和初始化 Node, Cluster Autoscaler 要求 Node 必须属于某个 Node Group,比如:
    • GCE/GKE 中的 Managed instance groups (MIG)
    • AWS 中的 Autoscaling Groups;
    • Cluster APi Node。
  • 当集群中有多个 Node Group 时,可以通过–expander=coption>选项配置选择 Node Group 的策略,支持如下四种方式:
    • random:随机选择。
    • most-pods:选择容量最大(可以创建最多 Pod)的 Node Group。
    • least-waste:以最小浪费原则选择,即选择有最少可用资源的 Node Group。
    • price:选择最便宜的 Node Group。

为什么不定义一个对象,比如集群使用率到达80%就扩容集群,而是使用Cluster Autoscaler呢?
由于调度策略是有很多种的,比如一个deployment需要3个replica,正常只需要一个4c8g的节点就够用了,但是pod配置了反亲和性,要求3个replica不能在同一个节点上,这样就不能只根据一的根据集群使用率来调度pod。

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x