5分钟带你体验kubernetes HA(High Available)高可用集群

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

上一篇文章介绍了kubernetes集群伸缩功能,这一篇文件带你来 5分钟带你体验kubernetes HA(High Available)高可用集群

环境准备

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

kubernetes HA(High Available)高可用集群

上次在master执行命令,部署docker镜像文件28code/httpd:v1.0,,镜像提供httpd服务,为3个服务

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 18m 10.244.1.25 node01.k8s.com <none> <none>
myapp-799bbcd6b4-6tqkk 1/1 Running 0 113m 10.244.2.30 node02.k8s.com <none> <none>
myapp-799bbcd6b4-p4dxz 1/1 Running 0 113m 10.244.1.24 node01.k8s.com <none> <none>

可以看到3个pod有2个pod运行在node01节点上有1个pod运行在node02节点上。
此时我们让node02断电,看看会发生什么。
在node02节点上我们执行命令,让 node02 关机

1
[root@node02 ~]# init 0

在master上检查node的情况,发现node02状态已经发生变化

1
2
3
4
5
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.k8s.com Ready master 3h3m v1.13.4
node01.k8s.com Ready <none> 176m v1.13.4
node02.k8s.com NotReady <none> 174m v1.13.4

在master上检查pod的情况(需要等待一段时间),发现运行在node02节点上pod已经被结束,运行的总pod还是3个,都运行在了node01上。

1
2
3
4
5
6
#  kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-799bbcd6b4-6697m 1/1 Running 0 40m 10.244.1.25 node01.k8s.com <none> <none>
myapp-799bbcd6b4-6tqkk 1/1 Terminating 0 135m 10.244.2.30 node02.k8s.com <none> <none>
myapp-799bbcd6b4-9cq9p 1/1 Running 0 9s 10.244.1.27 node01.k8s.com <none> <none>
myapp-799bbcd6b4-p4dxz 1/1 Running 0 135m 10.244.1.24 node01.k8s.com <none> <none>

再等待一段时间后,检测pod状态,发现只剩下3个pod,都运行在了node01上。

1
2
3
4
5
# 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名称。

此时我们来测试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
# curl 10.100.210.72
V1
myapp-799bbcd6b4-p4dxz
# curl 10.100.210.72
V1
myapp-799bbcd6b4-6697m
# curl 10.100.210.72
V1
myapp-799bbcd6b4-9cq9p

可以看到访问服务地址10.100.210.72后,分别均匀的访问到3个pod上的httpd服务

以上是kubernetes HA(High Available)高可用集群整个过程