Kubernetes 滚动更新速率控制解读

发布于:2019 年 12 月 9 日 10:43

Kubernetes滚动更新速率控制解读

1 含义

服务在滚动更新时,deployment 控制器的目的是:给旧版本 (old_rs) 副本数减少至 0、给新版本 (new_rs) 副本数量增至期望值 (replicas)。大家在使用时,通常容易忽视控制速率的特性,以下是 kubernetes 提供的两个参数:

  1. maxUnavailable:和期望 ready 的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;
  2. maxSurge:和期望 ready 的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。

2 取值范围

数值

  1. maxUnavailable: [0, 副本数]maxSurge: [0, 副本数]
  2. maxSurge: [0, 副本数]

注意:两者不能同时为 0。

比例

  1. maxUnavailable: [0%, 100%] 向下取整,比如 10 个副本,5% 的话 ==0.5 个,但计算按照 0 个;
  2. maxSurge: [0%, 100%] 向上取整,比如 10 个副本,5% 的话 ==0.5 个,但计算按照 1 个;

注意:两者不能同时为 0。

建议配置

  1. maxUnavailable == 0
  2. maxSurge == 1

这是我们生产环境提供给用户的默认配置。即“一上一下,先上后下”最平滑原则:1 个新版本 pod ready(结合 readiness)后,才销毁旧版本 pod。此配置适用场景是平滑更新、保证服务平稳,但也有缺点,就是“太慢”了。

3 自定义策略

Deployment controller 调整 replicaset 数量时,严格通过以下公式来控制发布节奏。所以,如需快速发布,可根据实际情况去调整这两个值:

复制代码
(目标副本数 -maxUnavailable) <= 线上实际 Ready 副本数 <= (目标副本数 +maxSurge)

举例:如果期望副本数是 10,期望能有至少 80% 数量的副本能稳定工作,所以:maxUnavailable = 2,maxSurge = 2 (可自定义,建议与 maxUnavailable 保持一致)

复制代码
8 <= 线上实际 Ready 副本数 <= 12

这样,更新过程中,线上能够正常提供服务的 pod 数总会保持在这个区间内。

4 总结

本文解释了 kubernetes 最易忽略的“滚动更新策略中控制更新速率”的特性:maxUnavailable 与 maxSurge,希望能对你在发布版本时有所帮助。

后续文章会带来 deployment controller 在多版本 (replicaset) 下控制滚动更新的原理,并分析其相应源码实现逻辑。

本文转载自公众号 360 云计算(ID:hulktalk)。

原文链接:

https://mp.weixin.qq.com/s/n73lMqYb5yZbpOprJdl01g

阅读数:93 发布于:2019 年 12 月 9 日 10:43

评论

发布
暂无评论