k8s部署rabbitmq集群的方式
一、前言
本次部署方式為setafulset的方式部署rabbitmq集群,使用svc的無(wú)頭服務(wù),本次涉及使用到的服務(wù)有setafulset、secret、configmap、service、pv、pvc、sa,在rabbitmq的官網(wǎng)中使用的是operator的方式
operator方式參考:RabbitMQ Cluster Kubernetes Operator Quickstart | RabbitMQ
二、部署
創(chuàng)建rabbitmq yaml文件存放目錄
mkdir /opt/rabbitmq && cd /opt/rabbitmq
編輯secret配置
vi secret.yaml
kind: Secret apiVersion: v1 metadata: name: rabbitmq namespace: rabbitmq type: Opaque stringData: rabbitDefaulUser: admin #設(shè)置rabbitmq集群的用戶名 rabbitDefaultPass: admin #設(shè)置rabbitmq集群的密碼 erlang.cookie: ERLANG_COOKIE #集群需要用到的cookie值,每個(gè)節(jié)點(diǎn)都需要保持一致
編輯configmap配置
vi configmap.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: rabbitmq-config
namespace: rabbitmq
data:
enabled_plugins: |
[rabbitmq_management,rabbitmq_peer_discovery_k8s].
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.k8s.hostname_suffix = .rabbitmq-headless.rabbitmq.svc.cluster.local
cluster_formation.node_cleanup.interval = 30
cluster_formation.node_cleanup.only_log_warning = true
cluster_partition_handling = autoheal
queue_master_locator=min-masters
cluster_formation.randomized_startup_delay_range.max = 2
vm_memory_high_watermark.absolute = 1GB
disk_free_limit.absolute = 2GB
loopback_users.guest = false編輯rbac配置
vi rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: rabbitmq namespace: rabbitmq --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: endpoint-reader namespace: rabbitmq rules: - apiGroups: [""] resources: ["endpoints"] verbs: ["get"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: endpoint-reader namespace: rabbitmq subjects: - kind: ServiceAccount name: rabbitmq roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: endpoint-reader
編輯service配置
vi service.yaml
kind: Service
apiVersion: v1
metadata:
name: rabbitmq-headless #該service服務(wù)為提供無(wú)頭服務(wù)
namespace: rabbitmq
spec:
clusterIP: None
publishNotReadyAddresses: true
ports:
- name: amqp
port: 5672
- name: http
port: 15672
selector:
app: rabbitmqvi service-nodeport.yaml
kind: Service
apiVersion: v1
metadata:
namespace: rabbitmq
name: rabbitmq-service
spec:
ports:
- name: http
protocol: TCP
port: 15672
nodePort: 30015 #管理web界面
- name: amqp
protocol: TCP
port: 5672
targetPort: 5672
nodePort: 30016
selector:
app: rabbitmq
type: NodePort編輯pv配置(使用該nfs路徑時(shí)一定要配置一定的寫(xiě)入權(quán)限,不然啟動(dòng)rabbitmq服務(wù)時(shí)會(huì)出現(xiàn)沒(méi)有寫(xiě)入權(quán)限而報(bào)錯(cuò))
vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv01
spec:
storageClassName: rabbitmq-pv #定義了存儲(chǔ)類(lèi)型
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /volume2/k8s-data/rabbitmq/rabbitmq-pv01
server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv02
spec:
storageClassName: rabbitmq-pv #定義了存儲(chǔ)類(lèi)型
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /volume2/k8s-data/rabbitmq/rabbitmq-pv02
server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv03
spec:
storageClassName: rabbitmq-pv #定義了存儲(chǔ)類(lèi)型
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /volume2/k8s-data/rabbitmq/rabbitmq-pv03
server: 10.1.13.99編輯setafulset配置
vi setafulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
namespace: rabbitmq
spec:
podManagementPolicy: Parallel
serviceName: rabbitmq-headless
selector:
matchLabels:
app: rabbitmq
replicas: 3 #副本數(shù)3
template:
metadata:
labels:
app: rabbitmq
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
affinity: #配置反親和性,使pod不能部署再同一個(gè)node上
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- rabbitmq
topologyKey: "kubernetes.io/hostname"
tolerations: #該配置是容忍污點(diǎn),使pod可以部署再master上,可以不要該配置
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: NoSchedule
serviceAccountName: rabbitmq
terminationGracePeriodSeconds: 10
containers:
- name: rabbitmq
image: rabbitmq:3.10-management
securityContext:
runAsUser: 1000
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 1
memory: 1Gi
volumeMounts:
- name: config-volume
mountPath: /etc/rabbitmq
- name: rabbitmq-data #使用pvc掛載數(shù)據(jù)目錄,rabbitmq啟動(dòng)時(shí)會(huì)往該目錄寫(xiě)入數(shù)據(jù),所以掛載的該目錄要具有寫(xiě)入權(quán)限
mountPath: /var/lib/rabbitmq/mnesia
ports:
- name: http
protocol: TCP
containerPort: 15672
- name: amqp
protocol: TCP
containerPort: 5672
livenessProbe:
exec:
command: ["rabbitmq-diagnostics", "status"]
initialDelaySeconds: 60
periodSeconds: 60
timeoutSeconds: 5
readinessProbe:
exec:
command: ["rabbitmq-diagnostics", "status"]
initialDelaySeconds: 20
periodSeconds: 60
timeoutSeconds: 5
imagePullPolicy: Always
env:
- name: RABBITMQ_DEFAULT_USER
valueFrom:
secretKeyRef:
key: rabbitDefaulUser
name: rabbitmq
- name: RABBITMQ_DEFAULT_PASS
valueFrom:
secretKeyRef:
key: rabbitDefaultPass
name: rabbitmq
- name: RABBITMQ_ERLANG_COOKIE
valueFrom:
secretKeyRef:
name: rabbitmq
key: erlang.cookie
- name: HOSTNAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: RABBITMQ_USE_LONGNAME
value: "true"
- name: SERVICE_NAME
value: "rabbitmq-headless"
- name: RABBITMQ_NODENAME
value: rabbit@$(HOSTNAME).$(SERVICE_NAME).$(NAMESPACE).svc.cluster.local
- name: K8S_HOSTNAME_SUFFIX
value: .$(SERVICE_NAME).$(NAMESPACE).svc.cluster.local
volumes:
- name: config-volume
configMap:
name: rabbitmq-config
items:
- key: rabbitmq.conf
path: rabbitmq.conf
- key: enabled_plugins
path: enabled_plugins
volumeClaimTemplates:
- metadata:
name: rabbitmq-data
spec:
storageClassName: "rabbitmq-pv"
accessModes: [ "ReadWriteMany" ]
resources:
requests:
storage: 30Gi創(chuàng)建命名空間
kubectl create namespace rabbitmq
創(chuàng)建各yaml服務(wù)
kubectl create -f secret.yaml kubectl create -f configmap.yaml kubectl create -f pv.yaml kubectl create -f service.yaml kubectl create -f service-nodeport.yaml kubectl create -f setafulset.yaml
查看集群狀態(tài)
kubectl exec -it rabbitmq-0 -n rabbitmq -- rabbitmqctl cluster_status

可以看到rabbitmq集群正常運(yùn)行,至此rabbitmq集群部署完成。
到此這篇關(guān)于k8s部署rabbitmq集群的文章就介紹到這了,更多相關(guān)k8s部署rabbitmq內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
k8s編排之DaemonSet知識(shí)點(diǎn)詳解
這篇文章主要為大家介紹了k8s編排之DaemonSet知識(shí)點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
不同k8s集群間服務(wù)如何相互訪問(wèn)實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了不同k8s集群間服務(wù)如何相互訪問(wèn)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
在AWS-EC2中安裝Minikube集群的詳細(xì)過(guò)程
這篇文章主要介紹了在AWS-EC2中安裝Minikube集群,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
K8S-ConfigMap實(shí)現(xiàn)應(yīng)用和配置分離詳解
這篇文章主要為大家介紹了K8S-ConfigMap實(shí)現(xiàn)應(yīng)用和配置分離詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Centos?8.2?升級(jí)內(nèi)核通過(guò)elrepo源的方法
這篇文章主要介紹了Centos?8.2?升級(jí)內(nèi)核通過(guò)elrepo源,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
kubernetes存儲(chǔ)之GlusterFS集群詳解
最近工作中用到了GlusterFS作為Kubernetes的存儲(chǔ),這篇文章主要給大家介紹了關(guān)于kubernetes存儲(chǔ)之GlusterFS集群的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04

