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

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

上一篇文章介绍了kubernetes HA(High Available)高可用集群,这一篇文章带你来 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:v1.0,,镜像提供httpd服务,为3个服务。
上次我们把node02节点关闭后,这次把node02节点启动起来,并且执行命令启动node02节点上的kubelet

1
[root@node02 ~]# systemctl start kubelet

在master上执行命令

1
2
3
4
5
6
查看目前集群pod运行情况
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-799bbcd6b4-6697m 1/1 Running 0 47m 10.244.1.25 node01.k8s.com <none> <none>
myapp-799bbcd6b4-9cq9p 1/1 Running 0 7m29s 10.244.1.27 node01.k8s.com <none> <none>
myapp-799bbcd6b4-p4dxz 1/1 Running 0 142m 10.244.1.24 node01.k8s.com <none> <none>

在master节点分别访问3个pod节点查看httpd服务信息

1
2
3
4
5
6
7
8
9
# curl 10.244.1.25
V1
myapp-799bbcd6b4-6697m
# curl 10.244.1.27
V1
myapp-799bbcd6b4-9cq9p
# curl 10.244.1.24
V1
myapp-799bbcd6b4-p4dxz

可以看到3个pod节点正常访问(V1代表版本信息,myapp-XXXXXX 是代表pods名称),显示了版本号和pod名称。我们所有pod都运行了28code/httpd:v1.0的image,
现在我需要把pod都升级到28code/httpd:v2.0,我们在master节点执行以下命令

1
2
# kubectl set image deployment myapp  myapp=28code/httpd:v2.0
deployment.extensions/myapp image updated

再次查看pod运行情况,和上边信息对比发现pod已经都变成新的pod,并且之前都运行在node01上的3个pod,现在已经变成1个pod运行在node01上,2个pod运行在node02上。

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

此时我们来测试kubernetes LB功能

1
2
3
4
5
6

查看 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
V2
myapp-6fd9d6f87-7grz9
# curl 10.100.210.72
V2
myapp-6fd9d6f87-s4sqw
# curl 10.100.210.72
V2
myapp-6fd9d6f87-54xqz
# curl 10.100.210.72
V2
myapp-6fd9d6f87-s4sqw

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

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