女主宣言

利用kubernetes的滚动更新时,可能经常遇到发布“太快不稳定”或“太慢体验差”的情况。本文将介绍kubernetes滚动更新控制速率的特性。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

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云计算

由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

Kubernetes滚动更新速率控制解读相关推荐

  1. Kubernetes滚动更新(无中断平滑发布)

    Kubernetes支持名为Rolling Update的功能,允许您不间断地, 接近几乎无缝地平滑升级部署应用程序 ,即在不停止对外服务的前提下完成应用的更新. 什么是滚动更新? 为了应用升级部署时 ...

  2. 万字长文带你全面认识 Kubernetes 中如何实现蓝绿部署、金丝雀发布和滚动更新...

    Kubernetes 中的部署策略 在本文中,我们将学习使用 Kubernetes 容器编排系统部署容器时的部署策略.在本文的最后,我们将学习如何在 Kubernetes 集群中使用不同的方式进行部署 ...

  3. Kubernetes部署策略:重建、滚动更新、蓝绿部署、金丝雀部署

    Kubernetes原生支持重建.滚动更新两种部署策略.通过修改Service的label,切换流量转发可以实现蓝绿部署.金丝雀部署. 部署前的准备 1.需要有一个k8s集群.没有可查看此博客 htt ...

  4. 使用动态jenkins从节点和kubernetes进行实时滚动更新的Web服务器

    The main motive of this article is to solve real-world problems. Can you imagine the loss of Instagr ...

  5. kubernetes(七)项目部署方式:蓝绿部署,灰度发布/金丝雀发布,滚动更新

    在项目迭代的过程中,不可避免需要上线进行部署. 目前项目部署的方式有很多种:像重新部署,蓝绿部署,金丝雀部署(灰度部署),滚动更新.本文简单介绍下这些常见的部署方案以及使用k8s怎么进行对应部署 重新 ...

  6. 详细聊聊k8s deployment的滚动更新(二)

    一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 ● 相关的参数介绍:   livenessProbe:存活性探测.判断pod是否已经停止   readinessProbe:就绪 ...

  7. K8S滚动更新示例演示

    简介 当kubernetes集群中的某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动并提供服务.如果业务集群规模较大时,这个工作就变成了一个挑战,而且先 ...

  8. 不停机与停机更新_Istio的零停机滚动更新

    不停机与停机更新 本系列文章的第一部分介绍了如何在Kubernetes集群中实现真正的零停机时间更新. 我们专门解决了将流量从旧实例切换到新实例时出现的请求失败. 本文将展示如何使用Istio群集实现 ...

  9. Istio的零停机滚动更新

    本系列文章的第一部分介绍了如何在Kubernetes集群中实现真正的零停机时间更新. 我们专门解决了将流量从旧实例切换到新实例时出现的请求失败. 本文将展示如何使用Istio群集实现相同的目标. 服务 ...

最新文章

  1. 斯坦福大学Christopher Manning:Transformer语言模型为什么能取得突破
  2. excel引用指定单元格数据_Excel数据查找引用函数详解,一看就会用 #办公技巧 #excel #职场
  3. 如何安装_毛巾架如何安装
  4. backlight misc驱动范例 及应用程序范例
  5. 深入浅出——网络模型中Inception的作用与结构全解析
  6. HDU 5936 Difference
  7. 讯飞linux_深度deepin又添一员“猛将”,讯飞输入法Linux版来了
  8. 登录id 黑苹果_黑苹果MacOSCatalina无法登录AppStore修复
  9. 为什么不能在子类的初始化列表里初始化父类的成员
  10. JDBC 连接MYSQL数据库
  11. 今年双11,阿里业务100%上云
  12. Leetcode 刷题笔记(三十) ——动态规划篇之子序列问题:回文
  13. 不使用第三个变量的情况下,实现两个变量间的互换。
  14. android 新浪微博客户端的表情功能的实现,flutter教程pdf
  15. 飞信2016 5.6.8820.0超级精简版
  16. 客户端DDK编译环境配置说明
  17. Form 电子表格(JTF GRID)
  18. 设置(改变)eclipse背景颜色
  19. 看看谁是中国最受欢迎的50大技术博客?
  20. python绘制contourf填色图,设置色标,解决填图的颜色与实际数值不一致的问题

热门文章

  1. JDK中的23个经典设计模式【转】
  2. Fabric 报错:java.lang.IllegalArgumentException: UserContext user‘s name missing.
  3. Windows环境下安装redis以及出现的一些未解决的问题
  4. Tomcat 服务器介绍和使用
  5. 建筑工程计算机实验室简介,计算机实验室简介
  6. ai直线怎么变折线_如何在 AI中设计可编辑折线图
  7. 多租户saas 架构_实战复盘:toB产品的多租户架构设计
  8. 输入三个字符串,按由小到大的顺序输出 字符串排序-一种简单的方法
  9. PHP利用PDO从mysql读取大量数据处理(可做大量数据集的导出,业务调整等)
  10. 【303】C# 复制窗体 修改名称