百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

滚动更新和回滚部署在 Kubernetes 中的工作原理

off999 2025-02-26 13:19 44 浏览 0 评论

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。

在过去的几年中,Kubernetes 在生产环境中被广泛使用,它通过其声明式 API 提供了大量解决方案,用于编排容器。

Kubernetes 的一个显著特性是其具有弹性的能力,能够执行滚动更新和回滚部署,而能够完成这些滚动更新和回滚,主要是由Deployment来实现的,下面就讲解下Deployment的相关知识

Deployment

Deployment是 Kubernetes 中处理工作负载(应用程序)的机制之一。它由 Kubernetes的Deployment Controller管理.。

在 Kubernetes 中,控制器是一个控制环,它负责观察集群的状态,然后根据需要做出或请求做出更改。每个控制器都试图让当前集群状态更接近所需的状态。

在这里的部署中,我们希望实现的状态其实是 pod 的状态,在 K8s 中一切都是声明式的,因此所需的状态会作为规范写入部署清单文件中。

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

如果pod实例出现故障或更新(状态改变),Kubernetes会对yaml中声明状态和实际状态之间的差异做出响应,进行修正,即与定义的部署状态相匹配。

Deployment的内部工作原理

Deployment是对 ReplicaSet 的抽象。在内部,部署创建了一个ReplicaSet,而 ReplicaSet 则在集群上创建了一组 Pod。因此,ReplicaSet 其实实在管理我们的 Pod 的副本。

总之,控制器会读取Deployment配置声明,将 pod 配置转发给 ReplicaSet,然后用适当的副本创建Pod

滚动部署

Kubernetes 承诺零停机时间,其背后的原理之一就是滚动部署。通过滚动部署,Kubernetes可以保证在部署更新 pod 时不会中断 pod 的流量

示例

下面让我们亲自操作一下Kubernetes,来看看这些部署策略。

Create Deployment

在前面的章节中,写过一个Kubernetes的部署手册,如果没有Kubernetes集群的同学,请进行参考 最佳实践-使用RKE快速部署K8S集群

$ kubectl create deployment test-nginx --image=nginx:1.18-alpine

如前所述,部署会创建一个ReplicaSet,然后是Pod。您可以使用

$ kubectl get deploy,rs,po -l app=test-nginx

可以检查Deployment是否创建了ReplicaSet

$ kubectl describe  

同时我们还可以看一下是否是ReplicaSet创建了pod

$ kubectl describe  

扩容 Deployment 让我们将部署扩展到 3 个 nginx pod 实例。

$ kubectl scale deploy test-nginx --replicas=3

现在,我们的集群上已经有了多个pod实例了,下面让我们试试部署策略。

滚动更新部署

假设我们在使用nginx的1.18-alpine版本遇到了一些问题,而1.19-alpine版本解决了这些问题,因此我们需要让pod更新为新版本镜像。

通过更新当前 pod 的镜像(状态变更),Kubernetes 将进行新的部署。

$ kubectl set image deploy test-nginx nginx=nginx:1.19-alpine

设置新镜像后,我们可以看到旧的 pod 被终止,新的 pod 被创建。

我们可以看到Kubernetes在更新过程中,在为新 pod 创建完整的副本之前,最后一个旧 pod 不会被终止。旧 pod 也会有一个宽限期,确保其服务的流量在一定时间内不会断开,直到请求可以安全地路由到新创建的 pod。

虽然这么说但是有时候Kubernetes认为的pod启动就绪,并不是我们期望的启动并就绪,这个地方需要结合自身系统进行判断,后面的文章会进行讲解

可以看到nginx的版本已经更新完成

回滚部署版本

假设新的nginx更新后比上一个版本问题更多,而我们现在意识到旧版本的还是更靠谱,这时候需要回滚到之前的nginx版本

但该怎么做?你可能已经注意到,现在有两个ReplicaSets。这与我们前面的说明部署模式是一样的,我们更新部署,它就会创建一个新的ReplicaSet,从而创建新的Pod

Kubernetes 默认最多保留 10 个 ReplicaSet 的历史记录,我们可以在部署规范中使用revisionHistoryLimit 来更新这一数字。

这些历史记录将作为滚动跟踪,最新版本的才是目前使用的。

到目前为止,我们已经对部署 test-nginx 做了两次更改,因此部署历史记录应该是两次。

$ kubectl get rs|grep test-nginx
$ kubectl rollout history deploy test-nginx
$ kubectl rollout history deploy test-nginx --revision=1

可以看到revision=1对应的是1.18-alpine,下面让我们回滚到上一个版本即1.18-alpine

$ kubectl rollout undo deploy test-nginx --to-revision=1

滚动更新部署一样,回滚部署也会终止当前 pod,并用包含来自 Revision 1 的 Pod 替换它们。

如果再次查看部署历史,就会发现修订版 1 已被用于创建最新的 pod,并标记为修订版 3。

在多个修订版中重复维护同一规范是没有意义的,所以Kubernetes 删除了修订版 1,因为我们已经有了同一规范的最新修订版 3。

现在我们已经回滚到了1.18-alpine版本,通过describe部署可以进行验证。

$ kubectl describe deploy test-nginx

总结

通过 Kubernetes,我们可以利用这些策略轻松控制应用程序的部署。以上只是对滚动和回滚更新部署工作原理的简单介绍。在实际工作中,我们很少手动完成所有这些步骤,我们一般会交给 CI/CD平台去做这些事情。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: