kubernetes云平台管理实战: 滚动升级秒级回滚(六)

一、nginx保证有两个版本

1、查看当前容器运行nginx版本

[root@k8s-master ~]# kubectl get pod  -o wide
NAME          READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-7w38b   1/1       Running   0          4h        172.16.10.4   k8s-node1
myweb-btflm   1/1       Running   0          4h        172.16.48.4   k8s-node2
myweb-cbt47   1/1       Running   0          4h        172.16.48.3   k8s-node2
myweb-rt3b9   1/1       Running   0          4h        172.16.10.3   k8s-node1
nginx         1/1       Running   0          6h        172.16.10.2   k8s-node1
nginx2        1/1       Running   0          5h        172.16.48.2   k8s-node2
[root@k8s-master ~]# curl -I 172.16.10.2
HTTP/1.1 200 OK
Server: nginx/1.15.8
Date: Sun, 20 Jan 2019 11:31:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 25 Dec 2018 09:56:47 GMT
Connection: keep-alive
ETag: "5c21fedf-264"
Accept-Ranges: bytes

2、下载nginx1.13

[root@k8s-master ~]# docker pull nginx:1.13

3、上传到私有仓库

[root@k8s-master ~]# docker tag docker.io/nginx:latest 10.0.128.0:5000/nginx:1.15
[root@k8s-master ~]# docker tag docker.io/nginx:1.13 10.0.128.0:5000/nginx:1.13
[root@k8s-master ~]# docker push 10.0.128.0:5000/nginx:1.13
The push refers to a repository [10.0.128.0:5000/nginx]
7ab428981537: Pushed 
82b81d779f83: Pushed 
d626a8ad97a1: Pushed 
1.13: digest: sha256:e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90 size: 948
[root@k8s-master ~]# docker push 10.0.128.0:5000/nginx:1.15
The push refers to a repository [10.0.128.0:5000/nginx]
b7efe781401d: Layer already exists 
c9c2a3696080: Layer already exists 
7b4e562e58dc: Layer already exists 
1.15: digest: sha256:e2847e35d4e0e2d459a7696538cbfea42ea2d3b8a1ee8329ba7e68694950afd3 size: 948
[root@k8s-master ~]# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
docker.io/registry                      latest              33fbbf4a24e5        2 weeks ago         24.17 MB
10.0.128.0:5000/busybox                 latest              3a093384ac30        2 weeks ago         1.199 MB
docker.io/busybox                       latest              3a093384ac30        2 weeks ago         1.199 MB
10.0.128.0:5000/nginx                   1.15                7042885a156a        3 weeks ago         109.2 MB
10.0.128.0:5000/nginx                   latest              7042885a156a        3 weeks ago         109.2 MB
docker.io/nginx                         latest              7042885a156a        3 weeks ago         109.2 MB
10.0.128.0:5000/nginx                   1.13                ae513a47849c        8 months ago        108.9 MB
docker.io/nginx                         1.13                ae513a47849c        8 months ago        108.9 MB
10.0.128.0:5000/pod-infrastructure      latest              34d3450d733b        24 months ago       205 MB
docker.io/tianyebj/pod-infrastructure   latest              34d3450d733b        24 months ago       205 MB

4、私有仓库查看

[root@k8s-master ~]# ls /opt/myregistry/docker/registry/v2/repositories/nginx/_manifests/tags/
1.13  1.15  latest

二、滚动升级

1、删除所有pod和rc

[root@k8s-master ~]# kubectl get all
NAME       DESIRED   CURRENT   READY     AGE
rc/myweb   5         5         5         5h

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME             READY     STATUS    RESTARTS   AGE
po/myweb-7w38b   1/1       Running   0          5h
po/myweb-btflm   1/1       Running   0          5h
po/myweb-cbt47   1/1       Running   0          5h
po/myweb-rt3b9   1/1       Running   0          5h
po/nginx         1/1       Running   0          6h
po/nginx2        1/1       Running   0          5h
[root@k8s-master ~]# kubectl delete pod nginx
pod "nginx" deleted

2、创建升级rc

[root@k8s-master ~]# cat myweb-rcv1.yml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 3
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: 10.0.128.0:5000/nginx:1.13
        ports:
        - containerPort: 80
		
[root@k8s-master ~]# cat myweb-rcv2.yml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb2
spec:
  replicas: 3
  selector:
    app: myweb2
  template:
    metadata:
      labels:
        app: myweb2
    spec:
      containers:
      - name: myweb2
        image: 10.0.128.0:5000/nginx:1.15
        ports:
        - containerPort: 80

3、执行升级

