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.mzph.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…