当前位置: 首页 > news >正文

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包

相关文章:

  • # 力扣:2、 两数相加:Java四种解法详解
  • spring boot 2升级3 记录
  • 驱动开发硬核特训 │ Day 23(下篇): i.MX8MP LCDIFv3 驱动中的 Regulator 系统全解
  • 2025一些热门的AI大模型课程资料推荐(持续更新中)
  • APIC Bond0/Teaming
  • QgraphicsView异步线程加载地图瓦片
  • 1. Msys2环境安装
  • 1.文档搜索软件Everything 的使用介绍
  • Kubernetes》》k8s》》explain查 yaml 参数
  • 第十二届蓝桥杯 2021 C/C++组 空间
  • windows中无法关闭mysql57服务
  • RSS‘25|CMU提出统一空中操作框架:以末端执行器为中心,无人机实现高精度遥操作
  • 算法设计与分析(期末试卷)
  • 用Python做有趣的AI项目 6:AI音乐生成器(LSTM Melody Generator)
  • 界面控件DevExpress WPF v25.1预览 - AI功能增强(语义搜索)
  • cas面试题
  • zynq 7010 PS 串口打印
  • 【ESP32】st7735s + LVGL移植
  • nginx代理websocket时ws遇到仅支持域名访问的处理
  • 整合性安全总结(ISS)早期规划
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • 外交部:印度香客赴中国西藏神山圣湖朝圣将于今年夏季恢复
  • A股三大股指收跌:地产股领跌,银行股再度走强
  • 安阳一村支书微信群骂村民被警方行拘,辩称对方先“污蔑造谣”
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查
  • 北上广深还是小城之春?“五一”想好去哪玩了吗