Kubernetes POD 容器升级实战


传统的网站升级更新,通常是将服务全部下线,业务停止后再更新版本和配置,然后重新启动并提供服务。这样的模式已经完全不能满足发展需求了。
高并发、高可用系统普及的今天, 服务的升级更新至少要做到“业务不中断”。而滚动更新(Rolling-update)恰是满足这一需求的一种系统更新升级方案。
滚动更新就是针对多实例服务的一种不中断服务的更新升级方式。一般情况,对于多实例服务,滚动更新采用对各个实例逐个进行单独更新而非同一时刻对所有实例进行全部更新的方式。

kubernetes在kubectl cli工具中仅提供了对Replication Controller的rolling-update支持,通过kubectl -help查看指令信息;

Kubernetes POD 容器升级实战

1、查看各pod容器组的容器更新情况

注:这个命令一般在滚动更新时,会时刻使用查看。

kubectl get deployment -n default
#default为默认的命名空间,一般来说企业中会指定地域作为命名空间

在这里插入图片描述

  • DESIRED 最终期望处于READY状态的副本数;
  • CURRENT 当前的副本总数;
  • UP-TO-DATE 当前完成更新的副本数;
  • AVAILABLE 当前可用的副本数;

指定命名空间:
在这里插入图片描述在这里插入图片描述可以编辑yaml文件修改上面的参数值,然后kubectl创建。还可以:
在这里插入图片描述点击创建,点击高级选项,可以创建命名空间。

2、查看pod组运行情况

kubectl get pod -n default

在这里插入图片描述

3、查看部署的信息效果

kubectl describe deployment registry-wujincheng-com -n default

在这里插入图片描述

4、容器升级更新

仓库源中提前制作最新更新的镜像,执行如下指令,升级镜像版本即可;(升级之前一定要保证仓库源中有最新提交的镜像)

kubectl set image deployment/tomcat-wujincheng-com tomcat-wujincheng-com=docker.io/nginx  -n default

5、查看容器升级更新进程

kubectl -n default rollout status deployment/tomcat-wujincheng-com

在这里插入图片描述注:一般来说我们更新默认都是一个一个更新的。

注:首先说明tomcat这个pod组里只有4个容器,DESIRED从更新开始到结束都等于pod组里的容器数,表示最终应该有多少个容器处于READY状态,当前更新完成的容器为2,当前可用容器数为3,一个一个更新,所以只会有一个处于不可用状态,所以更新过程中,这个状态一直都为3.
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述上面我把更新过程中的各个状态的变化都表达出来了。
下一点注意一下为啥CURRENT超出了4,变成了5。

6、滚动更新过程详解

结合下图理解下方过程详解:
在这里插入图片描述在这里插入图片描述2+3等于当前副本总数5.
在这里插入图片描述在这里插入图片描述滚动更新的过程:
注意这里说的是每次更新一个容器的情况。

  • 创建了一个新的副本集,并为其分配2个新版本的容器,销毁1个旧版本的容器,使副本总数达到5,一切正常。
  • 通知新副本集,创建并运行一个容器,使可用副本总数保持到3,一起正常。
  • 当1个旧副本又销毁成功后,通知新副本集,创建并运行一个新版本容器,使新版本容器总数达到4,一切正常。
  • 当新版本容器总数达到DESIRED数时,便不再创建容器,销毁一个旧副本容器,便运行一个新版本容器即可。

总结:其实滚动更新,就是原来那个副本集不断销毁容器,直到销毁完。创建新的副本集不断增加容器(副本),直到达到DESIRED数。只是销毁和创建运行之间相关联
而已!

7、容器版本回滚

回滚到更新前的版本(上一个版本):

kubectl rollout undo deployments/tomcat-wujincheng-com -n default

8、查看是否回滚

kubectl -n default rollout status deployments/nginx-v1

在这里插入图片描述
最开始我们是把tomcat变nginx,回滚后应该就是tomcat了。
在这里插入图片描述kubectl describe pod/tomcat-wujincheng-com-3184522042-0jh7q -n default
在这里插入图片描述回滚成功!
重点命令搭配总结:

kubectl get pod -n default
kubectl describe pod/tomcat-wujincheng-com-3184522042-0jh7q -n default
kubectl get deployment -n default
kubectl describe deployment/tomcat-wujincheng-com -n default
kubectl get svc -n default
kubectl describe svc/kubernetes -n default

9、pod容器组采用的镜像历史版本

(1)查看曾经部署过的版本
kubectl rollout history deploy/tomcat-wujincheng-com

在这里插入图片描述

(2)查看某个版本详细信息

kubectl rollout history deployment/tomcat-wujincheng-com --revision=8

在这里插入图片描述

(3)k8s完美支持回滚至某个版本
kubectl rollout undo deployment/tomcat-wujincheng-com  --to-revision=2  -n default

在这里插入图片描述

10、设置每次更新的容器数目

k8s精确地控制着整个发布过程,分批次有序地进行着滚动更新,直到把所有旧的副本全部更新到新版本。实际上k8s是通过两个参数来精确地控制着每次滚动的pod数量:

  • maxSurge,滚动更新过程中运行操作期望副本数的最大pod数,可以为绝对数值(eg:5),但不能为0,也可以为百分数(eg:10%),默认为25%;
  • maxUnavailable,滚动更新过程中不可用的最大pod数,可以为绝对数值(eg:5),但不能为0,也可以为百分数(eg:10%),默认为25%;

注:一般这两个值相同!
如果未指定这两个可选参数,则k8s会使用默认配置,查找默认配置指令如下:

kubectl get deployment tomcat-wujincheng-com -o yaml  -n default

在这里插入图片描述修改maxSurge、maxUnavailable值:
在这里插入图片描述在这里插入图片描述
成功!

11、删除不正常状态的容器

在这里插入图片描述怎样删除?
在这里插入图片描述这样子删除不掉的!

kubectl delete pod tomcat-wujincheng-com-4175885076-j1vnz –grace-period=0 --force -n default 

在这里插入图片描述一条命令搞定:

for i in `kubectl get pod -n default|awk '{print $1}'|grep tomcat-wujincheng-com-4175885076`;do kubectl delete pod $i –grace-period=0 --force -n default;done

如果这个容器组还有用的话,这样删除之后,会重新起来相应台容器。

删除容器组名为tomcat-wujincheng-com里的所有容器命令:

for i in `kubectl get pod -n default|awk '{print $1}'|grep tomcat-wujincheng-com`;do kubectl delete pod $i –grace-period=0 --force -n default;done

彻底删除这个容器组的话,需要先把对应的部署、服务、副本集全部删除,这个在k8s界面上点击删除按钮即可,只有删除容器组中的容器才需要命令,才能彻底删除。

注意:照上面做了还有该容器组的容器起来的话,继续疯狂执行上条命令!
在这里插入图片描述成功删除tomcat-wujincheng-com容器组!

发布了188 篇原创文章 · 获赞 150 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/104823185