首页 > 其他分享 >k8s-pod版本更新

k8s-pod版本更新

时间:2023-10-21 23:22:23浏览次数:45  
标签:10 nginx master 版本 deployment pod k8s root

pod版本更新⭐️⭐️

在实际应用中,升级是一个常见的场景,Deployment能够很方便的支撑应用升级。

Deployment可以设置不同的升级策略,有如下两种。

RollingUpdate:滚动升级,即逐步创建新Pod再删除旧Pod,为默认策略。
Recreate:替换升级,即先把当前Pod删掉再重新创建Pod。
Deployment的升级可以是声明式的,也就是说只需要修改Deployment的YAML定义即可,

比如使用kubectl edit命令将上面Deployment中的镜像修改为nginx:alpine

修改完成后再查询ReplicaSet和Pod,发现创建了一个新的ReplicaSet,Pod也重新创建了。

# 注意,是修改Deployment控制器,实现对pod的更新

[root@k8s-master-10 ~]#kubectl edit deployments.apps nginx-deployment 

     34     spec:
     35       containers:
     36       - image: nginx:latest

deployment和RS和pod关系

image

查看deployment更新事件

[root@k8s-master-10 ~]#kubectl -n yuchaoit describe deployments.apps nginx-deployment 

# 创建了新的RS控制器
NewReplicaSet:   nginx-deployment-5b78bc88d4 (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  34m    deployment-controller  Scaled up replica set nginx-deployment-64bcc7b77f to 2
  Normal  ScalingReplicaSet  4m53s  deployment-controller  Scaled up replica set nginx-deployment-5b78bc88d4 to 1
  Normal  ScalingReplicaSet  4m32s  deployment-controller  Scaled down replica set nginx-deployment-64bcc7b77f to 1
  Normal  ScalingReplicaSet  4m32s  deployment-controller  Scaled up replica set nginx-deployment-5b78bc88d4 to 2
  Normal  ScalingReplicaSet  4m12s  deployment-controller  Scaled down replica set nginx-deployment-64bcc7b77f to 0

查看rs更新事件

# 旧的RS,已经不负责pod管理
[root@k8s-master-10 ~]#kubectl -n yuchaoit describe rs nginx-deployment-64bcc7b77f 

# 新的RS,创建新的pod
[root@k8s-master-10 ~]#kubectl -n yuchaoit describe rs nginx-deployment-5b78bc88d4

查看pod更新事件

此时的pod,也是基于新的RS控制器创建了

[root@k8s-master-10 ~]#kubectl -n yuchaoit describe pod nginx-deployment-5b78bc88d4-

# pod和RS控制器关系
Controlled By:  ReplicaSet/nginx-deployment-5b78bc88d4

deployment更新镜像原理图

image

默认是滚动更新,逐步创建新pod、然后删除旧pod.

# 命令
[root@k8s-master-10 ~]#kubectl -n yuchaoit describe deployments.apps nginx-deployment 

# 滚动更新事件
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  42m   deployment-controller  Scaled up replica set nginx-deployment-64bcc7b77f to 2
  Normal  ScalingReplicaSet  12m   deployment-controller  Scaled up replica set nginx-deployment-5b78bc88d4 to 1
  Normal  ScalingReplicaSet  12m   deployment-controller  Scaled down replica set nginx-deployment-64bcc7b77f to 1
  Normal  ScalingReplicaSet  12m   deployment-controller  Scaled up replica set nginx-deployment-5b78bc88d4 to 2
  Normal  ScalingReplicaSet  11m   deployment-controller  Scaled down replica set nginx-deployment-64bcc7b77f to 0

查看滚动更新状态

[root@k8s-master-10 ~]# kubectl -n yuchaoit  rollout status deployment nginx-deployment 
deployment "nginx-deployment" successfully rolled out

蓝绿更新原理

image

其他更新镜像命令

1.直接修改yaml文件,修改镜像(镜像就是容器运行的交付标准)

# 语法
# 结尾跟上容器名,修改镜像即可
[root@k8s-master-10 ~]#kubectl set image -f deployment-nginx.yml nginx-containers=nginx:1.21.5
deployment.apps/nginx-deployment image updated
[root@k8s-master-10 ~]#


2.还有可以直接选择控制器,进行镜像修改
[root@k8s-master-10 ~]#kubectl -n yuchaoit set image deployment nginx-deployment nginx-containers=nginx:1.15.0
deployment.apps/nginx-deployment image updated

pod回滚上一个版本

回滚也称为回退,即当发现升级出现问题时,让应用回到老的版本。

Deployment可以非常方便的回滚到老版本。

例如上面升级的新版镜像有问题,可以执行kubectl rollout undo命令进行回滚。

Deployment之所以能如此容易的做到回滚,是因为Deployment是通过ReplicaSet控制Pod的

升级后之前ReplicaSet都一直存在,Deployment回滚做的就是使用之前的ReplicaSet再次把Pod创建出来。

Deployment中保存ReplicaSet的数量可以使用revisionHistoryLimit参数限制,默认值为10。
[root@k8s-master-10 ~]#kubectl -n yuchaoit describe deployments.apps nginx-deployment 


[root@k8s-master-10 ~]#kubectl -n yuchaoit rollout undo deployment nginx-deployment 
deployment.apps/nginx-deployment rolled back

# 查看回滚上一个控制器的版本
[root@k8s-master-10 ~]#kubectl -n yuchaoit describe deployments.apps nginx-deployment 

# 最新pod信息
[root@k8s-master-10 ~]#kubectl -n yuchaoit get po -owide

# 查看RS,很明显,回到上一个版本了
[root@k8s-master-10 ~]#kubectl -n yuchaoit get rs -owide
NAME                          DESIRED   CURRENT   READY   AGE     CONTAINERS         IMAGES         SELECTOR
nginx-deployment-5b48487b68   0         0         0       6m22s   nginx-containers   nginx:1.21.5   app=nginx,pod-template-hash=5b48487b68
nginx-deployment-5b78bc88d4   2         2         2       45m     nginx-containers   nginx:latest   app=nginx,pod-template-hash=5b78bc88d4
nginx-deployment-64bcc7b77f   0         0         0       74m     nginx-containers   nginx:1.14.0   app=nginx,pod-template-hash=64bcc7b77f
[root@k8s-master-10 ~]#

pod指定版本记录回滚⭐️⭐️

全流程⭐️

# 清理旧环境,删除Deployment,也会删除对应的RS控制器记录
[root@k8s-master-10 ~]#kubectl delete -f deployment-nginx.yml 
deployment.apps "nginx-deployment" deleted


# 修改镜像版本
[root@k8s-master-10 ~]#grep image deployment-nginx.yml 
      - image: nginx:1.14.0
        imagePullPolicy: IfNotPresent


# 创建第一版pod,记录版本,添加参数 --record
[root@k8s-master-10 ~]#kubectl create -f deployment-nginx.yml --record
deployment.apps/nginx-deployment created

# 测试版本
[root@k8s-master-10 ~]#curl -s  10.2.2.32 -I |grep Server
Server: nginx/1.14.0



# 更新第二版 1.15.0
[root@k8s-master-10 ~]#kubectl -n yuchaoit set image deployment nginx-deployment nginx-containers=nginx:1.15.0
deployment.apps/nginx-deployment image updated

# 验证
[root@k8s-master-10 ~]#curl -s  10.2.1.24 -I |grep Server
Server: nginx/1.15.0


# 更新第三版1.16.0
kubectl -n yuchaoit set image deployment nginx-deployment nginx-containers=nginx:1.16.0

# 验证
[root@k8s-master-10 ~]#curl 10.2.1.25 -s -I |grep Server
Server: nginx/1.16.0

# 查看控制器所有的历史版本
[root@k8s-master-10 ~]#kubectl rollout history deployment nginx-deployment -n yuchaoit 
deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment-nginx.yml --record=true
2         kubectl create --filename=deployment-nginx.yml --record=true
3         kubectl create --filename=deployment-nginx.yml --record=true


# 查看指定历史版本的信息
[root@k8s-master-10 ~]#kubectl rollout history deployment nginx-deployment -n yuchaoit --revision=1



# 回到指定版本
[root@k8s-master-10 ~]#kubectl rollout undo deployment nginx-deployment -n yuchaoit --to-revision=1
deployment.apps/nginx-deployment rolled back
[root@k8s-master-10 ~]#kubectl -n yuchaoit get po -owide
NAME                                READY   STATUS    RESTARTS   AGE   IP          NODE          NOMINATED NODE   READINESS GATES
nginx-deployment-64bcc7b77f-6xb95   1/1     Running   0          5s    10.2.1.26   k8s-node-11   <none>           <none>
nginx-deployment-64bcc7b77f-jxwzd   1/1     Running   0          5s    10.2.2.35   k8s-node-12   <none>           <none>
[root@k8s-master-10 ~]#curl -s -I 10.2.2.35 |grep Server
Server: nginx/1.14.0
[root@k8s-master-10 ~]#

扩缩容deployment

[root@k8s-master-10 ~]#kubectl -n yuchaoit scale deployment nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled
[root@k8s-master-10 ~]#kubectl -n yuchaoit get po -owide -w
NAME                                READY   STATUS    RESTARTS   AGE   IP          NODE          NOMINATED NODE   READINESS GATES
nginx-deployment-64bcc7b77f-6xb95   1/1     Running   0          72s   10.2.1.26   k8s-node-11   <none>           <none>
nginx-deployment-64bcc7b77f-fgbdq   1/1     Running   0          3s    10.2.1.27   k8s-node-11   <none>           <none>
nginx-deployment-64bcc7b77f-jbf9d   1/1     Running   0          3s    10.2.2.36   k8s-node-12   <none>           <none>
nginx-deployment-64bcc7b77f-jxwzd   1/1     Running   0          72s   10.2.2.35   k8s-node-12   <none>           <none>
nginx-deployment-64bcc7b77f-lrxrx   1/1     Running   0          3s    10.2.2.37   k8s-node-12   <none>           <none>

# 缩容
[root@k8s-master-10 ~]#kubectl -n yuchaoit scale deployment nginx-deployment --replicas=1
deployment.apps/nginx-deployment scaled

[root@k8s-master-10 ~]#kubectl -n yuchaoit get po -owide  
NAME                                READY   STATUS    RESTARTS   AGE    IP          NODE          NOMINATED NODE   READINESS GATES
nginx-deployment-64bcc7b77f-6xb95   1/1     Running   0          108s   10.2.1.26   k8s-node-11   <none>           <none>
[root@k8s-master-10 ~]#

标签:10,nginx,master,版本,deployment,pod,k8s,root
From: https://www.cnblogs.com/chunjeh/p/17779738.html

相关文章

  • 记spring 尽量没有冲突的版本
    之前写demo总是随便找一个spring版本,虽然没有很大的冲突,但还是想找一个尽量没有冲突的官方版本,记录下寻找的过程springboot3.0版本java要求是17,目前我的java版本还是8或者11,所以只考虑springboot2版本期望的springboot版本是2.7.17,目前官网的最新的GA版本从上往下,首先是spri......
  • AdobeXD全版本XD安装包下载XD中文版直装 软件激活版
    AdobeXD软件全称AdobeeXperienceDesign,它是一款功能很强大的人机交互设计软件,支持网站,移动应用原型UX/UI的设计,免费的网页设计和移动应用的用户体验,将视觉设计、交互设计、原型制作、共享功能集于一体,为不同平台的用户提供了原型使用工具。软件地址:看置顶帖岁月无情,芳华易逝,曾经......
  • windows下的深度学习环境软件版本(cuda/cudnn/pytorch)
    为了方便多个深度学习框架的环境配置,推荐使用anoconda进行搭建。1.anaconda/miniconda下载地址anacoonda官方下载地址:FreeDownload|Anacondaminiconda官方下载地址: LatestMinicondainstallerlinksbyPythonversion—minicondadocumentation清华镜像源的下载地......
  • SpringBoot与jdk版本冲突
    问题:SpringBoot项目无法正常启动原因:SpringBoot2.0以上版本最低需要java8支持;SpringBoot3.0以上的版本最低需要java17支持。只需要降低pom文件中springboot版本即可。SpringBoot版本参见于https://spring.io/projects/spring-boot#learn文章参考了https://www.cnblogs.co......
  • 山石防火墙(老版本)重置密码教程
    一、连接防火墙console口,打开scrt,重启防火墙等待出现bootos......输入:entershell(必须一个一个字母打)二、进入配置文件~#cdflash/config三、查看配置文件/wr_point/etc/mnt/mtdblock2/config#ls-l四、查看配置文件中的账号和密码(密码一般都在config.0这个文档中)/wr_point/e......
  • K8S使用开源CEPH作为后端StorageClass
    1引言K8S在1.13版本开始支持使用Ceph作为StorageClass。其中云原生存储Rook和开源Ceph应用都非常广泛。本文主要介绍K8S如何对接开源Ceph使用RBD卷。K8S对接Ceph的技术栈如下图所示。K8S主要通过容器存储接口CSI和Ceph进行交互。https://docs.ceph.com/en/reef/rbd/rbd-kuber......
  • 来看看 Discourse 3.2.0.beta2 版本添加的新功能
    3.2.0.beta2版本是在2023-10-16发布的,工具官方的说法,主要添加了3个新功能。官方的发布日志页面:3.2.0.beta2:Autodeleteunusedtags,customdaterangeforreports,newchatnotifications,andmore-announcements-DiscourseMeta自动删除标签功能Discourse会对没......
  • 来看看 Discourse 3.2.0.beta2 版本添加的新功能
    3.2.0.beta2版本是在2023-10-16发布的,工具官方的说法,主要添加了3个新功能。官方的发布日志页面:3.2.0.beta2:Autodeleteunusedtags,customdaterangeforreports,newchatnotifications,andmore-announcements-DiscourseMeta自动删除标签功能Discourse会......
  • 401 Kubernetes网络 (Pod Service Calico Flannel) 4.1-4.4
    一、Pod网络在K8S集群里,多个节点上的Pod相互通信,要通过网络插件完成,比如Calico网络插件。使用kubeadm初始化K8S集群时,需要指定一个参数--pod--network-cidr=10.18.0.0/16它用来定义Pod的网段。配置Calico的时候,也要定义CALICO_IPV4POOL_CIDR的参数,它的值也是Pod的网络。容器网......
  • 版本管理客户端工具SourceTree
      [使用]1.设置SSH客户端工具>选项 设置OpenSSH, SSH密钥这一栏自然会去选择当前用户下的.ssh目录下的id_rsa这个私钥: ......