1 含义
服务在滚动更新时,deployment 控制器的目的是:给旧版本(old_rs)副本数减少至 0、给新版本(new_rs)副本数量增至期望值(replicas)。大家在使用时,通常容易忽视控制速率的特性,以下是 kubernetes 提供的两个参数:
maxUnavailable:和期望 ready 的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;
maxSurge:和期望 ready 的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。
2 取值范围
数值
maxUnavailable: [0, 副本数]maxSurge: [0, 副本数]
maxSurge: [0, 副本数]
注意:两者不能同时为 0。
比例
maxUnavailable: [0%, 100%] 向下取整,比如 10 个副本,5%的话==0.5 个,但计算按照 0 个;
maxSurge: [0%, 100%] 向上取整,比如 10 个副本,5%的话==0.5 个,但计算按照 1 个;
注意:两者不能同时为 0。
建议配置
maxUnavailable == 0
maxSurge == 1
这是我们生产环境提供给用户的默认配置。即“一上一下,先上后下”最平滑原则:1 个新版本 pod ready(结合 readiness)后,才销毁旧版本 pod。此配置适用场景是平滑更新、保证服务平稳,但也有缺点,就是“太慢”了。
3 自定义策略
Deployment controller 调整 replicaset 数量时,严格通过以下公式来控制发布节奏。所以,如需快速发布,可根据实际情况去调整这两个值:
举例:如果期望副本数是 10,期望能有至少 80%数量的副本能稳定工作,所以:maxUnavailable = 2,maxSurge = 2 (可自定义,建议与 maxUnavailable 保持一致)
这样,更新过程中,线上能够正常提供服务的 pod 数总会保持在这个区间内。
4 总结
本文解释了 kubernetes 最易忽略的“滚动更新策略中控制更新速率”的特性:maxUnavailable 与 maxSurge,希望能对你在发布版本时有所帮助。
后续文章会带来 deployment controller 在多版本(replicaset)下控制滚动更新的原理,并分析其相应源码实现逻辑。
本文转载自公众号 360 云计算(ID:hulktalk)。
原文链接:
https://mp.weixin.qq.com/s/n73lMqYb5yZbpOprJdl01g
评论