简介

RabbitMQ Cluster Kubernetes Operator 是一个开源的 Kubernetes Operator ,提供了一种一致且简便的方法,将RabbitMQ集群部署到Kubernetes并运行它们,包括”第二天”(连续)操作,它可以自动的执行Kubernetes上运行的RabbitMQ集群的配置并对集群进行管理和操作。

主要功能

  • 配置单节点和多节点RabbitMQ集群
  • 只要已部署的群集的实际状态与预期状态不匹配,就会自动对帐
  • 使用Prometheus和Grafana监视RabbitMQ集群

    安装限制

  • Kubernetes 1.16+

  • RabbitMQ Docker镜像版本 3.8.8+

安装

下载配置文件

最新的operator文件:cluster-operator.yml ,下载到集群服务器上,可按照我们自己的需求修改相关配置,如namespace等。

执行安装

  1. kubectl apply -f cluster-operator.yml

输出信息:

  1. namespace/rabbitmq-system created
  2. customresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com created
  3. serviceaccount/rabbitmq-cluster-operator created
  4. role.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role created
  5. clusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role created
  6. rolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding created
  7. clusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding created
  8. deployment.apps/rabbitmq-cluster-operator created

使用

MQ实例配置

新建 definition.yaml文件,进行如下配置,更多配置详情见官方文档

  1. apiVersion: rabbitmq.com/v1beta1
  2. kind: RabbitmqCluster
  3. metadata:
  4. name: definition #服务名称
  5. spec:
  6. image: rabbitmq:3.8.9-management
  7. replicas: 3 #副本数
  8. service:
  9. type: NodePort # 服务类型
  10. persistence:
  11. storageClassName: nfs-storage #存储类的名称
  12. storage: 20Gi

注意:

  • 副本数必须是奇数
  • 如果你的集群没有默认的StorageClass,则必须设置此属性(设置的storageClassName是Kubernetes集群里已存在的),否则,RabbitMQ Pods将不会被调度,因为它们需要持久卷。

    安装MQ实例

    1. kubectl apply -f definition.yaml

获取

  1. kubectl get all -l app.kubernetes.io/name=definition -n rabbitmq-system

结果

  1. NAME READY STATUS RESTARTS AGE
  2. pod/definition-rabbitmq-server-0 1/1 Running 0 4h37m
  3. pod/definition-rabbitmq-server-1 1/1 Running 0 4h36m
  4. pod/definition-ra
  5. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  6. service/definition-rabbitmq-client NodePort 10.106.222.148 <none> 5672:30094/TCP,15672:30825/TCP 4h37m
  7. service/definition-rabbitmq-headless ClusterIP None <none> 4369/TCP,25672/TCP 4h37m
  8. NAME READY AGE
  9. statefulset.apps/definition-rabbitmq-server 3/3 4h37m

获取账号和密码

Way1. kubectl 命令获取

  1. kubectl -n NAMESPACE get secret INSTANCE-rabbitmq-admin -o jsonpath="{.data.username}" | base64 --decode
  • INSTANCE RabbitmqCluster 的名称
  • NAMESPACE 是包含 RabbitmqCluster 的Kubernetes命名空间

所以获取账号密码命令如下

  1. kubectl -n rabbitmq-system get secret definition-rabbitmq-admin -o jsonpath="{.data.username}" | base64 --decode
  2. kubectl -n rabbitmq-system get secret definition-rabbitmq-admin -o jsonpath="{.data.password}" | base64 --decode

命令行输出最终版本

  1. INSTANCE=definition \
  2. NAMESPACE=rabbitmq-system \
  3. username=$(kubectl -n ${NAMESPACE} get secret ${INSTANCE}-rabbitmq-admin -o jsonpath="{.data.username}" | base64 --decode) \
  4. password=$(kubectl -n ${NAMESPACE} get secret ${INSTANCE}-rabbitmq-admin -o jsonpath="{.data.password}" | base64 --decode) \
  5. echo -e "username: ${username} \npassword: ${password}"

输出账号和密码
image.png

Way2. Kuboard 工具查看

通过Kuboard这样的Kubernetes管理工具,进入到 RabbitMQ集群的命名空间中,查看密文下的rabbitmq-admin文件。
image.png
如下图所示,可以看到设置的rabbitmq的管理员的账号和密码。
image.png

登录Web端的管理界面

image.png

相关资料