• 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
  • 相关阅读:
    DateTime.now()用法
    C#中静态类详述
    面向对象详述
    解决Github打不开问题
    git 提交代码流程 先暂存 在提交+备注 然后拉取代码获取最新的代码 然后再推送 git push
    常用
    样式重置
    Html 5优化
    理解js闭包
    css 倒计时 svg
  • 原文地址:https://www.cnblogs.com/luoahong/p/10300314.html
Copyright © 2020-2023  润新知