RabbitMQ · 集群内的 AMQP 消息中间件
RabbitMQ 是集群里的消息队列中间件,以单副本 StatefulSet 运行在专用 rabbitmq 命名空间,镜像为 rabbitmq:4.3-management-alpine(自带 management 插件)。
它属于数据库层工作负载,通过 node-role: database 节点选择器钉在 k8s-worker3 上(README 列出 worker3 数据库层包含 RabbitMQ),数据卷使用 local-path storageClass,因此 PV 钉在该节点本地盘,不会随 Pod 漂移。
部署形态
- Name
- 命名空间
- Description
- rabbitmq(独立 Namespace,非 messaging 前缀)
- Name
- 工作负载
- Description
- StatefulSet,replicas: 1,serviceName 指向 rabbitmq-headless
- Name
- 镜像
- Description
- rabbitmq:4.3-management-alpine
- Name
- 调度
- Description
- nodeSelector node-role: database(仅 k8s-worker3 带此标签)
- Name
- 端口
- Description
- 5672 amqp、15672 management、15692 prometheus
- Name
- 存储
- Description
- PVC rabbitmq-data,100Gi,ReadWriteOnce,storageClassName local-path,挂载到 /var/lib/rabbitmq
- Name
- 资源
- Description
- requests 512Mi / 500m,limits 2Gi / 2000m
- Name
- ServiceAccount
- Description
- rabbitmq,配套 Role 授予 endpoints get、events create(供 K8s peer discovery 使用)
StatefulSet 启用了 RABBITMQ_USE_LONGNAME=true,节点名为 rabbit@$(MY_POD_NAME).rabbitmq-headless.rabbitmq.svc.cluster.local,通过 headless Service 提供稳定网络标识。探针均走 rabbitmq-diagnostics:liveness 用 ping(initialDelay 60s、period 30s),readiness 用 check_port_connectivity(initialDelay 20s、period 10s)。
命名空间内另有 ResourceQuota(pods 10、requests.cpu 500m、requests.memory 1Gi、limits.cpu 2、limits.memory 4Gi)和 LimitRange(容器默认 100m/128Mi、上限 2 CPU/2Gi)约束资源。
配置与依赖
配置来自 ConfigMap rabbitmq-config,挂载到 /etc/rabbitmq,关键项:
| 配置 | 值 |
|---|---|
| enabled_plugins | rabbitmq_management、rabbitmq_prometheus、rabbitmq_shovel、rabbitmq_shovel_management |
| 集群发现 | cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s,address_type = hostname |
| 分区处理 | cluster_partition_handling = autoheal |
| queue_master_locator | min-masters |
| 内存水位 | vm_memory_high_watermark.relative = 0.6,paging_ratio 0.75 |
| 磁盘下限 | disk_free_limit.absolute = 2GB |
| 监听端口 | listeners.tcp.default = 5672,management.tcp.port = 15672 |
| definitions | management.load_definitions = /etc/rabbitmq/definitions.json(默认仅含 vhost /,users/permissions/policies 均为空) |
凭据由 ExternalSecret rabbitmq-secret 从 ClusterSecretStore vault-backend 拉取(refreshInterval 1h),remoteRef.key 为 secret/database/prod/rabbitmq,映射三个字段:username → RABBITMQ_DEFAULT_USER、password → RABBITMQ_DEFAULT_PASS、erlang_cookie → RABBITMQ_ERLANG_COOKIE,经 secretKeyRef 注入容器环境变量。
访问与监控
命名空间内提供四个 Service:
| Service | 类型 | 端口 | 用途 |
|---|---|---|---|
| rabbitmq | ClusterIP | 5672 amqp、15672 management | 集群内访问 |
| rabbitmq-headless | Headless(clusterIP None) | 5672、15672 | StatefulSet 稳定网络标识 / peer discovery |
| rabbitmq-nodeport | NodePort | 5672 → nodePort 30672 | 集群外 AMQP 接入 |
| rabbitmq-management | NodePort | 15672 → nodePort 30673 | 集群外管理界面接入 |
NetworkPolicy 默认拒绝入站(default-deny-ingress),再按来源放行:同命名空间(allow-same-namespace)、app / game / platform 命名空间(allow-from-app/game/platform)、argo-workflows(allow-from-argo-workflows)、prometheus 命名空间抓取(allow-prometheus-scraping),并放行 DNS 出站(allow-dns-egress)。
监控方面,容器暴露 15692 端口供 Prometheus 抓取(rabbitmq_prometheus 插件),allow-prometheus-scraping 策略放行 prometheus 命名空间入站。本目录未包含 ServiceMonitor、PrometheusRule、HPA、VPA 或 PDB。
返回 messaging 总览