写点什么

使用 kubectl-rabbitmq 部署和运维 K8S 上的 RabbitMQ 集群

用户头像
郭旭东
关注
发布于: 2021 年 01 月 15 日
使用 kubectl-rabbitmq 部署和运维 K8S 上的 RabbitMQ 集群

前言


最近接到一个在 K8S 中部署一个 RabbitMQ 集群的任务,既然是部署在 K8S 集群中,首选的当然是 RabbitMQ Operator 了。不过在浏览官方文档时,意外的官方也有开发一个 kubectl-rabbitmq 的插件来帮助部署和运维 RabbitMQ Operator,在试用后发现体验意外的不错。那么本文我们就使用 kubectl-rabbitmq 来部署一个 RabbitMQ 集群吧!


插件安装


安装插件前需要安装 krew,也就是 kubectl 的插件管理工具,krew 的安装这里就不做详细说明了。


& kubectl krew install rabbitmq
复制代码


安装完成后就可以使用 kubectl rabbitmq 来部署和管理 RabbitMQ 集群了。


安装 RabbitMQ Operator


使用 kubectl-rabbitmq 安装 RabbitMQ Operator 非常简单,只需一行命令:


$ kubectl rabbitmq install-cluster-operatornamespace/rabbitmq-system createdcustomresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com createdserviceaccount/rabbitmq-cluster-operator createdrole.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role createdclusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role createdrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding createdclusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding createddeployment.apps/rabbitmq-cluster-operator created
复制代码


之后就可以看到 rabbitmq-cluster-operator 已经不再在 namespace: rabbitmq-system 中了:


$ kubectl get pod -n rabbitmq-systemNAME                                         READY   STATUS    RESTARTS   AGErabbitmq-cluster-operator-7bbbb8d559-k8zwm   1/1     Running   0          35m
复制代码


创建 RabbitMQ 集群


创建 RabbitMQ 集群同样简单,也是一行命令:


$ kubectl rabbitmq create <rabbitmq-cluster-name> --replicas 1 --service ClusterIP --image rabbitmq:3.8.9-management
复制代码


这里除了 <rabbitmq-cluster-name> 以外,其余参数均为可选项,内容为 RabbitMQ Operator 的 CR 文件。此处的原理也比较简单,只是生成了一份 CR 配置。更多参数请参考官方文档


$ kubectl get RabbitmqClusterNAME            AGE   STATUStest-rabbitmq   54s
复制代码


注意:请确保你集群有可用的 StorageClass,因为默认情况下 RabbitMQ Operator 创建的 RabbitMQ 集群会为每个实例使用 StorageClass 分配一个 10G 的 PVC


查看集群中所有 RabbitMQ


可以使用 list 命令查看集群中所有使用 RabbitMQ Operator 创建的 RabbitMQ 集群:


$ kubectl rabbitmq listNAME            AGE   STATUStest-rabbitmq   10m
复制代码


查看指定 RabbitMQ 的所有资源


使用 get 命令可以轻松查看指定 RabbitMQ 集群的全部资源:


$ kubectl rabbitmq get test-rabbitmqNAME                         READY   STATUS    RESTARTS   AGEpod/test-rabbitmq-server-0   1/1     Running   0          11m
NAME DATA AGEconfigmap/test-rabbitmq-plugins-conf 1 11mconfigmap/test-rabbitmq-server-conf 2 11m
NAME READY AGEstatefulset.apps/test-rabbitmq-server 1/1 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/test-rabbitmq ClusterIP 10.96.84.122 <none> 15672/TCP,5672/TCP 11mservice/test-rabbitmq-nodes ClusterIP None <none> 4369/TCP,25672/TCP 11m
NAME TYPE DATA AGEsecret/test-rabbitmq-default-user Opaque 3 11msecret/test-rabbitmq-erlang-cookie Opaque 1 11m
复制代码


打开 RabbitMQ UI


一般情况下,我们访问 ClusterIP 类型的 svc 都要使用到 pord-forward 的方式,kubectl-rabbitmq 则封装了该方法,使用 manage 命令即可马上弹出 UI 界面:


$ kubectl rabbitmq manage test-rabbitmqForwarding from 127.0.0.1:15672 -> 15672Forwarding from [::1]:15672 -> 15672Handling connection for 15672Handling connection for 15672
复制代码


