- 适用停机发布Recreate:设置spec.strategy.type=Recreate,表示Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod。
- 适用零停机发布RollingUpdate:设置spec.strategy.type=RollingUpdate,表示Deployment会以滚动更新的方式来逐个更新Pod。
服务在滚动更新时,deployment控制器的目的是:**给旧版本(old_rs)副本数减少至0、给新版本(new_rs)副本数量增至期望值(replicas)**,以下是kubernetes提供的两个参数:
- maxUnavailable:和期望ready的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;
- maxSurge:和期望ready的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。
取值范围
数值(两者不能同时为0。)
maxUnavailable: [0, 副本数]
maxSurge: [0, 副本数]
比例(两者不能同时为0。)
maxUnavailable: [0%, 100%] ****向下取整****,比如10个副本,5%的话==0.5个,但计算按照0个;
maxSurge: [0%, 100%] ****向上取整****,比如10个副本,5%的话==0.5个,但计算按照1个;
自定义策略
Deployment controller调整replicaset数量时,严格通过以下公式来控制发布节奏。所以,如需快速发布,可根据实际情况去调整这两个值:
1 | (目标副本数-maxUnavailable) <= 线上实际Ready副本数 <= (目标副本数+maxSurge) |
举例:如果期望副本数(目标副本数)是10,期望能有至少80%数量的副本(线上实际Ready副本数: 10*80%)能稳定工作,所以:maxUnavailable = 2,maxSurge = 2 (可自定义,建议与maxUnavailable保持一致)
1 | 8 <= 线上实际Ready副本数 <= 12 |
这样,更新过程中,线上能够正常提供服务的pod数总会保持在这个区间内。
例子
1 | maxUnavailable == 0 |
1 | maxUnavailable == 1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!