[root@k8s-master ~]# kubectl rolling-update myweb -f myweb-rcv2.yml --update-period=20s
Created myweb2
Scaling up myweb2 from 0 to 3, scaling down myweb from 3 to 0 (keep 3 pods available, don't exceed 4 pods)
Scaling myweb2 up to 1
Scaling myweb down to 2
Scaling myweb2 up to 2
Scaling myweb down to 1
Scaling myweb2 up to 3
Scaling myweb down to 0
Update succeeded. Deleting myweb
replicationcontroller "myweb" rolling updated to "myweb2"

4、滚动升级过程

[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    2         2         2         20m
rc/myweb2   2         2         2         25s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb-hzxcp    1/1       Running   0          20m
po/myweb2-rhgq3   1/1       Running   0          5s
po/myweb2-xdtrp   1/1       Running   0          25s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    2         2         2         20m
rc/myweb2   2         2         2         28s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb-hzxcp    1/1       Running   0          20m
po/myweb2-rhgq3   1/1       Running   0          8s
po/myweb2-xdtrp   1/1       Running   0          28s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    2         2         2         20m
rc/myweb2   2         2         2         30s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb-hzxcp    1/1       Running   0          20m
po/myweb2-rhgq3   1/1       Running   0          10s
po/myweb2-xdtrp   1/1       Running   0          30s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    1         1         1         20m
rc/myweb2   2         2         2         40s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS        RESTARTS   AGE
po/myweb-3hg1r    1/1       Running       0          20m
po/myweb-hzxcp    1/1       Terminating   0          20m
po/myweb2-khl9t   0/1       Pending       0          0s
po/myweb2-rhgq3   1/1       Running       0          20s
po/myweb2-xdtrp   1/1       Running       0          41s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    1         1         1         20m
rc/myweb2   3         3         3         46s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb2-khl9t   1/1       Running   0          6s
po/myweb2-rhgq3   1/1       Running   0          26s
po/myweb2-xdtrp   1/1       Running   0          46s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    1         1         1         20m
rc/myweb2   3         3         3         50s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb2-khl9t   1/1       Running   0          10s
po/myweb2-rhgq3   1/1       Running   0          30s
po/myweb2-xdtrp   1/1       Running   0          50s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    1         1         1         20m
rc/myweb2   3         3         3         53s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb2-khl9t   1/1       Running   0          13s
po/myweb2-rhgq3   1/1       Running   0          33s
po/myweb2-xdtrp   1/1       Running   0          53s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    1         1         1         20m
rc/myweb2   3         3         3         57s

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb-3hg1r    1/1       Running   0          20m
po/myweb2-khl9t   1/1       Running   0          17s
po/myweb2-rhgq3   1/1       Running   0          37s
po/myweb2-xdtrp   1/1       Running   0          57s
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb    0         0         0         21m
rc/myweb2   3         3         3         1m

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb2-khl9t   1/1       Running   0          23s
po/myweb2-rhgq3   1/1       Running   0          43s
po/myweb2-xdtrp   1/1       Running   0          1m
[root@k8s-master ~]# kubectl get all
NAME        DESIRED   CURRENT   READY     AGE
rc/myweb2   3         3         3         1m

NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   10.254.0.1   <none>        443/TCP   21h

NAME              READY     STATUS    RESTARTS   AGE
po/myweb2-khl9t   1/1       Running   0          29s
po/myweb2-rhgq3   1/1       Running   0          49s
po/myweb2-xdtrp   1/1       Running   0          1m

三、秒级回滚

1、执行回滚

[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb2-khl9t   1/1       Running   0          29m       172.16.10.2   k8s-node1
myweb2-rhgq3   1/1       Running   0          29m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          29m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl rolling-update myweb2 -f myweb-rcv1.yml --update-period=10s
Created myweb
Scaling up myweb from 0 to 3, scaling down myweb2 from 3 to 0 (keep 3 pods available, don't exceed 4 pods)
Scaling myweb up to 1
Scaling myweb2 down to 2
Scaling myweb up to 2
Scaling myweb2 down to 1
Scaling myweb up to 3
Scaling myweb2 down to 0
Update succeeded. Deleting myweb2
replicationcontroller "myweb2" rolling updated to "myweb"

2、回滚过程

[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb2-khl9t   1/1       Running   0          20m       172.16.10.2   k8s-node1
myweb2-rhgq3   1/1       Running   0          20m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          20m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-mnf7x    1/1       Running   0          4s        172.16.48.2   k8s-node2
myweb2-khl9t   1/1       Running   0          29m       172.16.10.2   k8s-node1
myweb2-rhgq3   1/1       Running   0          29m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-mnf7x    1/1       Running   0          6s        172.16.48.2   k8s-node2
myweb2-khl9t   1/1       Running   0          29m       172.16.10.2   k8s-node1
myweb2-rhgq3   1/1       Running   0          29m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-mnf7x    1/1       Running   0          7s        172.16.48.2   k8s-node2
myweb2-khl9t   1/1       Running   0          29m       172.16.10.2   k8s-node1
myweb2-rhgq3   1/1       Running   0          29m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-7m76h    1/1       Running   0          2s        172.16.10.2   k8s-node1
myweb-mnf7x    1/1       Running   0          12s       172.16.48.2   k8s-node2
myweb2-rhgq3   1/1       Running   0          29m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-7m76h    1/1       Running   0          5s        172.16.10.2   k8s-node1
myweb-mnf7x    1/1       Running   0          15s       172.16.48.2   k8s-node2
myweb2-rhgq3   1/1       Running   0          30m       172.16.10.3   k8s-node1
myweb2-xdtrp   1/1       Running   0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS              RESTARTS   AGE       IP            NODE
myweb-7m76h    1/1       Running             0          11s       172.16.10.2   k8s-node1
myweb-kzq8c    0/1       ContainerCreating   0          1s        <none>        k8s-node2
myweb-mnf7x    1/1       Running             0          21s       172.16.48.2   k8s-node2
myweb2-xdtrp   1/1       Running             0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-7m76h    1/1       Running   0          14s       172.16.10.2   k8s-node1
myweb-kzq8c    1/1       Running   0          4s        172.16.48.4   k8s-node2
myweb-mnf7x    1/1       Running   0          24s       172.16.48.2   k8s-node2
myweb2-xdtrp   1/1       Running   0          30m       172.16.48.3   k8s-node2
[root@k8s-master ~]# kubectl get pods -o wide
NAME          READY     STATUS    RESTARTS   AGE       IP            NODE
myweb-7m76h   1/1       Running   0          24s       172.16.10.2   k8s-node1
myweb-kzq8c   1/1       Running   0          14s       172.16.48.4   k8s-node2
myweb-mnf7x   1/1       Running   0          34s       172.16.48.2   k8s-node2
原文地址:https://www.cnblogs.com/luoahong/p/10300314.html