Kubernetes基础:滚动升级回滚:rolling-update之rollback

上篇文章介绍了在RC中的滚动升级,这篇继续介绍RC中回滚的方式。

RC滚动升级

可参看如下内容:https://liumiaocn.blog.csdn.net/article/details/104205298

回滚:rollback

回滚使用如下命令即可:

执行命令:kubectl rolling-update busybox-rc -f v2.yaml --rollback

  • 注意事项:回滚的是正在执行的滚动升级

非执行中的话则会提示类似如下的错误信息:

[root@host131 RollingUpdate]# kubectl rolling-update busybox-rc busybox-rc-v2 --rollback
Command "rolling-update" is deprecated, use "rollout" instead
Error from server (NotFound): replicationcontrollers "busybox-rc" not found
[root@host131 RollingUpdate]# 

事前准备

[root@host131 RollingUpdate]# kubectl create -f v1.yaml 
replicationcontroller/busybox-rc-v1 created
[root@host131 RollingUpdate]# 
[root@host131 RollingUpdate]# kubectl get rc -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS     IMAGES           SELECTOR
busybox-rc-v1   3         3         3       9s    busybox-host   busybox:latest   app=busybox-v1
[root@host131 RollingUpdate]# 
[root@host131 RollingUpdate]# kubectl get pods -o wide
NAME                  READY   STATUS    RESTARTS   AGE   IP              NODE              NOMINATED NODE   READINESS GATES
busybox-rc-v1-dvlsw   1/1     Running   0          17s   10.254.152.7    192.168.163.131   <none>           <none>
busybox-rc-v1-khc8t   1/1     Running   0          17s   10.254.152.10   192.168.163.131   <none>           <none>
busybox-rc-v1-wd8rk   1/1     Running   0          17s   10.254.152.6    192.168.163.131   <none>           <none>
[root@host131 RollingUpdate]# 
[root@host131 RollingUpdate]# kubectl exec -it busybox-rc-v1-dvlsw sh 
/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 1000
    6 root      0:00 sh
   11 root      0:00 ps -ef
/ #

执行滚动升级

[root@host131 RollingUpdate]# kubectl rolling-update busybox-rc-v1 -f v2.yaml
Command "rolling-update" is deprecated, use "rollout" instead
Created busybox-rc-v2
Scaling up busybox-rc-v2 from 0 to 3, scaling down busybox-rc-v1 from 3 to 0 (keep 3 pods available, don't exceed 4 pods)
Scaling busybox-rc-v2 up to 1

在上述执行的过程中,执行回滚操作,日志如下所示:

[root@host131 RollingUpdate]# kubectl rolling-update busybox-rc-v1 busybox-rc-v2 --rollback
Command "rolling-update" is deprecated, use "rollout" instead
Setting "busybox-rc-v1" replicas to 3
Continuing update with existing controller busybox-rc-v1.
Scaling up busybox-rc-v1 from 3 to 3, scaling down busybox-rc-v2 from 1 to 0 (keep 3 pods available, don't exceed 4 pods)

从提示中可以看到,希望做的事情是对的,将已经启动的busybox-rc-v2的Pod实例从1降到0,确认此时RC状态

[root@host131 test]# kubectl get rc -o wide
NAME            DESIRED   CURRENT   READY   AGE     CONTAINERS     IMAGES           SELECTOR
busybox-rc-v1   3         3         3       2m36s   busybox-host   busybox:latest   app=busybox-v1
busybox-rc-v2   1         1         1       32s     busybox-host   busybox:latest   app=busybox-v2
[root@host131 test]# 

之后滚动升级窗口最终日志如下所示:

[root@host131 RollingUpdate]# kubectl rolling-update busybox-rc-v1 -f v2.yaml
Command "rolling-update" is deprecated, use "rollout" instead
Created busybox-rc-v2
Scaling up busybox-rc-v2 from 0 to 3, scaling down busybox-rc-v1 from 3 to 0 (keep 3 pods available, don't exceed 4 pods)
Scaling busybox-rc-v2 up to 1
Scaling busybox-rc-v1 down to 2
Scaling busybox-rc-v2 up to 2
Scaling busybox-rc-v1 down to 1
Scaling busybox-rc-v2 up to 3
Scaling busybox-rc-v1 down to 0
Update succeeded. Deleting old controller: busybox-rc-v1
Renaming busybox-rc-v2 to busybox-rc-v1
replicationcontroller/busybox-rc-v1 rolling updated
[root@host131 RollingUpdate]# 

可以看到滚动升级成功执行,但滚动升级的回滚没有成功,这并不是期待的结果

[root@host131 RollingUpdate]# kubectl rolling-update busybox-rc-v1 busybox-rc-v2 --rollback
Command "rolling-update" is deprecated, use "rollout" instead
Setting "busybox-rc-v1" replicas to 3
Continuing update with existing controller busybox-rc-v1.
Scaling up busybox-rc-v1 from 3 to 3, scaling down busybox-rc-v2 from 1 to 0 (keep 3 pods available, don't exceed 4 pods)
error: timed out waiting for any update progress to be made
[root@host131 RollingUpdate]# 

而且确认Pod状况,验证了Pod已经成功滚动,回滚并未发生

[root@host131 test]# kubectl get rc -o wide
NAME            DESIRED   CURRENT   READY   AGE   CONTAINERS     IMAGES           SELECTOR
busybox-rc-v1   3         3         3       2m    busybox-host   busybox:latest   app=busybox-v2
[root@host131 test]# kubectl get pod -o wide
NAME                  READY   STATUS    RESTARTS   AGE     IP             NODE              NOMINATED NODE   READINESS GATES
busybox-rc-v2-cjp8n   1/1     Running   0          3m34s   10.254.152.6   192.168.163.131   <none>           <none>
busybox-rc-v2-dvvxd   1/1     Running   0          4m40s   10.254.152.8   192.168.163.131   <none>           <none>
busybox-rc-v2-lxwg5   1/1     Running   0          5m46s   10.254.152.5   192.168.163.131   <none>           <none>
[root@host131 test]# kubectl exec -it busybox-rc-v2-cjp8n sh
/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 10000
    6 root      0:00 sh
   11 root      0:00 ps -ef
/ #

由于RC已经是一个过时很久的功能,此处主要是用于记录一下这种执行方式,回滚功能的验证会在后续Deployment进行详细的说明。

使用的YAML文件

[root@host131 RollingUpdate]# cat v1.yaml 
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: busybox-rc-v1
spec:
  replicas: 3
  selector:
    app: busybox-v1
  template:
    metadata:
      labels:
        app: busybox-v1
    spec:
      containers:
      - name: busybox-host
        image: busybox:latest
        command: ["sleep"]
        args: ["1000"]
...
[root@host131 RollingUpdate]# cat v2.yaml 
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: busybox-rc-v2
spec:
  replicas: 3
  selector:
    app: busybox-v2
  template:
    metadata:
      labels:
        app: busybox-v2
    spec:
      containers:
      - name: busybox-host
        image: busybox:latest
        command: ["sleep"]
        args: ["10000"]
...
[root@host131 RollingUpdate]# 

参考内容

https://v1-14.docs.kubernetes.io/docs/reference/kubectl/cheatsheet/

发布了1084 篇原创文章 · 获赞 1299 · 访问量 402万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104205309