RabbitMQ é um software de agente de mensagens de código aberto (também conhecido como middleware orientado a mensagens) que implementa o protocolo AMQP (Advanced Message Queuing Protocol)
-
Escalabilidade: serviços de cluster
-
Persistência de mensagem: persista mensagens da memória para o disco rígido e, em seguida, carregue-as do disco rígido para a memória
Em nosso trabalho, costumamos usar Rabbitmq, que tem um único nó e um cluster.
Instale o RabbitMQ por meio deste Kubernetes e descubra automaticamente os clusters registrados inserindo [rabbitmq_management, rabbitmq_peer_discovery_k8s]:
RabbitMQ é implantado por meio de StatefulSet e pode ser acessado por meio de nomes de domínio para fácil processamento
(1) Meio Ambiente
Necessita do cluster Kubernetes
Baixe o arquivo de implantação
下载地址:https://github.com/dotbalo/k8s/tree/master/k8s-rabbitmq-cluster
(2) Crie um namespace
kubectl create ns public-service
Se você não usa o serviço público, precisa alterar o serviço público de todos os arquivos yaml para o seu namespace.
sed -i "s#public-service#YOUR_NAMESPACE#g" *.yaml
(3) Modifique o arquivo de configuração
在rabbitmq-configmap.yaml配置,添加这两个字段,解决密码不生效的问题
default_pass = RABBITMQ_PASS
default_user = RABBITMQ_USER
PV aqui usa nfs. O ambiente de teste, aqui eu criei manualmente, ou você pode usar um plug-in para criá-lo automaticamente e reciclá-lo.
[root@k8s-master01 k8s-rabbitmq-cluster]# cat rabbitmq-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-rmq-1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle
storageClassName: "rmq-storage-class"
nfs:
# real share directory
path: /ifs/kubernetts/rabbitmq-cluster-0
# nfs real ip
server: 192.168.0.109
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-rmq-2
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle
storageClassName: "rmq-storage-class"
nfs:
# real share directory
path: /ifs/kubernetts/rabbitmq-cluster-1
# nfs real ip
server: 192.168.0.109
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-rmq-3
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle
storageClassName: "rmq-storage-class"
nfs:
# real share directory
path: /ifs/kubernetts/rabbitmq-cluster-2
# nfs real ip
server: 192.168.0.109
(4) Crie um cluster
[root@k8s-master01 k8s-rabbitmq-cluster]# kubectl apply -f .
statefulset.apps/rmq-cluster created
configmap/rmq-cluster-config created
persistentvolume/pv-rmq-1 created
persistentvolume/pv-rmq-2 created
persistentvolume/pv-rmq-3 created
serviceaccount/rmq-cluster created
role.rbac.authorization.k8s.io/rmq-cluster created
rolebinding.rbac.authorization.k8s.io/rmq-cluster created
secret/rmq-cluster-secret created
service/rmq-cluster created
service/rmq-cluster-balancer created
Verifique o log do contêiner e mostre que isso é normal
kubectl logs -f rmq-cluster-0 -n public-service
'/etc/rabbitmq/rabbitmq.conf' -> '/var/lib/rabbitmq/rabbitmq.conf'
2021-03-11 02:24:03.469 [info] <0.9.0> Feature flags: list of feature flags found:
2021-03-11 02:24:03.469 [info] <0.9.0> Feature flags: feature flag states written to
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
2021-03-11 02:24:04.273 [info] <0.692.0> Statistics database started.
2021-03-11 02:24:04.274 [info] <0.691.0> Starting worker pool 'management_worker_pool' with 3 processes in it
completed with 5 plugins.
2021-03-11 02:24:04.411 [info] <0.9.0> Server startup complete; 5 plugins started.
* rabbitmq_management
* rabbitmq_management_agent
* rabbitmq_web_dispatch
* rabbitmq_peer_discovery_k8s
* rabbitmq_peer_discovery_common
2021-03-11 02:24:23.135 [info] <0.434.0> node 'rabbit@rmq-cluster-1.rmq-cluster.public-service.svc.cluster.local' up
2021-03-11 02:24:23.904 [info] <0.434.0> rabbit on node 'rabbit@rmq-cluster-1.rmq-cluster.public-service.svc.cluster.local' up
2021-03-11 02:24:44.524 [info] <0.434.0> node 'rabbit@rmq-cluster-2.rmq-cluster.public-service.svc.cluster.local' up
2021-03-11 02:24:45.477 [info] <0.434.0> rabbit on node 'rabbit@rmq-cluster-2.rmq-cluster.public-service.svc.cluster.local' up
Crie recursos da seguinte forma
[root@k8s-master01 ~]# kubectl get pod,sts,svc,ep,pv,pvc -n public-service
NAME READY STATUS RESTARTS AGE
pod/rmq-cluster-0 1/1 Running 0 8m10s
pod/rmq-cluster-1 1/1 Running 0 7m34s
pod/rmq-cluster-2 1/1 Running 0 7m18s
NAME READY AGE
statefulset.apps/rmq-cluster 3/3 8m11s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rmq-cluster ClusterIP None <none> 5672/TCP 8m11s
service/rmq-cluster-balancer NodePort 10.96.58.102 <none> 15672:31824/TCP,5672:31993/TCP 8m11s
NAME ENDPOINTS AGE
endpoints/rmq-cluster 10.244.32.129:5672,10.244.58.225:5672,10.244.85.246:5672 8m11s
endpoints/rmq-cluster-balancer 10.244.32.129:5672,10.244.58.225:5672,10.244.85.246:5672 + 3 more... 8m11s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pv-rmq-1 1Gi RWX Recycle Bound public-service/rabbitmq-storage-rmq-cluster-2 rmq-storage-class 8m11s
persistentvolume/pv-rmq-2 1Gi RWX Recycle Bound public-service/rabbitmq-storage-rmq-cluster-1 rmq-storage-class 8m11s
persistentvolume/pv-rmq-3 1Gi RWX Recycle Bound public-service/rabbitmq-storage-rmq-cluster-0 rmq-storage-class 8m11s
persistentvolume/pv0001 2Gi RWO Recycle Bound default/test-pvc2 slow 9d
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/rabbitmq-storage-rmq-cluster-0 Bound pv-rmq-3 1Gi RWX rmq-storage-class 8m11s
persistentvolumeclaim/rabbitmq-storage-rmq-cluster-1 Bound pv-rmq-2 1Gi RWX rmq-storage-class 7m34s
persistentvolumeclaim/rabbitmq-storage-rmq-cluster-2 Bound pv-rmq-1 1Gi RWX rmq-storage-class 7m18s
[root@k8s-master01 ~]#
(5) Verifique o cluster
Pode ser exposto por meio da porta nodeport de svc ou ingresso para acessar a interface de visualização rabbitmq
default_user = RABBITMQ_USER #账号
default_pass = RABBITMQ_PASS #密码
(6) Expansão e redução do cluster
Expansão, se for utilizado PV, recomenda-se verificar se PV é suficiente, caso contrário o status estará sempre pendente
kubectl scale statefulset -n public-service --replicas=4 rmq-cluster
--replicas=4 改这个值,就可以用来扩容和缩容
https://github.com/dotbalo/k8s/tree/master/k8s-rabbitmq-cluster