1 Pod版本更新 Recreate

案例:通过Recreate对Pod进行重建更新

修改deploy_nginx.yml文件设置Pod更新

vim deploy_nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
    name: deploy-nginx
    namespace: test
spec:
   strategy:            #Pod更新策略
      type: Recreate    #重建更新
    replicas: 3         #指定Pod数量
    selector:           #标签选择器(基于选择器匹配Pod
      matchLabels:      #标签类型
        app: deploy-nginx #匹配pod的标签(表示deploy管理带有此标签的Pod)
    template: #pod的配置模板
      metadata:
        labels:
          app: deploy-nginx   #pod的标签
     spec:
       containers:
       - name: nginx
         image: nginx:1.18.0
         imagePullPolicy: IfNotPresen #镜像拉取策略
         ports: #定义端口 
         - containerPort: 80 #端口
           protocol: TCP #端口协议

创建pod
# kubectl create -f deploy_nginx.yml

另外开一个终端动态观察pod的信息
# kubectl get pod -n test -w

更新镜像版本

# kubectl edit deploy deploy-nginx -n test
...
spec:
containers:
- image: nginx:1.18.1 指定新版本

提示:观察pod的重建过程

#第一步:将Running的pod先终止(Terminating)

#第二步:接下来Pod处于等待状态(Pending)

#第三步:重新创建容器(ContainerCreating)

#第四步:新的容器被创建且以成功运行(Running )

查看镜像版本

# kubectl get deploy -n test -o wide

删除depoly
# kubectl delete -f deploy_nginx.yml

2 Pod版本更新 RollingUpdat

案例:通过RollingUpdat对Pod进行滚动更新(默认策略,无需指定,只需要将前边配置文件中的其他更新策略删除即可)

vim deploy_nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
    name: deploy-nginx
    namespace: test
spec:
   replicas: 6
   selector:       #标签选择器(基于选择器匹配Pod)
   matchLabels:    #标签类型
     app: deploy-nginx #匹配pod的标签(表示deploy管理带有此标签的Pod)
   template: #pod的配置模板
     metadata:
       labels:
         app: deploy-nginx #pod的标签
     spec:
       containers:
       - name: nginx
         image: nginx:1.18.1  
         imagePullPolicy: IfNotPresen  #镜像拉取策略
         ports: #定义端口
         - containerPort: 80 #端口
           protocol: TCP #端口协议

创建pod(--record 记录整个deploy更新历史)
# kubectl create -f deploy_nginx.yml --record

另外一个终端动态查看pod信息
# kubectl get pod -n test -w

更新镜像版本

# kubectl edit deploy deploy-nginx -n test

spec:

    containers:

    - image: nginx:1.20.0

查看RS信息
# kubectl get rs -n test -o wide

提示:当pod滚动更新后,rs也会随之跟着更新,原有rs中的pod会被删除,但是原有的rs并不会删除,用于做版本回退 显示当前升级版本的状态

# kubectl rollout status deploy deploy-nginx -n test

3 Pod版本回退

Deploy支持版本升级过程中的暂停、继续、回退等功能,具体功能如下:

kubectl rollout 版本升级相关功能,支持下面的选项:

(1)status #显示当前升级状态
(2)history #显示升级历史记录
(3)pause #暂停版本升级过程
(4)resume #继续已经暂停的版本升级过程 restart #重启版本升级过程

(5)undo #回滚到上一级版本(可以通过--to-revision回滚到指定版本)

案例:多次更新镜像版本,随后对镜像版本进行回退

更新镜像版本

# kubectl edit deploy deploy-nginx -n test

spec:

   containers:

   - image: nginx:1.20.1

更新镜像版本

# kubectl edit deploy deploy-nginx -n test

spec:

    containers:

    - image: nginx:1.21.0

查看升级历史记录

# kubectl rollout history deploy deploy-nginx -n test

查看具体版本详细信息:--revision=版本编号
# kubectl rollout history deploy deploy-nginx --revision=2 -n test

查看当前所有版本(通过rs可以查看)
# kubectl get rs -o wide -n test

查看当前使用版本(查看deploy)
# kubectl get deploy -o wide -n test

版本回退:通过--to-revision=1,可直接回滚到1版本,如果省略这个选项,就是回退到上个版本 # kubectl rollout undo deploy deploy-nginx --to-revision=2 -n test

查看当前使用的版本

# kubectl get deploy -o wide -n test

查看升级历史记录

# kubectl rollout history deploy deploy-nginx -n test

提示:新版本就是原先的1版本

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