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
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。