zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/luoahong/p/10300314.html
Copyright © 2011-2022 走看看