获取默认用户


既然已经可以访问 UI 界面了,那么下一步肯定是获取默认用户名/密码,使用 secrets 命令即可:


$ kubectl rabbitmq secrets test-rabbitmqusername: sLSVWbiixZSB_XKL6SoI9kB_Pdefe477password: zm0oV3UraiadH9E2NNot6Igq8woeEyRi
复制代码


当然也可以直接查看 secrets 资源:


# userkubectl -n NAMESPACE get secret INSTANCE-default-user -o jsonpath="{.data.username}" | base64 --decode# passkubectl -n NAMESPACE get secret INSTANCE-default-user -o jsonpath="{.data.password}" | base64 --decode
复制代码


现在就顺利登陆 UI 界面了



监控 RabbitMQ


使用 observe 可以在终端观察指定 RabbitMQ 节点的监控信息,如下命令是查看 test-rabbitmq-server-0 的监控信息:


$ kubectl rabbitmq observe test-rabbitmq 0
复制代码



验证 RabbitMQ


为了验证 RabbitMQ 是否正常运行,使用 perf-test 来进行:


$ kubectl rabbitmq perf-test test-rabbitmq --rate 100service/perf-test createdpod/perf-test created
复制代码


这里可以看到拉起了 perf-test 的 pod 和 svc,查看其日志:


$ kubectl logs -f perf-testid: test-091555-328, starting consumer #0id: test-091555-328, starting consumer #0, channel #0id: test-091555-328, starting producer #0id: test-091555-328, starting producer #0, channel #0id: test-091555-328, time: 1.000s, sent: 15259 msg/s, received: 9462 msg/s, min/median/75th/95th/99th consumer latency: 5337/140173/167205/239702/259102 µsid: test-091555-328, time: 2.000s, sent: 44288 msg/s, received: 13328 msg/s, min/median/75th/95th/99th consumer latency: 281875/625383/726050/825489/844442 µsid: test-091555-328, time: 3.000s, sent: 35377 msg/s, received: 16624 msg/s, min/median/75th/95th/99th consumer latency: 869436/1176394/1463207/1500775/1509740 µsid: test-091555-328, time: 4.001s, sent: 15490 msg/s, received: 21770 msg/s, min/median/75th/95th/99th consumer latency: 1404599/1549405/1735201/1917333/1953431 µsid: test-091555-328, time: 5.001s, sent: 17367 msg/s, received: 18243 msg/s, min/median/75th/95th/99th consumer latency: 1967969/2297884/2502092/2649344/2678139 µsid: test-091555-328, time: 6.005s, sent: 16679 msg/s, received: 17953 msg/s, min/median/75th/95th/99th consumer latency: 2484404/2998748/3165893/3294687/3326600 µsid: test-091555-328, time: 7.006s, sent: 16729 msg/s, received: 18375 msg/s, min/median/75th/95th/99th consumer latency: 2393535/2753560/2990014/3194592/3224623 µsid: test-091555-328, time: 8.006s, sent: 20648 msg/s, received: 17156 msg/s, min/median/75th/95th/99th consumer latency: 2472263/2861278/3079786/3256128/3313167 µs
复制代码


在 UI 上也可以看到监控发生了变化。



验证完成后删除 perf-test:


$ kubectl delete pod,svc perf-test
复制代码


删除 RabbitMQ 集群


完成测试后,使用 delete 即可删除 RabbitMQ 集群。


$ kubectl rabbitmq delete test-rabbitmqrabbitmqcluster.rabbitmq.com "test-rabbitmq" deleted
复制代码


总结


以上的这些功能,使用 kubectl 和 yaml 文件也可以完成同样的效果,只不过有些操作比较繁琐。kubectl rabbitmq 简化了很多操作,在实际管理和维护 RabbitMQ 集群时,是一个非常不错的工具。



发布于: 2021 年 01 月 15 日阅读数: 51
用户头像

郭旭东

关注

服务可靠无异常,节点稳定不宕机 2018.09.08 加入

柴猫双全的码农

评论

发布
暂无评论
使用 kubectl-rabbitmq 部署和运维 K8S 上的 RabbitMQ 集群