K8S安裝rabbitmq集群


踩了無數的坑,終於弄出比較准確簡便的部署方式了

目前我這套部署方式參考的是  github:https://github.com/rabbitmq/rabbitmq-peer-discovery-k8s

然后K8S使用的鏡像是rabbitmq:3.8,然后我這邊所有的操作都是基於default空間。還有就是我粘貼上來的yaml,你們那邊復制過去 可能有些不是很整齊,自己注意調試調試

第一步:創建rabbitmq的集群訪問角色

apiVersion: v1
kind: ServiceAccount #集群訪問apiserver的憑證
metadata:
name: rabbitmq
---
kind: Role #創建sa角色
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: rabbitmq
rules:
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
---
kind: RoleBinding #將角色綁定
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: rabbitmq
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: rabbitmq
subjects:
- kind: ServiceAccount
name: rabbitmq

-----------------------------------------------------------------------------------------------------------------

第二步:掛載rabbitmq的configmap

apiVersion: v1
kind: ConfigMap
metadata:
name: rabbitmq-config    #配置文件名字,可自己修改
data:
enabled_plugins: |
[rabbitmq_management,rabbitmq_peer_discovery_k8s].   ###這里是啟動的插件,特別是第二個插件,rabbitmq低版本是沒有的,啟動就會報找不到

rabbitmq.conf: |
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
cluster_formation.k8s.address_type = hostname
cluster_formation.node_cleanup.interval = 30
cluster_formation.node_cleanup.only_log_warning = true
cluster_partition_handling = autoheal
queue_master_locator=min-masters
loopback_users.guest = false

 

-----------------------------------------------------------------------------------------------------------------

第三步:創建rabbitmq使用的pv-pvc

apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv #創建的pv名稱可創建多個.
spec:
capacity:
storage: 6Gi #創建的pv容量為1G
accessModes:
- ReadWriteMany #pv的訪問模式:可讀可寫可掛在多個節點
persistentVolumeReclaimPolicy: Retain #回收策略,永不回收
nfs: #創建的pv數據來源
path: /nfs/mq #數據源目錄
server: 192.168.0.175 #數據源ip
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 6Gi

 

-----------------------------------------------------------------------------------------------------------------

第四步:創建service

apiVersion: v1
kind: Service
metadata:
name: rabbitmq-management
labels:
app: rabbitmq
spec:
ports:
- port: 15672
name: http
nodePort: 32001 #集群外訪問rabbitmq管理web界面,http://nodeip:32001,自己想要什么端口自己修改
- port: 5672
name: amqp
nodePort: 32002
selector:
app: rabbitmq
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
labels:
app: rabbitmq
spec:
clusterIP: None
ports:
- port: 5672
name: amqp
selector:
app: rabbitmq

 

-----------------------------------------------------------------------------------------------------------------

 

最后一步創建有狀態pod

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
spec:
serviceName: rabbitmq
replicas: 3
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
imagePullSecrets:
- name: alikey                     #這里根據自己的情況,docker倉庫需要認證下載的話就配置,不需要就刪掉
serviceAccountName: rabbitmq
terminationGracePeriodSeconds: 10
containers:
- name: rabbitmq
image: rabbitmq:3.8
volumeMounts:
- name: config-volume
mountPath: /etc/rabbitmq            #配置文件
- name: nfs-volume
mountPath: /var/lib/rabbitmq/      #數據持久化
ports:
- name: http
protocol: TCP
containerPort: 15672
- name: amqp
protocol: TCP
containerPort: 5672
livenessProbe:
exec:
command: ["rabbitmq-diagnostics", "status"]               #檢活的,,,我也是復制的
initialDelaySeconds: 60
periodSeconds: 60
timeoutSeconds: 15
readinessProbe:
exec:
command: ["rabbitmq-diagnostics", "ping"]                   #檢活的,,,我也是復制的
initialDelaySeconds: 20
periodSeconds: 60
timeoutSeconds: 10
imagePullPolicy: IfNotPresent
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: RABBITMQ_USE_LONGNAME
value: "true"
- name: K8S_SERVICE_NAME
value: rabbitmq
- name: RABBITMQ_NODENAME
value: rabbit@$(MY_POD_NAME).$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE).svc.cluster.local
- name: K8S_HOSTNAME_SUFFIX
value: .$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE).svc.cluster.local
- name: RABBITMQ_ERLANG_COOKIE
value: "mycookie"                                #這里也不用管
volumes:
- name: config-volume
configMap:
name: rabbitmq-config           
items:
- key: rabbitmq.conf          #配置文件
path: rabbitmq.conf
- key: enabled_plugins
path: enabled_plugins               #這里就是我上面說的如果版本低了,,那個插件就找不到
- name: nfs-volume
persistentVolumeClaim:
claimName: rabbitmq

 

----------------------------------------------------------------------------------------

以上基本自己根據自己的情況,改改就很好搭建出mq集群了,性能方面我沒測,數據持久化倒是測試了,沒問題。然后我也參照有的教程用什么erlang.cookie的方式,然后自己打docker鏡像什么的,,,都不方面,而且各種坑都要踩踩(可能自己很菜的問題)。

然后這個集群默認賬號密碼是guest/guest ,是個admin賬號。集群搭建完后自己去圖形化界面添加個管理員,然后把這個guest干掉就OK了。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM