rabbitmq部署手册(helm版本)
1. 概述
本文档介绍如何使用 Helm 在 Kubernetes 集群中部署rabbitmq-cluster服务。
2. 前提条件
- Kubernetes 集群 (v1.16+)
- Helm (v3.0+)
- 集群节点可访问公司内网
- 足够的 Kubernetes 操作权限
3. 部署步骤
3.1 添加 Helm 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
3.2 创建配置文件
创建 rabbitmq-values.yaml 文件,内容如下:
# rabbitmq-values.yaml
# ==================== 全局参数 ====================
# 定义集群范围的默认配置,这些配置会被所有子组件继承(除非被覆盖)
global:
# 存储类设置:指定默认的 StorageClass。
# 优先级:此配置优先级最高,会直接决定 PVC 使用哪个存储类。
# 注意:这里设置为 "nfs-sc",意味着所有需要持久化的组件(除非单独指定)都会使用 nfs-sc 这个 StorageClass。
storageClass: "nfs-sc"
# 允许使用非官方的镜像地址
security:
allowInsecureImages: true # 将此参数设置为 true
# ==================== 容器镜像配置 ====================
# 定义 RabbitMQ 使用的容器镜像源,用于应对国内网络访问 Docker Hub 缓慢或不可用的问题。
image:
# 镜像仓库地址(Registry)。此处已替换为华为云 SWR 服务的地址,
# 以替代官方的 `docker.io`,实现从国内源快速拉取镜像。
registry: swr.cn-north-4.myhuaweicloud.com
# 镜像仓库内的具体路径(Repository)。
# 路径 `ddn-k8s/docker.io/bitnami/rabbitmq` 表明这是对 `docker.io/bitnami/rabbitmq` 官方镜像的代理或同步副本。
# 如果此仓库为私有,需在下方配置 `image.pullSecrets`。
repository: ddn-k8s/docker.io/bitnami/rabbitmq
# 镜像标签(Tag),指定了所需的 RabbitMQ 版本。
tag: 4.1.0-debian-12-r0
# (可选)镜像拉取策略。默认值为 `IfNotPresent`。
# 可选项:
# `IfNotPresent`: 仅当节点上不存在该镜像时才拉取。
# `Always`: 总是拉取新镜像(适合镜像标签为 `latest` 或频繁更新的场景)。
# `Never`: 仅使用本地镜像,从不拉取。
# pullPolicy: IfNotPresent
# ==================== RabbitMQ 核心参数 ====================
# 定义 RabbitMQ 实例的认证信息
auth:
# 管理界面及AMQP连接的用户名
username: "rabbitmq"
# 对应用户的密码
password: "rabbitmq"
# 启用安全密码模式,密码会以更安全的方式(如挂载文件)传递给容器,而非环境变量。
securePassword: true
# 定义集群配置
clustering:
# 启用集群模式,部署多个RabbitMQ节点形成一个高可用集群。
enabled: true
# 节点间通信使用的地址类型。`hostname` 意味着使用Kubernetes Pod的主机名进行发现和通信。
addressType: hostname
# 网络分区处理策略。`autoheal` 表示当集群发生网络分区时,会自动尝试恢复并保持多数派节点运行。
partitionHandling: autoheal
# 定义 StatefulSet 的副本数,即 RabbitMQ 集群中的节点数量。
replicaCount: 3
# ==================== 持久化存储配置 ====================
# 配置 RabbitMQ 数据的持久化
persistence:
# 启用持久化存储。如果禁用,节点重启后数据会丢失。
enabled: true
# 为 RabbitMQ 数据卷指定使用的 StorageClass。
# 重要提示:由于 `global.storageClass` 的优先级更高(见 `common.storage.class` 函数逻辑),
# 此处的 `nfs` 设置实际上会被覆盖,最终生效的仍是 `global.storageClass: "nfs-sc"`。
# storageClass: "nfs"
# 为每个 Pod 的 PVC 请求的存储容量。
size: 16Gi
# PVC 的访问模式。`ReadWriteOnce` 表示卷可以被单个节点以读写模式挂载。
# 对于 StatefulSet 的每个 Pod 拥有独立 PVC 的场景,此模式是典型配置。
accessModes:
- ReadWriteOnce
# ==================== 外部访问配置 ====================
# 配置如何从集群外部访问 RabbitMQ 管理界面
ingress:
# 启用 Ingress 资源创建,以便通过 HTTP/HTTPS 从外部访问。
enabled: true
# 定义访问管理界面的主机名。请将 `xxx.com` 替换为你的实际域名。
hostname: "rabbitmq.xxx.com"
# 暂时不启用 TLS 加密。生产环境强烈建议启用并配置证书。
tls: false
# Ingress 注解,用于指定 Ingress 控制器的行为。
annotations:
# 告知 Kubernetes 使用 `nginx` 类型的 Ingress 控制器来处理此路由规则。
kubernetes.io/ingress.class: "nginx"
# 明确指定使用的 IngressClass 资源名称,这是更现代的指定方式(Kubernetes 1.18+)。
ingressClassName: "nginx"
3.3 部署 rabbitmq-cluster
执行以下命令部署 rabbitmq-cluster:
# 使用 Helm 部署
helm install rabbitmq bitnami/rabbitmq \
--namespace rabbitmq \
--create-namespace \
--values rabbitmq-values.yaml \
--version 16.0.2
3.4 验证部署
执行以下命令验证 CoreDNS 部署状态:
1. 检查 Pod 状态
# 检查 Pod 状态
kubectl get pods -n rabbitmq -o wide
# 检查服务状态
kubectl get svc -n rabbitmq
3.5访问方式
- Ingress 访问:https://rabbitmq.xxx.com (注意:ingress-nginx必须开启tcp代理,客户端(如:aspnetcore)才可通过域名使用)

浙公网安备 33010602011771号