type
status
date
slug
summary
tags
category
icon
password
一、架构说明
使用StatefulSet+Headless Service实现RabbitMQ集群部署,包含以下组件:
- ConfigMap:配置文件及插件启用
- Headless Service:集群节点通信
- StatefulSet:有状态Pod管理
- PVC:持久化存储
- RBAC:服务发现权限控制
- Ingress:外部访问管理控制台
二、资源配置清单
1. ConfigMap (rabbitmq-configmap.yaml)
配置说明:
- 启用插件:管理插件、K8s服务发现、延迟消息交换器、Prometheus监控
- 集群自动发现配置:通过K8s endpoints实现节点发现
- 内存/磁盘限制需根据节点资源调整
hostname_suffix必须与Headless Service DNS匹配
2. Headless Service (rabbitmq-headless.yaml)
作用:
- 为StatefulSet提供稳定的DNS记录
- 用于集群内部通信(节点间通信端口25672)
3. 持久化存储 (rabbitmq-pvc.yaml)
这个pvc使用动态pvc,安装步骤
注意事项:
- 需提前创建NFS StorageClass
- 生产环境建议使用ReadWriteOnce并启用PodAntiAffinity
- 需确保PV的访问模式匹配
4. RBAC配置 (rabbitmq-sa.yaml)
权限说明:
- 需要获取endpoints信息进行节点发现
- 需要创建events用于集群事件记录
5. StatefulSet (rabbitmq-statefulset.yaml)
优化建议:
- 镜像更新:建议使用官方镜像
rabbitmq:3.8.33-management替代旧镜像
- 安全增强:将ERLANG_COOKIE移至Secret
- 健康检查:添加liveness/readiness探针
6. 服务暴露 (rabbitmq-service.yaml)
建议:
- 生产环境应使用LoadBalancer类型暴露AMQP服务
- NodePort需在30000-32767范围内
7. Ingress配置 (rabbitmq-ing.yaml)
增强功能:
- 添加Basic认证(需提前创建secret)
- 建议配置TLS证书
三、部署步骤
- 创建命名空间
- 创建Secret(示例)
- 依次应用资源:
四、验证集群
- 检查Pod状态:
- 查看集群状态:
- 访问管理界面:
五、常见问题处理
- 集群未形成:
- 检查Pod日志:
kubectl logs rabbitmq-0 -n middleware - 验证DNS解析:
nslookup rabbitmq-headless.middleware.svc.cluster.local - 确认RBAC权限是否完整
- 存储卷挂载失败:
- 检查PVC状态:
kubectl get pvc - 确认存储类配置:
kubectl get storageclass
- 节点自动清理:
- 查看集群清理日志:
kubectl logs rabbitmq-0 -n middleware | grep "node_cleanup"
六、安全建议
- 禁用guest用户:生产环境应删除默认guest用户
- 配置TLS加密:所有通信应使用SSL/TLS
- 限制资源配额:为middleware命名空间设置资源限制
- 定期备份:配置持久卷快照策略
七、扩展配置
- 监控集成:
- Prometheus配置:
- 自动扩缩容:
如需进一步优化,建议:
- 添加PodDisruptionBudget保障可用性
- 配置持久卷加密
- 实现跨可用区部署
- 集成日志收集系统(EFK)
请根据实际生产环境调整资源配置和安全策略。
- 作者:NotionNext
- 链接:https://tangly1024.com/article/22edb897-8f81-80ec-b6da-fc2e854c559f
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





