写点什么

Kubernetes 滚动更新速率控制解读

  • 2019-12-09
  • 本文字数:893 字

    阅读完需:约 3 分钟

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


2019-12-09 10:433232

评论

发布
暂无评论
发现更多内容

Echarts柱状图表的使用

格斗家不爱在外太空沉思

vue.js eCharts 11月月更

京东云开发者|代码评审的价值和规范

京东科技开发者

单元测试 代码设计 代码评审 `后端

Centos7下Docker的安装

我是一个茶壶

容器 ,docker 11月月更

Java中的Iterator迭代器详解

共饮一杯无

Java 迭代器 11月月更

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

CTO:我叫你画个技术图给我看看,咋就这么费劲呢?

程序员小毕

程序员 程序人生 CTO 画图软件 架构图

澜舟科技AIGC再进一步,推出澜舟论文助写 LPA,用 AI 帮助写好英文论文

澜舟孟子开源社区

人工智能 nlp 文本生成

【电商实战00】用敏捷开发的思想,带你快速上手实战项目

王中阳Go

golang 高效工作 学习方法 11月月更 电商实战

低码平台标准列表页落地实践,同事直呼好活

Java全栈架构师

Java 程序员 程序人生 低代码开发 低代码平台

AI技术在基于风险测试模式转型中的应用

百度Geek说

人工智能 AI技术 企业号十月 PK 榜 智能测试

vue面试经常会问的那些题

bb_xiaxia1998

Vue

从华泰证券年报看数字化转型的平台化趋势

王和全

数字化转型 数字化 华泰证券 平台化

从React源码分析看useEffect

goClient1992

React

JavaScript事件捕获和事件冒泡

格斗家不爱在外太空沉思

JavaScript 前端 11月月更

Oracle 开发规范(二)

默默的成长

oracle 前端 11月月更

Oracle 表空间创建标准(一)

默默的成长

oracle 前端 11月月更

React源码分析8-状态更新的优先级机制

goClient1992

React

AJAX的作用和使用

格斗家不爱在外太空沉思

JavaScript ajax 11月月更

一个合格的vue工程师必会的20道面试题

bb_xiaxia1998

Vue

Java中的泛型详解

共饮一杯无

Java 泛型 11月月更

京东云开发者|mysql基于binlake同步ES积压解决方案

京东科技开发者

MySQL ES 数据同步 MySQL 数据库

聊聊FinOps

Jianmu

鸿蒙开发实例 | 分布式涂鸦

TiAmo

华为 鸿蒙 云开发 11月月更

链上互助公排代币模式dapp系统开发合约定制

开发微hkkf5566

MASA MAUI Plugin (五)Android 指纹识别

MASA技术团队

blazor MASA MAUI Xamarin MASA Blazor

Baklib|如何才能做好企业内部知识管理?

Baklib

知识管理

Baklib|搭建帮助中心,推动SaaS企业发展

Baklib

SaaS 帮助中心

React源码分析8-状态更新的优先级机制

goClient1992

React

Java中的递归详解

共饮一杯无

Java 递归 11月月更

线上 hive on spark 作业执行超时问题排查案例分享

明哥的IT随笔

hadoop spark hive

极客时间运维进阶训练营第二周作业

LiaoWD

Harbor docker build Containerd

Kubernetes滚动更新速率控制解读_文化 & 方法_360云计算_InfoQ精选文章