Lazy loaded image
Prometheus和Grafana监控平台
Kubernetes部署RabbitMQ集群和监控
字数 1146阅读时长 3 分钟
2025-7-12
2025-7-12
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)

优化建议:
  1. 镜像更新:建议使用官方镜像 rabbitmq:3.8.33-management 替代旧镜像
  1. 安全增强:将ERLANG_COOKIE移至Secret
  1. 健康检查:添加liveness/readiness探针

6. 服务暴露 (rabbitmq-service.yaml)

建议:
  • 生产环境应使用LoadBalancer类型暴露AMQP服务
  • NodePort需在30000-32767范围内

7. Ingress配置 (rabbitmq-ing.yaml)

增强功能:
  • 添加Basic认证(需提前创建secret)
  • 建议配置TLS证书

三、部署步骤

  1. 创建命名空间
  1. 创建Secret(示例)
  1. 依次应用资源:

四、验证集群

  1. 检查Pod状态:
  1. 查看集群状态:
  1. 访问管理界面:

五、常见问题处理

  1. 集群未形成
      • 检查Pod日志:kubectl logs rabbitmq-0 -n middleware
      • 验证DNS解析:nslookup rabbitmq-headless.middleware.svc.cluster.local
      • 确认RBAC权限是否完整
  1. 存储卷挂载失败
      • 检查PVC状态:kubectl get pvc
      • 确认存储类配置:kubectl get storageclass
  1. 节点自动清理
      • 查看集群清理日志:kubectl logs rabbitmq-0 -n middleware | grep "node_cleanup"

六、安全建议

  1. 禁用guest用户:生产环境应删除默认guest用户
  1. 配置TLS加密:所有通信应使用SSL/TLS
  1. 限制资源配额:为middleware命名空间设置资源限制
  1. 定期备份:配置持久卷快照策略

七、扩展配置

  1. 监控集成
      • Prometheus配置:
  1. 自动扩缩容

    如需进一步优化,建议:
    • 添加PodDisruptionBudget保障可用性
    • 配置持久卷加密
    • 实现跨可用区部署
    • 集成日志收集系统(EFK)
    请根据实际生产环境调整资源配置和安全策略。
    上一篇
    helm基础和部署
    下一篇
    SonarQube使用