一、nginx保证有两个版本
1、查看当前容器运行nginx版本
[root@k8s-master ~]# kubectl get pod ?-o wideNAME ?????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-7w38b ??1/1 ??????Running ??0 ?????????4h ???????172.16.10.4 ??k8s-node1myweb-btflm ??1/1 ??????Running ??0 ?????????4h ???????172.16.48.4 ??k8s-node2myweb-cbt47 ??1/1 ??????Running ??0 ?????????4h ???????172.16.48.3 ??k8s-node2myweb-rt3b9 ??1/1 ??????Running ??0 ?????????4h ???????172.16.10.3 ??k8s-node1nginx ????????1/1 ??????Running ??0 ?????????6h ???????172.16.10.2 ??k8s-node1nginx2 ???????1/1 ??????Running ??0 ?????????5h ???????172.16.48.2 ??k8s-node2[root@k8s-master ~]# curl -I 172.16.10.2HTTP/1.1 200 OKServer: nginx/1.15.8Date: Sun, 20 Jan 2019 11:31:17 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Tue, 25 Dec 2018 09:56:47 GMTConnection: keep-aliveETag: "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.13The 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.15The 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 imagesREPOSITORY ?????????????????????????????TAG ????????????????IMAGE ID ???????????CREATED ????????????SIZEdocker.io/registry ?????????????????????latest ?????????????33fbbf4a24e5 ???????2 weeks ago ????????24.17 MB10.0.128.0:5000/busybox ????????????????latest ?????????????3a093384ac30 ???????2 weeks ago ????????1.199 MBdocker.io/busybox ??????????????????????latest ?????????????3a093384ac30 ???????2 weeks ago ????????1.199 MB10.0.128.0:5000/nginx ??????????????????1.15 ???????????????7042885a156a ???????3 weeks ago ????????109.2 MB10.0.128.0:5000/nginx ??????????????????latest ?????????????7042885a156a ???????3 weeks ago ????????109.2 MBdocker.io/nginx ????????????????????????latest ?????????????7042885a156a ???????3 weeks ago ????????109.2 MB10.0.128.0:5000/nginx ??????????????????1.13 ???????????????ae513a47849c ???????8 months ago ???????108.9 MBdocker.io/nginx ????????????????????????1.13 ???????????????ae513a47849c ???????8 months ago ???????108.9 MB10.0.128.0:5000/pod-infrastructure ?????latest ?????????????34d3450d733b ???????24 months ago ??????205 MBdocker.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 allNAME ??????DESIRED ??CURRENT ??READY ????AGErc/myweb ??5 ????????5 ????????5 ????????5hNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-7w38b ??1/1 ??????Running ??0 ?????????5hpo/myweb-btflm ??1/1 ??????Running ??0 ?????????5hpo/myweb-cbt47 ??1/1 ??????Running ??0 ?????????5hpo/myweb-rt3b9 ??1/1 ??????Running ??0 ?????????5hpo/nginx ????????1/1 ??????Running ??0 ?????????6hpo/nginx2 ???????1/1 ??????Running ??0 ?????????5h[root@k8s-master ~]# kubectl delete pod nginxpod "nginx" deleted
2、创建升级rc
[root@k8s-master ~]# cat myweb-rcv1.yml apiVersion: v1kind: ReplicationControllermetadata: ?name: mywebspec: ?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: v1kind: ReplicationControllermetadata: ?name: myweb2spec: ?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=20sCreated myweb2Scaling 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 1Scaling myweb down to 2Scaling myweb2 up to 2Scaling myweb down to 1Scaling myweb2 up to 3Scaling myweb down to 0Update succeeded. Deleting mywebreplicationcontroller "myweb" rolling updated to "myweb2"
4、滚动升级过程
[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???2 ????????2 ????????2 ????????20mrc/myweb2 ??2 ????????2 ????????2 ????????25sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb-hzxcp ???1/1 ??????Running ??0 ?????????20mpo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????5spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????25s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???2 ????????2 ????????2 ????????20mrc/myweb2 ??2 ????????2 ????????2 ????????28sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb-hzxcp ???1/1 ??????Running ??0 ?????????20mpo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????8spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????28s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???2 ????????2 ????????2 ????????20mrc/myweb2 ??2 ????????2 ????????2 ????????30sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb-hzxcp ???1/1 ??????Running ??0 ?????????20mpo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????10spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???1 ????????1 ????????1 ????????20mrc/myweb2 ??2 ????????2 ????????2 ????????40sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???????RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??????0 ?????????20mpo/myweb-hzxcp ???1/1 ??????Terminating ??0 ?????????20mpo/myweb2-khl9t ??0/1 ??????Pending ??????0 ?????????0spo/myweb2-rhgq3 ??1/1 ??????Running ??????0 ?????????20spo/myweb2-xdtrp ??1/1 ??????Running ??????0 ?????????41s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???1 ????????1 ????????1 ????????20mrc/myweb2 ??3 ????????3 ????????3 ????????46sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb2-khl9t ??1/1 ??????Running ??0 ?????????6spo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????26spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????46s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???1 ????????1 ????????1 ????????20mrc/myweb2 ??3 ????????3 ????????3 ????????50sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb2-khl9t ??1/1 ??????Running ??0 ?????????10spo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????30spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????50s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???1 ????????1 ????????1 ????????20mrc/myweb2 ??3 ????????3 ????????3 ????????53sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb2-khl9t ??1/1 ??????Running ??0 ?????????13spo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????33spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????53s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???1 ????????1 ????????1 ????????20mrc/myweb2 ??3 ????????3 ????????3 ????????57sNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb-3hg1r ???1/1 ??????Running ??0 ?????????20mpo/myweb2-khl9t ??1/1 ??????Running ??0 ?????????17spo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????37spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????57s[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb ???0 ????????0 ????????0 ????????21mrc/myweb2 ??3 ????????3 ????????3 ????????1mNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb2-khl9t ??1/1 ??????Running ??0 ?????????23spo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????43spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????1m[root@k8s-master ~]# kubectl get allNAME ???????DESIRED ??CURRENT ??READY ????AGErc/myweb2 ??3 ????????3 ????????3 ????????1mNAME ????????????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ??AGEsvc/kubernetes ??10.254.0.1 ??<none> ???????443/TCP ??21hNAME ?????????????READY ????STATUS ???RESTARTS ??AGEpo/myweb2-khl9t ??1/1 ??????Running ??0 ?????????29spo/myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????49spo/myweb2-xdtrp ??1/1 ??????Running ??0 ?????????1m
三、秒级回滚
1、执行回滚
[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb2-khl9t ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.2 ??k8s-node1myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.3 ??k8s-node1myweb2-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=10sCreated mywebScaling 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 1Scaling myweb2 down to 2Scaling myweb up to 2Scaling myweb2 down to 1Scaling myweb up to 3Scaling myweb2 down to 0Update succeeded. Deleting myweb2replicationcontroller "myweb2" rolling updated to "myweb"
2、回滚过程
[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb2-khl9t ??1/1 ??????Running ??0 ?????????20m ??????172.16.10.2 ??k8s-node1myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????20m ??????172.16.10.3 ??k8s-node1myweb2-xdtrp ??1/1 ??????Running ??0 ?????????20m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-mnf7x ???1/1 ??????Running ??0 ?????????4s ???????172.16.48.2 ??k8s-node2myweb2-khl9t ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.2 ??k8s-node1myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.3 ??k8s-node1myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-mnf7x ???1/1 ??????Running ??0 ?????????6s ???????172.16.48.2 ??k8s-node2myweb2-khl9t ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.2 ??k8s-node1myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.3 ??k8s-node1myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-mnf7x ???1/1 ??????Running ??0 ?????????7s ???????172.16.48.2 ??k8s-node2myweb2-khl9t ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.2 ??k8s-node1myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.3 ??k8s-node1myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-7m76h ???1/1 ??????Running ??0 ?????????2s ???????172.16.10.2 ??k8s-node1myweb-mnf7x ???1/1 ??????Running ??0 ?????????12s ??????172.16.48.2 ??k8s-node2myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????29m ??????172.16.10.3 ??k8s-node1myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-7m76h ???1/1 ??????Running ??0 ?????????5s ???????172.16.10.2 ??k8s-node1myweb-mnf7x ???1/1 ??????Running ??0 ?????????15s ??????172.16.48.2 ??k8s-node2myweb2-rhgq3 ??1/1 ??????Running ??0 ?????????30m ??????172.16.10.3 ??k8s-node1myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ?????????????RESTARTS ??AGE ??????IP ???????????NODEmyweb-7m76h ???1/1 ??????Running ????????????0 ?????????11s ??????172.16.10.2 ??k8s-node1myweb-kzq8c ???0/1 ??????ContainerCreating ??0 ?????????1s ???????<none> ???????k8s-node2myweb-mnf7x ???1/1 ??????Running ????????????0 ?????????21s ??????172.16.48.2 ??k8s-node2myweb2-xdtrp ??1/1 ??????Running ????????????0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ??????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-7m76h ???1/1 ??????Running ??0 ?????????14s ??????172.16.10.2 ??k8s-node1myweb-kzq8c ???1/1 ??????Running ??0 ?????????4s ???????172.16.48.4 ??k8s-node2myweb-mnf7x ???1/1 ??????Running ??0 ?????????24s ??????172.16.48.2 ??k8s-node2myweb2-xdtrp ??1/1 ??????Running ??0 ?????????30m ??????172.16.48.3 ??k8s-node2[root@k8s-master ~]# kubectl get pods -o wideNAME ?????????READY ????STATUS ???RESTARTS ??AGE ??????IP ???????????NODEmyweb-7m76h ??1/1 ??????Running ??0 ?????????24s ??????172.16.10.2 ??k8s-node1myweb-kzq8c ??1/1 ??????Running ??0 ?????????14s ??????172.16.48.4 ??k8s-node2myweb-mnf7x ??1/1 ??????Running ??0 ?????????34s ??????172.16.48.2 ??k8s-node2
kubernetes云平台管理实战: 滚动升级秒级回滚(六)
原文地址:https://www.cnblogs.com/luoahong/p/10300314.html