云平台容器团队 360云计算 app
女主宣言ide
利用kubernetes的滚动更新时,可能常常遇到发布“太快不稳定”或“太慢体验差”的状况。本文将介绍kubernetes滚动更新控制速率的特性。云计算
PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!spa
1orm
含义源码
服务在滚动更新时,deployment控制器的目的是:给旧版本(old_rs)副本数减小至0、给新版本(new_rs)副本数量增至指望值(replicas)。你们在使用时,一般容易忽视控制速率的特性,如下是kubernetes提供的两个参数:kubernetes
1. maxUnavailable:和指望ready的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;
2. maxSurge:和指望ready的副本数比,超过时望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。it
2class
取值范围容器
数值
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)下控制滚动更新的原理,并分析其相应源码实现逻辑。