消息队列 (messaging)
messaging 类收纳集群的消息中间件,目前有 NATS、RabbitMQ 两个组件。它们各自独占一个 namespace(nats / rabbitmq),均以 StatefulSet 单副本部署,没有配置 HPA / VPA / PDB。
两个组件当前都是
replicas: 1 的单实例,不是多副本集群形态。NATS 与 RabbitMQ 是相互独立的消息队列,分别服务不同的生产者 / 消费者。总览
这四个组件的镜像版本、监听端口与密钥来源都可以从 manifest 直接核对,下面按组件分别列出可验证的事实。集群整体的层次结构见 集群架构,节点标签与调度约定见 README 中的拓扑说明。
组件清单
- Name
- nats
- Description
- 消息队列(启用 JetStream 持久化)。镜像
nats:2.14-alpine,namespacenats,StatefulSet 单副本,调度到node-role: database节点。容器端口 4222(client)/ 8222(monitoring)/ 6222(cluster)。配置来自 ConfigMapnats-config,JetStream 存储在/data/jetstream(max_memory_store 1Gi、max_file_store 10Gi)。凭据由 ExternalSecretnats-secret从 Vaultsecret/database/prod/nats拉取 username / password。监控由独立 Deploymentnats-exporter(natsio/prometheus-nats-exporter:0.20.1,端口 7777)抓取,ServiceMonitornats采集其/metrics。Ingressnats.yldm.tech经 Cloudflare Tunnel 暴露 monitoring 端口 8222。
- Name
- rabbitmq
- Description
- 消息队列(management 版)。镜像
rabbitmq:4.3-management-alpine,namespacerabbitmq,StatefulSet 单副本,调度到node-role: database节点,带专属 ServiceAccount + Role/RoleBinding(读 endpoints、建 events)。容器端口 5672(amqp)/ 15672(management UI)/ 15692(prometheus)。凭据由 ExternalSecretrabbitmq-secret从 Vaultsecret/database/prod/rabbitmq拉取默认用户、密码与 Erlang cookie。Service:ClusterIPrabbitmq(5672/15672)、headlessrabbitmq-headless、外部访问用 NodePortrabbitmq-management(15672 → nodePort 30673)。
存储与调度
NATS 与 RabbitMQ 都挂独立 pvc.yaml,使用 local-path(本节点本地盘,分别 20Gi / 100Gi)—— 这与它们被钉在 node-role: database 节点的调度约定一致。
| 组件 | 镜像 | namespace | 副本 | 节点选择 | 存储 | ExternalSecret | ServiceMonitor / Ingress |
|---|---|---|---|---|---|---|---|
| nats | nats:2.14-alpine | nats | 1 | node-role: database | pvc 20Gi (local-path) | secret/database/prod/nats | 有 (经 exporter) / nats.yldm.tech |
| rabbitmq | rabbitmq:4.3-management-alpine | rabbitmq | 1 | node-role: database | pvc 100Gi (local-path) | secret/database/prod/rabbitmq | 无 (内置 :15692) / NodePort 30673 |
local-path 把 PV 钉在写入它的那个节点上,所以 NATS / RabbitMQ 的数据不会跟随 Pod 漂移到其它 worker;这也是它们固定调度到 node-role: database 节点的原因。