rabbitmq-集群部署

場景:單個pod,部署在主節點,基礎版沒有插件,進階版多了一個插件

基礎版本:

---
apiVersion: v1
kind: PersistentVolume
metadata:name: rabbitmq-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorageClassName: manualhostPath:path: /data/rabbitmqtype: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: rabbitmq-pvcnamespace: middle-ware
spec:storageClassName: manualaccessModes:- ReadWriteOnceresources:requests:storage: 5Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: rabbitmqnamespace: middle-ware
spec:serviceName: rabbitmq-headlessreplicas: 1selector:matchLabels:app: rabbitmqtemplate:metadata:labels:app: rabbitmqspec:dnsPolicy: ClusterFirst# 時間同步配置#hostNetwork: true#hostPID: truehostname: rabbitmq-0subdomain: rabbitmq-headlesstolerations:- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"    # 存儲權限初始化initContainers:- name: volume-permissionsimage: busybox:1.28command: ["sh", "-c", "chown -R 1000:1000 /var/lib/rabbitmq"]volumeMounts:- name: rabbitmq-storagemountPath: /var/lib/rabbitmqcontainers:- name: rabbitmqimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3-management#imagePullPolicy: IfNotPresent# 端口配置ports:- containerPort: 5672name: amqp- containerPort: 15672name: management# 卷掛載volumeMounts:- name: rabbitmq-configmountPath: /etc/rabbitmq/rabbitmq.confsubPath: rabbitmq.conf- name: rabbitmq-storagemountPath: /var/lib/rabbitmq- name: timezonemountPath: /etc/localtime# 精簡后的環境變量env:- name: RABBITMQ_USE_LONGNAME  value: "true" - name: RABBITMQ_NODENAMEvalue: "rabbit@rabbitmq-0.rabbitmq-headless.middle-ware.svc.cluster.local"- name: HOSTNAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: RABBITMQ_ERLANG_COOKIEvalue: "secretcookie"- name: RABBITMQ_DEFAULT_USERvalueFrom:secretKeyRef:name: rabbitmq-credentialskey: RABBITMQ_DEFAULT_USER# 資源限制resources:requests:cpu: "500m"memory: "1Gi"limits:cpu: "1"memory: "5Gi"# 存儲聲明volumes:- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/Shanghai- name: rabbitmq-configconfigMap:name: rabbitmq-config- name: rabbitmq-storagepersistentVolumeClaim:claimName: rabbitmq-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:name: rabbitmq-confignamespace: middle-ware
data:rabbitmq.conf: |default_user = admindefault_pass = admin123loopback_users = nonelisteners.tcp.default = 5672management.tcp.port = 15672cluster_name = k8s_rabbitmqcluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8scluster_formation.k8s.host = kubernetes.default.svc.cluster.localcluster_formation.k8s.address_type = hostnamecluster_formation.k8s.service_name = rabbitmq-headless#use_longname = true
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-nodeportnamespace: middle-ware
spec:type: NodePortselector:app: rabbitmqports:- port: 5672targetPort: 5672nodePort: 30672name: amqp- port: 15672targetPort: 15672nodePort: 31672name: management
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-headlessnamespace: middle-ware
spec:clusterIP: Noneselector:app: rabbitmqports:- port: 5672name: amqp- port: 15672name: management
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-servicenamespace: middle-ware
spec:type: ClusterIPselector:app: rabbitmqports:- port: 5672name: amqp- port: 15672name: management
---
apiVersion: v1
kind: Secret
metadata:name: rabbitmq-credentialsnamespace: middle-ware
type: Opaque
stringData:RABBITMQ_DEFAULT_USER: "admin"   # 用戶名RABBITMQ_DEFAULT_PASS: "admin123"  # 密碼
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: rabbitmq-peer-discovery
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["list", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: rabbitmq-peer-discoverynamespace: middle-ware
subjects:
- kind: ServiceAccountname: default  # 或你的自定義 ServiceAccountnamespace: middle-ware
roleRef:kind: ClusterRolename: rabbitmq-peer-discoveryapiGroup: rbac.authorization.k8s.io

封裝版本:

新增方式:在原有的鏡像上將插件拷貝進來,封裝多了一個插件文件到/opt/rabbitmq/plugins

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: rabbitmq-plugins-pvc
spec:storageClassName: ""  # 空字符串表示不使用動態存儲分配volumeName: rabbitmq-pv  # 指定已有的 PV 名稱accessModes:- ReadWriteOnceresources:requests:storage: 1Gi 
---
apiVersion: v1
kind: PersistentVolume
metadata:name: rabbitmq-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorageClassName: manualhostPath:path: /data/rabbitmqtype: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: rabbitmq-pvcnamespace: middle-ware
spec:storageClassName: manualaccessModes:- ReadWriteOnceresources:requests:storage: 4Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: rabbitmqnamespace: middle-ware
spec:serviceName: rabbitmq-headlessreplicas: 1selector:matchLabels:app: rabbitmqtemplate:metadata:labels:app: rabbitmqspec:dnsPolicy: ClusterFirst# 時間同步配置#hostNetwork: true#hostPID: truehostname: rabbitmq-0subdomain: rabbitmq-headlesstolerations:- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"    # 存儲權限初始化initContainers:- name: volume-permissionsimage: busybox:1.28command: ["sh", "-c", "mkdir -p /var/lib/rabbitmq && chown -R 1000:1000 /var/lib/rabbitmq"]volumeMounts:- name: rabbitmq-storagemountPath: /var/lib/rabbitmqcontainers:- name: rabbitmqimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3-management#imagePullPolicy: IfNotPresent# 端口配置ports:- containerPort: 5672name: amqp- containerPort: 15672name: management# 卷掛載volumeMounts:- name: rabbitmq-configmountPath: /etc/rabbitmq/rabbitmq.confsubPath: rabbitmq.conf- name: rabbitmq-storagemountPath: /var/lib/rabbitmq- name: timezonemountPath: /etc/localtime    - name: rabbitmq-pluginsmountPath: /opt/rabbitmq/publishlifecycle:postStart:exec:command: ["/bin/sh", "-c", "rabbitmq-plugins enable rabbitmq_delayed_message_exchange"]          # 精簡后的環境變量env:- name: RABBITMQ_USE_LONGNAME  value: "true" - name: RABBITMQ_NODENAMEvalue: "rabbit@rabbitmq-0.rabbitmq-headless.middle-ware.svc.cluster.local"- name: HOSTNAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: RABBITMQ_ERLANG_COOKIEvalue: "secretcookie"- name: RABBITMQ_DEFAULT_USERvalueFrom:secretKeyRef:name: rabbitmq-credentialskey: RABBITMQ_DEFAULT_USER# 資源限制resources:requests:cpu: "500m"memory: "1Gi"limits:cpu: "1"memory: "2Gi"# 存儲聲明volumes:- name: rabbitmq-pluginspersistentVolumeClaim:claimName: rabbitmq-plugins-pvc- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/Shanghai- name: rabbitmq-configconfigMap:name: rabbitmq-config- name: rabbitmq-storagepersistentVolumeClaim:claimName: rabbitmq-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:name: rabbitmq-confignamespace: middle-ware
data:rabbitmq.conf: |#default_user = admin#default_pass = admin123loopback_users = nonelisteners.tcp.default = 5672management.tcp.port = 15672cluster_name = k8s_rabbitmqcluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8scluster_formation.k8s.host = kubernetes.default.svc.cluster.localcluster_formation.k8s.address_type = hostnamecluster_formation.k8s.service_name = rabbitmq-headless#use_longname = trueplugins = rabbitmq_delayed_message_exchange
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-nodeportnamespace: middle-ware
spec:type: NodePortselector:app: rabbitmqports:- port: 5672targetPort: 5672nodePort: 30672name: amqp- port: 15672targetPort: 15672nodePort: 31672name: management
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-headlessnamespace: middle-ware
spec:clusterIP: Noneselector:app: rabbitmqports:- port: 5672name: amqp- port: 15672name: management
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-servicenamespace: middle-ware
spec:type: ClusterIPselector:app: rabbitmqports:- port: 5672name: amqp- port: 15672name: management
---
apiVersion: v1
kind: Secret
metadata:name: rabbitmq-credentialsnamespace: middle-ware
type: Opaque
stringData:RABBITMQ_DEFAULT_USER: "admin"   # 用戶名RABBITMQ_DEFAULT_PASS: "admin123"  # 密碼
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: rabbitmq-peer-discovery
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["list", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: rabbitmq-peer-discoverynamespace: middle-ware
subjects:
- kind: ServiceAccountname: default  # 或你的自定義 ServiceAccountnamespace: middle-ware
roleRef:kind: ClusterRolename: rabbitmq-peer-discoveryapiGroup: rbac.authorization.k8s.io

封裝版本的鏡像是需要制作的,制作流程如下:

mkdir test && cd test

ls

tar-1.34.tar.gz? ?rabbitmq_delayed_message_exchange.tar

vim Dockerfile


#-----第一階段,為了制作tar包,第二階段應用到rabbitmq里,第三階段時rabbitmq插件加載
#FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/selectdb/alpine:latest AS builder
# 修改軟件源為國內鏡像
#RUN sed -i 's|https://dl-cdn.alpinelinux.org/alpine/|http://mirrors.tuna.tsinghua.edu.cn/alpine/|g' /etc/apk/repositories
# 安裝完整的編譯工具鏈和依賴庫
#RUN apk update && apk add --no-cache \
#    build-base \
#    gcc \
#    make \
#    autoconf \
#    automake \
#    bison \
#    gettext \
#    libtool \
#    elfutils-dev \
#    ncurses-dev \
#    readline-dev \
#    zlib-dev \
#    musl-dev
# 復制 tar-1.34.tar.gz
#COPY tar-1.34.tar.gz /tar-1.34.tar.gz
# 解壓、編譯并安裝 tar
#RUN tar -zxf /tar-1.34.tar.gz && \
#    cd /tar-1.34 && \
#    FORCE_UNSAFE_CONFIGURE=1 ./configure --prefix=/usr/local && \
#    make && \
#    make install && \
#    rm -rf /tar-1.34 /tar-1.34.tar.gz
# 第二階段:使用 RabbitMQ 鏡像
#FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3-management
# 從第一階段復制編譯好的 tar
#COPY --from=builder /usr/local /usr/local##docker build -t rabbitmq-tar:1.1 .
##ls
##tar-1.34.tar.gz Dockerfile#----
#添加插件并且運行容器自動啟動
#FROM rabbitmq-tar:1.1
# # 將本地插件包復制到容器內的 /opt/rabbitmq/plugins 目錄
#COPY rabbitmq_delayed_message_exchange-3.13.0.ez /opt/rabbitmq/plugins
#啟動時加載插件
#RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
#
#

#制作鏡像
##docker build -t rabbitmq_delayed_message_exchange:1.4 .
##ls
##rabbitmq_delayed_message_exchange.ez Dockerfile

#然后再yaml文件里引用最新鏡像即可

#測試是否自動加載插件成功
kubectl exec -it rabbitmq-0 -n middle-ware -- rabbitmq-plugins list |grep rabbitmq_delayed_message_exchange

-----

部署在新環境:pv和pvc大小,賬密更改,端口更改,pv目錄授權,登錄31672/admin/admin123默認的,建議更改

登錄curl測試:
http://10.10.10.150:31672/#/
admin/admin123

鏡像基于swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3-management封裝了一層,添加了tar包,還有rabbitmq_delayed_message_exchange.ez插件包,并且每次運行容器會自動啟動插件


rabbitmq_delayed_message_exchange.tar是鏡像包
使用的話docker load -i rrabbitmq_delayed_message_exchange.tar導入這個tar包

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78600.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[密碼學實戰]商用密碼產品密鑰體系架構:從服務器密碼機到動態口令系統

[密碼學實戰]商用密碼產品密鑰體系架構:從服務器密碼機到動態口令系統 關鍵詞:商用密碼、密鑰體系、服務器密碼機、金融數據密碼機、動態口令、智能密碼鑰匙 摘要:本文深度解讀商用密碼產品的核心密鑰體系架構,涵蓋服務器密碼機、金融數據密碼機、VPN產品、動態口令系統及…

【unity游戲開發入門到精通——UGUI】UI事件監聽接口

注意:考慮到UGUI的內容比較多,我將UGUI的內容分開,并全部整合放在【unity游戲開發——UGUI】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是UGUI事件接口?2、想要監聽事件步驟 一、事件接口1、U…

Spark知識總結

寬窄依賴:父RDD的分區只對應下面子RDD的一個分區,為窄依賴。其余為寬依賴 維度??窄依賴??寬依賴?數據傳輸無shuffle,本地處理14需shuffle,跨節點傳輸14并行度高(允許流水線并行)57低(需等…

銘記之日(3)——4.28

銘記之日(3)——4.28 25.4.28,絕對是繼20.12.19與24.6.26之后,又一個被釘在恥辱柱上的日子。 4.28本質上為12.19的嚴重惡劣版。 道德敗壞、惡劣的大騙子終于在今日穿幫落馬。 斯文面孔下,竟藏匿了如此罪惡幽暗混沌的內心。 24.10.20&…

第16節:傳統分類模型-支持向量機(SVM)在圖像分類中的應用

一、引言 支持向量機(Support Vector Machine, SVM)作為一種經典的機器學習算法,自20世紀90年代由Vapnik等人提出以來,在模式識別和分類任務中表現出卓越的性能。 在深度學習興起之前,SVM長期占據著圖像分類領域的主導地位,即使…

《系統分析師-第三階段—總結(六)》

背景 采用三遍讀書法進行閱讀,此階段是第三遍。 過程 本篇總結第11章第12章的內容 第11章 第12章 總結 軟件架構設計是宏觀,基本架構確定之后,開始了系統化設計, 系統設計中對應的基本部分的知識較多,基礎知識是第…

new的使用

上次堆區的介紹中,我們提到了一個關鍵字new,那今天我們就詳細講講它 今天我們主要將兩個內容 1.new的基本語法 2.用new創建數組 1.new的基本語法 new,可以在堆區中創建空間,來存放數據,就比如像下面這樣 int* p new int(29);//n…

使用python實現自動化拉取壓縮包并處理流程

使用python實現自動化拉取壓縮包并處理流程 實現成果展示使用說明 實現成果展示 使用說明 執行./run.sh 腳本中的內容主要功能是: 1、從遠程服務器上下拉制定時間更新的數據 2、將數據中的zip拷貝到指定文件夾內 3、解壓后刪除所有除了lcm之外的文件 4、新建一個ou…

香橙派打包qt文件報錯“xcb 插件無法加載”與“QObject::moveToThread”線程錯誤的解決方案

PyQt 報錯總結:打包文件過程,“xcb 插件無法加載”與“QObject::moveToThread”線程錯誤的解決方案全解析 在使用 PyQt5 搭建圖形界面時,打包文件的過程中出現的問題,真難繃,搞了半天。 Qt 平臺插件 xcb 無法加載QOb…

Missashe考研日記-day29

Missashe考研日記-day29 1 專業課408 學習時間:3h學習內容: 今天先是把虛擬存儲剩余的課聽完了,然后就是做課后選擇題,57道,已經接受了OS課后題尤其多的事實了。解決并且理解完習題之后就開始預習文件管理的內容&…

【Linux】第十二章 安裝和更新軟件包

目錄 1. 什么是RPM? 2. dnf是什么,它和rpm有什么聯系和區別? 3. RHEL 中如何做才能啟用對第三方存儲庫的支持? 4. 怎么理解RHEL9中的應用流(Application Streams)和模塊(Modules)? 5. RHEL9 有兩個必要的軟件存儲…

新時代下的存儲過程開發實踐與優化

隨著現代應用系統的復雜度不斷增加,數據庫作為核心的數據存儲和處理引擎,其性能和可靠性顯得尤為重要。存儲過程(Stored Procedure)作為一種封裝在數據庫中的應用邏輯,使得開發者能夠在數據庫層面實現數據操作、數據校…

從梯度消失到百層網絡:ResNet 是如何改變深度學習成為經典的?

自AlexNet贏得2012年ImageNet競賽以來,每個新的獲勝架構通常都會增加更多層數以降低錯誤率。一段時間內,增加層數確實有效,但隨著網絡深度的增加,深度學習中一個常見的問題——梯度消失或梯度爆炸開始出現。 梯度消失問題會導致梯…

JVM——引入

什么是JVM?它與JDK、JRE的關系? JVM、JRE 和 JDK 是 Java 平臺的三個核心組件,各自承擔著不同的職責,它們之間的關系密不可分。理解它們的區別和聯系有助于更好地開發、部署和運行 Java 應用程序。對于 Java 開發者來說&#xff…

PyCharm 2023升級2024 版本

windows下把老版本卸載之后,需要把環境變量,注冊表信息刪除。 并且把C:\Users\用戶\AppData 文件夾下的 Local\JetBrains和Roaming\JetBrains 都刪除,再重新安裝 原舊項目升級的方式: 1.2023虛擬機的文件夾是venv 改為.venv…

從外賣大戰看O2O新趨勢:上門私廚平臺系統架構設計解析

京東高調進軍外賣市場,美團全力防守,兩大巨頭的競爭讓整個行業風起云涌。但在這場外賣大戰之外,一個更具潛力的細分市場正在悄然興起——上門私廚服務。 與標準化外賣不同,上門私廚提供的是個性化定制服務。廚師帶著新鮮食材上門現…

驅動開發系列53 - 一個OpenGL應用程序是如何調用到驅動廠商GL庫的

一:概述 一個 OpenGL 應用程序調用 GPU 驅動的過程,主要是通過動態鏈接庫(libGL.so)來完成的。本文從上到下梳理一下整個調用鏈,包含 GLVND、Mesa 或廠商驅動之間的關系。 二:調用關系 1. 首先一個 OpenGL 應用程序(比如游戲或圖形渲染軟件)在運行時會調用 OpenGL 提供…

springboot3 聲明式 HTTP 接口

1 介紹 在 Spring 6 和 Spring Boot 3 中,我們可以使用 Java 接口來定義聲明式的遠程 HTTP 服務。這種方法受到 Feign 等流行 HTTP 客戶端庫的啟發,與在 Spring Data 中定義 Repository 的方法類似。 聲明式 HTTP 接口包括用于 HTTP exchange 的注解方法…

多級緩存架構設計與實踐經驗

多級緩存架構設計與實踐經驗 在互聯網大廠Java求職者的面試中,經常會被問到關于多級緩存的架構設計和實踐經驗。本文通過一個故事場景來展示這些問題的實際解決方案。 第一輪提問 面試官:馬架構,歡迎來到我們公司的面試現場。請問您對多級…

Mac「brew」快速安裝Redis

安裝Redis 步驟 1:安裝 Redis 打開終端(Terminal)。 運行以下命令安裝 Redis: brew install redis步驟 2:啟動 Redis 安裝完成后,可以使用以下命令啟動 Redis 服務: brew services start redis…