简介
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等。
执行安装
kubectl apply -f cluster-operator.yml
输出信息:
namespace/rabbitmq-system created
customresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com created
serviceaccount/rabbitmq-cluster-operator created
role.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role created
clusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role created
rolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding created
deployment.apps/rabbitmq-cluster-operator created
使用
MQ实例配置
新建 definition.yaml文件,进行如下配置,更多配置详情见官方文档。
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
name: definition #服务名称
spec:
image: rabbitmq:3.8.9-management
replicas: 3 #副本数
service:
type: NodePort # 服务类型
persistence:
storageClassName: nfs-storage #存储类的名称
storage: 20Gi
注意:
- 副本数必须是奇数。
- 如果你的集群没有默认的StorageClass,则必须设置此属性(设置的storageClassName是Kubernetes集群里已存在的),否则,RabbitMQ Pods将不会被调度,因为它们需要持久卷。
安装MQ实例
kubectl apply -f definition.yaml
获取
kubectl get all -l app.kubernetes.io/name=definition -n rabbitmq-system
结果
NAME READY STATUS RESTARTS AGE
pod/definition-rabbitmq-server-0 1/1 Running 0 4h37m
pod/definition-rabbitmq-server-1 1/1 Running 0 4h36m
pod/definition-ra
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/definition-rabbitmq-client NodePort 10.106.222.148 <none> 5672:30094/TCP,15672:30825/TCP 4h37m
service/definition-rabbitmq-headless ClusterIP None <none> 4369/TCP,25672/TCP 4h37m
NAME READY AGE
statefulset.apps/definition-rabbitmq-server 3/3 4h37m
获取账号和密码
Way1. kubectl 命令获取
kubectl -n NAMESPACE get secret INSTANCE-rabbitmq-admin -o jsonpath="{.data.username}" | base64 --decode
- INSTANCE 是
RabbitmqCluster
的名称 - NAMESPACE 是包含
RabbitmqCluster
的Kubernetes命名空间
所以获取账号密码命令如下
kubectl -n rabbitmq-system get secret definition-rabbitmq-admin -o jsonpath="{.data.username}" | base64 --decode
kubectl -n rabbitmq-system get secret definition-rabbitmq-admin -o jsonpath="{.data.password}" | base64 --decode
命令行输出最终版本
INSTANCE=definition \
NAMESPACE=rabbitmq-system \
username=$(kubectl -n ${NAMESPACE} get secret ${INSTANCE}-rabbitmq-admin -o jsonpath="{.data.username}" | base64 --decode) \
password=$(kubectl -n ${NAMESPACE} get secret ${INSTANCE}-rabbitmq-admin -o jsonpath="{.data.password}" | base64 --decode) \
echo -e "username: ${username} \npassword: ${password}"
输出账号和密码
Way2. Kuboard 工具查看
通过Kuboard这样的Kubernetes管理工具,进入到 RabbitMQ集群的命名空间中,查看密文下的rabbitmq-admin文件。
如下图所示,可以看到设置的rabbitmq的管理员的账号和密码。
登录Web端的管理界面