首页 > 其他分享 >K8S服务滚动升级

K8S服务滚动升级

时间:2022-08-19 11:13:00浏览次数:79  
标签:滚动 dep 升级 deployment rollout pod K8S my

  对于Kubernetes集群来说,一个service可能有多个pod,滚动升级(Rolling update)就是指每次更新部分Pod,而不是在同一时刻将该Service下面的所有Pod shutdown,然后去更新(例如replace --force方案),逐个更新可以避免将业务中断

1. 先查询目前发布的服务版本,可以看到my-dep使用的镜像版本是nginx

 

 

2、把Nginx升级到目前最新的1.23.0版本

在yaml文件中添加标粗字段,其中images镜像从Nginx替换成centos-nginx:1.23.0,镜像需要提前通过dockerfile打包load到node节点或者私有仓库中

[root@k8s-master1 ~]# cat nginx-deployment-v2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-dep
spec:
replicas: 3
minReadySeconds: 30
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
selector:
matchLabels:
app: my-dep
template:
metadata:
labels:
app: my-dep

spec:
containers:
- name: nginx
image: centos-nginx:1.23.0
imagePullPolicy: Never
ports:
- containerPort: 80
restartPolicy: Always

 

字段解释
minReadySeconds
Kubernetes在等待设置的时间后才进行升级
如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了,所以这个可以设置的保守一些,比如我们的服务启动从3-20秒不等,我可以设置成30秒,这样防止pod启动了但是服务还没准备好导致系统不可用。

maxSurge
升级过程中最多可以比原先设置多出的POD数量
例如:maxSurage=1,replicas=3,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有3+1个POD。

maxUnavaible
升级过程中最多有多少个POD处于无法提供服务的状态,当maxSurge不为0时,该值也不能为0,最好和maxSurge保持一致。
例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态,可以保证有足够的pod(或者认为是足够的性能)提供服务。

 

3、开始滚动升级

在执行deployment的操作时,使用了一个--record参数,这个参数是用来告诉apiserver记录update的历史。

 

 

在升级过程中,查询pod发现pod先create一个,30s后再删除一个,在重复create操作。和我们在yaml文件中的设定一致

 

 

升级过程可以通过status查询升级情况

 successfully rolled out表示升级成功

 

 

4、查询升级后的版本是否正确

查询rs副本

 

 镜像版本已经升级到1.23.0

 

 

 也可以在deploy,pod中describe查询对应的镜像版本。describe查询对应的evens事件可以清楚看到pod的升级过程

 

5、 升级回滚

可以通过如下命令来查看update历史:

kubectl rollout history deployment my-dep

如果只想升级apply的时候没有指定参数--recore,history查询CHANGE-CAUSE就会是<none>

 

 

查看指定revision的详细信息:

kubectl rollout history deployment my-dep --revision=8

 

 

需要说明的是,在升级完成以后,旧的RS也不会被删除,这些信息都会存储到server端,以方便回滚。

deployment下的pod的回滚操作相当简单,直接执行rollout undo即可将deployment回滚到record中记录的上一个revision:

kubectl rollout undo deployment my-dep

执行如下操作,回滚到指定版本:

kubectl rollout undo deployment my-dep --to-revision=7

6、其他

暂停升级 $ kubectl rollout pause deployment <deployment>

恢复升级 $ kubectl rollout resume deployment <deployment>

 

标签:滚动,dep,升级,deployment,rollout,pod,K8S,my
From: https://www.cnblogs.com/xmwan/p/16601200.html

相关文章

  • k8s上使用statefulset搭建es集群
    环境要求:k8s多节点集群,最好是kubespherek8s集群,k8s需要使用StorageClass实现:vim es.yamlapiVersion:policy/v1beta1kind:PodDisruptionBudgetmetadata:name:ela......
  • CSS实现div里面的内容超滚动
    html代码:<divclass="box"><divclass="content"></div><divclass="content"></div><divclass="content"></div><divclass="content"></div><divclas......
  • 关机一段时间后k8s无法启动
    目录重装前清除环境方法:重装后pod-coredns一直处于ContainerCreating状态:重启之后k8s集群居然起不起来了解决方法:重装重装前清除环境方法:kubeadmresetsystemctlsto......
  • k8s 使用 kubeadm init 初始化失败日志一直提示"Error getting node" err="node \"ma
    系统版本CentOSLinuxrelease7.9.2009(Core)内核版本Linux3.10.0-1160.76.1.el7.x86_64x86_64docker版本Dockerversion20.10.17,build100c701k8......
  • Infiniband交换机版本升级路线图及故障1例
    Exadata中的Infiniband交换机,从最开始的1.0.x版本,到现在的2.,中间经历的版本比较多,如果当前的版本过低,则可能无法直接升级到最新版本,需要临时升级到中间版本。具体的升级......
  • k8s中ingress,service,depoyment,pod如何关联
    k8s中ingress,service,depoyment,pod通过label标签名称来识别关联,它们的label name一定是一样的。1、查询发布的deploymet控制器[root@k8s-master1~]#kubectlgetdeplo......
  • 模拟浏览器滚动条持续向下滚动
    文件目录结构D:.chromedriver.exe浏览器向下滑动.py代码fromseleniumimportwebdriverimporttimeimportrandomdefroll_window_to_bottom(browser,......
  • openssh-浅谈openssl和openssh的升级
    最近项目上有服务器漏洞被扫描出来,是关于openssl的之前没怎么关注过这个问题,于是着手去了解了以下发现有些坑,分享下自己的经验。中间过程比较长,想省事的直接跳到第四节,......
  • rpm方式升级nginx1.22
    目录rpm方式升级nginx1.221、下载升级包及所依赖包2、安装替换之前的版本rpm方式升级nginx1.221、下载升级包及所依赖包nginx1.22下载地址:http://nginx.org/packages/rh......
  • k8s命令补全方法
    正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(k......