5分钟带你体验kubernetes RollingUpdate滚动升级镜像回滚

作者声明:本篇文章系本人依照真实部署过程原创,未经许可,谢绝转载。

上一篇文章介绍了kubernetes RollingUpdate 滚动升级,这一篇文章带你来 5分钟带你体验kubernetes RollingUpdate滚动升级镜像回滚

环境准备

本文中我用到了docker的两个镜像文件 28code/httpd:v1.0 和 28code/httpd:v2.0 ,系作者基于docker的busybox镜像做的一个docker image,主要功能是提供httpd服务并显示版本和pod信息。
启动28code/httpd:v1.0镜像时候会生成文件位于 /var/www/index.html,index.html记录了版本号V1和启动pod时候的pod名称,
启动28code/httpd:v2.0镜像时候会生成文件位于 /var/www/index.html,index.html记录了版本号V2和启动pod时候的pod名称,
以上主要用来提供展示版本变更和访问时候显示访问的哪个pod的显示效果。

kubernetes RollingUpdate 滚动升级镜像回滚

上次在master执行命令,部署docker镜像文件28code/httpd:v2.0,,镜像提供httpd服务,为3个服务。
查看pod运行情况

1
2
3
4
5
#  kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-6fd9d6f87-54xqz 1/1 Running 0 49s 10.244.1.28 node01.k8s.com <none> <none>
myapp-6fd9d6f87-7grz9 1/1 Running 0 53s 10.244.2.32 node02.k8s.com <none> <none>
myapp-6fd9d6f87-s4sqw 1/1 Running 0 51s 10.244.2.33 node02.k8s.com <none> <none>

在master节点上执行访问3个pod,看到返回信息都是V2版本

1
2
3
4
5
6
7
8
9
# curl 10.244.1.28
V2
myapp-6fd9d6f87-54xqz
# curl 10.244.2.32
V2
myapp-6fd9d6f87-7grz9
# curl 10.244.2.33
V2
myapp-6fd9d6f87-s4sqw

现在我们回退到V1版本,我们执行以下命令

1
2
# kubectl rollout undo deployment myapp
deployment.extensions/myapp rolled back

master节点上查看pod信息,看到pod正在回滚

1
2
3
4
5
6
7
8
#  kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-6fd9d6f87-54xqz 1/1 Terminating 0 21m 10.244.1.28 node01.k8s.com <none> <none>
myapp-6fd9d6f87-7grz9 1/1 Terminating 0 21m 10.244.2.32 node02.k8s.com <none> <none>
myapp-6fd9d6f87-s4sqw 1/1 Terminating 0 21m 10.244.2.33 node02.k8s.com <none> <none>
myapp-799bbcd6b4-8nz5g 1/1 Running 0 21s 10.244.1.30 node01.k8s.com <none> <none>
myapp-799bbcd6b4-jms4x 1/1 Running 0 22s 10.244.1.29 node01.k8s.com <none> <none>
myapp-799bbcd6b4-l7q6v 1/1 Running 0 19s 10.244.2.34 node02.k8s.com <none> <none>

再次master节点上查看pod信息

1
2
3
4
5
#  kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-799bbcd6b4-8nz5g 1/1 Running 0 91s 10.244.1.30 node01.k8s.com <none> <none>
myapp-799bbcd6b4-jms4x 1/1 Running 0 92s 10.244.1.29 node01.k8s.com <none> <none>
myapp-799bbcd6b4-l7q6v 1/1 Running 0 89s 10.244.2.34 node02.k8s.com <none> <none>

在master节点上执行访问3个pod,看到返回信息都是V1版本

1
2
3
4
5
6
7
8
9
# curl 10.244.1.30
V1
myapp-799bbcd6b4-8nz5g
# curl 10.244.1.29
V1
myapp-799bbcd6b4-jms4x
# curl 10.244.2.34
V1
myapp-799bbcd6b4-l7q6v

此时我们来测试kubernetes LB功能

1
2
3
4
5
查看 service
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 72m
myapp ClusterIP 10.100.210.72 <none> 80/TCP 17m

在master节点执行命令展示LB的效果,

1
2
3
4
5
6
7
8
9
10
11
12
# curl 10.100.210.72
V1
myapp-799bbcd6b4-jms4x
# curl 10.100.210.72
V1
myapp-799bbcd6b4-8nz5g
# curl 10.100.210.72
V1
myapp-799bbcd6b4-l7q6v
# curl 10.100.210.72
V1
myapp-799bbcd6b4-jms4x

可以看到访问服务地址10.100.210.72后,分别均匀的访问到3个pod上的httpd服务,版本已经回退变成V1版本。

以上是kubernetes RollingUpdate 滚动升级 整个过程