概述
之前文章讲述了如何通过docker命令来手动创建一个rabbitmq集群;可以通过其了解rabbitmq构建的步骤和基本原理;
随着Kubernetes的逐渐流行,如何通过Kubernetes的方式来部署一个rabbitmq集群呢?下面讲述其步骤。
创建rabbitmq集群
这里我们使用的docker image有一个:
- rabbitmq:3.7-rc-management
创建rabbitmq集群的yaml文件
下面yaml中涉及的Kubernetes组件有:
Service
- 提供http服务的service
- 提供StatfulSet的headless service
StatefulSet
有状态pods的集合,真正提供rabbitmq的服务
1 | root@kmaster:~/yangguanjun# cat rabbitmq.yaml |
通过Pod的postStart
来执行命令,把后面的两个Pod加入rabbitmq集群。
Pod的生命周期里有两个个hook部分:PostStart,PreStop
创建不同的rabbitmq集群,需要把yaml文件的很多处rabbitmq关键字替换掉。。。
也可以通过参数来生成yaml文件
创建 rabbitmq 集群
通过kubectl
命令,依据上章节的rabbitmq.yaml
文件创建rabbitmq集群;
1 | root@kmaster:~/yangguanjun# kubectl create -f rabbitmq.yaml |
检查rabbitmq 集群
检查刚才创建的rabbitmq集群是否正常?出于什么状态?可以使用如下命令:
1 | root@kmaster:~/yangguanjun# kubectl get service |
rabbitmq集群的域名
上面我们通过Statefulset
来创建的rabbitmq集群,但是我们并没有在镜像中指定几个Pods之间如何访问,它们之间的解析是通过Headless service
提供的,可以通过下面命令获取Pod里的域名解析:
1 | root@rabbitmq-0:/# cat /etc/resolv.conf |
访问rabbitmq集群
创建好rabbitmq集群后,如何访问它呢?
如之前我们介绍使用的image为:rabbitmq:3.7-rc-management
,它包含了rabbitmq的management组件,另外我们也创建了rabbitmq集群对应的service服务,提供了基于http端口的访问,通过下面命令获取其信息:
1 | root@kmaster:~/yangguanjun# kubectl describe service/rabbitmq-management |
则可以通过http指定IP和Port直接访问:http://10.96.158.11:15672
当然这里的IP是内网IP,若公司内外不能访问的话,可以绑定外网IP后再通过公网+port访问。
参考文档
https://blog.csdn.net/zhaohuabing/article/details/78673329
https://wesmorgan.svbtle.com/rabbitmq-cluster-on-kubernetes-with-statefulsets
https://github.com/xarg/rabbitmq-statefulset