k8s部署rabbitmq集群的方式
一、前言
本次部署方式為setafulset的方式部署rabbitmq集群,使用svc的無頭服務(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值,每個節(jié)點都需要保持一致
編輯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ù) namespace: rabbitmq spec: clusterIP: None publishNotReadyAddresses: true ports: - name: amqp port: 5672 - name: http port: 15672 selector: app: rabbitmq
vi 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路徑時一定要配置一定的寫入權(quán)限,不然啟動rabbitmq服務(wù)時會出現(xiàn)沒有寫入權(quán)限而報錯)
vi pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: rabbitmq-pv01 spec: storageClassName: rabbitmq-pv #定義了存儲類型 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 #定義了存儲類型 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 #定義了存儲類型 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不能部署再同一個node上 podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - rabbitmq topologyKey: "kubernetes.io/hostname" tolerations: #該配置是容忍污點,使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啟動時會往該目錄寫入數(shù)據(jù),所以掛載的該目錄要具有寫入權(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集群正常運行,至此rabbitmq集群部署完成。
到此這篇關(guān)于k8s部署rabbitmq集群的文章就介紹到這了,更多相關(guān)k8s部署rabbitmq內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
不同k8s集群間服務(wù)如何相互訪問實現(xiàn)詳解
這篇文章主要為大家介紹了不同k8s集群間服務(wù)如何相互訪問實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04K8S-ConfigMap實現(xiàn)應(yīng)用和配置分離詳解
這篇文章主要為大家介紹了K8S-ConfigMap實現(xiàn)應(yīng)用和配置分離詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Centos?8.2?升級內(nèi)核通過elrepo源的方法
這篇文章主要介紹了Centos?8.2?升級內(nèi)核通過elrepo源,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10