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

时间: 2024-10-04 16:06:30

kubernetes云平台管理实战: 滚动升级秒级回滚(六)的相关文章

kubernetes云平台管理实战: 高级资源deployment-滚动升级(八)

一.通过文件创建deployment 1.创建deployment文件 [root@k8s-master ~]# cat nginx_deploy.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx im

kubernetes云平台管理实战:deployment通过标签管理pod(十)

一.kubectl run命令拓展 1.RC创建 [root@k8s-master ~]# kubectl run web --generator=run/v1 --image=10.0.128.0:5000/nginx:1.13 --replicas=3 replicationcontroller "web" created 2.deployment创建 [root@k8s-master ~]# kubectl run web --image=10.0.128.0:5000/ngin

kubernetes云平台管理实战:HPA水平自动伸缩(十一)

一.自动伸缩 1.启动 [root@k8s-master ~]# kubectl autoscale deployment nginx-deployment --max=8 --min=2 --cpu-percent=80 deployment "nginx-deployment" autoscaled 2.查看创建 [root@k8s-master ~]# kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE de

kubernetes云平台管理实战:如何创建deployment更好(九)

一.文件创建带--record 1.文件 [root@k8s-master ~]# cat nginx_deploy.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: 10.0.128.0

kubernetes云平台管理实战: 自动加载到负载均衡(七)

一.如何实现外界能访问 外界访问不了 1.启动svc [root@k8s-master ~]# cat myweb-svc.yaml apiVersion: v1 kind: Service metadata: name: nginx spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: app: myweb [root@k8s-master ~]# kubectl create -f myweb-svc.yaml se

kubernetes云平台管理实战: 服务发现和负载均衡(五)

一.rc控制器常用命令 1.rc控制器信息查看 [root@k8s-master ~]# kubectl get replicationcontroller NAME DESIRED CURRENT READY AGE myweb 3 3 3 3m [root@k8s-master ~]# kubectl get rc NAME DESIRED CURRENT READY AGE myweb 3 3 3 5m 2.删除rc [root@k8s-master ~]# kubectl delete

Triton - 创新的开源云平台管理软件

SmartOS是基于Solaris的一个开源的操作系统,囊括了ZFS, Zone, Crossbow, DTrace, KVM, Bhyve等卓越的技术; Triton是基于SmartOS的一套开源免费的云平台管理软件,媲美openstack的所有主要功能模块,安装.升级.管理却比openstack简单很多.所有节点是从USB盘或者网络启动,系统不需要安装到硬盘,所以没有普通OS中的安装和打补丁的概念,系统升级只是需要从新的U盘启动就行.每一个系统核心服务都是通过一个image实现的,通过下载新

openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案

tuning for Data Transfer hosts connected at speeds of 1Gbps or higher <一.本次OpenStack系统调试简单过程简单记录> 1,dmesg 日志,丢包问题关键原因定位; [101231.909932] net_ratelimit: 85 callbacks suppressed 2,ethstatus -i p5p1 实时追踪网口TX/RX状态; 3,具体内核等相关参数调整 # recommended default co

腾讯云容器服务的滚动升级使用简介

版权声明:本文由腾讯云容器服务 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/216046001482723263 来源:腾云阁 https://www.qcloud.com/community 作者介绍:于广游 腾讯云后台开发工程师 欢迎加入腾讯云容器服务QQ交流群434653499  1.什么是滚动升级 滚动升级是一种多副本服务的升级方式,其特点是能够保证升级过程中服务不中断,对外界无感知.其原理大致为循环的执行以