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)才可通过域名使用)
posted @ 2025-06-09 16:22  怀恋小时候  阅读(237)  评论(0)    收藏  举报