消息队列 (messaging)

messaging 类收纳集群的消息与分布式协调中间件,目前有 Kafka、NATS、RabbitMQ、ZooKeeper 四个组件。它们各自独占一个 namespace(kafka / nats / rabbitmq / zookeeper),均以 StatefulSet 单副本部署,没有配置 HPA / VPA / PDB。

总览

这四个组件的镜像版本、监听端口与密钥来源都可以从 manifest 直接核对,下面按组件分别列出可验证的事实。集群整体的层次结构见 集群架构,节点标签与调度约定见 README 中的拓扑说明。

组件清单

  • Name
    kafka
    Description
    事件流。镜像 bitnami/kafka:3.6,namespace kafka,StatefulSet 单副本,调度到 workload: app 节点。容器端口 9092(PLAINTEXT 客户端)/ 9093(INTERNAL broker 间通信)。通过 env KAFKA_CFG_ZOOKEEPER_CONNECT 连到 zookeeper.zookeeper.svc.cluster.local:2181,开启自动建 topic、日志保留 24 小时。Service:ClusterIP kafka(9092)+ headless kafka-headless(9092/9093)。无 ExternalSecret、无 ServiceMonitor、无 Ingress。
  • Name
    nats
    Description
    消息队列(启用 JetStream 持久化)。镜像 nats:2.14-alpine,namespace nats,StatefulSet 单副本,调度到 node-role: database 节点。容器端口 4222(client)/ 8222(monitoring)/ 6222(cluster)。配置来自 ConfigMap nats-config,JetStream 存储在 /data/jetstream(max_memory_store 1Gi、max_file_store 10Gi)。凭据由 ExternalSecret nats-secret 从 Vault secret/database/prod/nats 拉取 username / password。监控由独立 Deployment nats-exporternatsio/prometheus-nats-exporter:0.20.1,端口 7777)抓取,ServiceMonitor nats 采集其 /metrics。Ingress nats.yldm.tech 经 Cloudflare Tunnel 暴露 monitoring 端口 8222。
  • Name
    rabbitmq
    Description
    消息队列(management 版)。镜像 rabbitmq:4.3-management-alpine,namespace rabbitmq,StatefulSet 单副本,调度到 node-role: database 节点,带专属 ServiceAccount + Role/RoleBinding(读 endpoints、建 events)。容器端口 5672(amqp)/ 15672(management UI)/ 15692(prometheus)。凭据由 ExternalSecret rabbitmq-secret 从 Vault secret/database/prod/rabbitmq 拉取默认用户、密码与 Erlang cookie。Service:ClusterIP rabbitmq(5672/15672)、headless rabbitmq-headless、外部访问用 NodePort rabbitmq-management(15672 → nodePort 30673)。
  • Name
    zookeeper
    Description
    分布式协调。镜像 bitnami/zookeeper:3.9,namespace zookeeper,StatefulSet 单副本,调度到 workload: app 节点,开启匿名登录(ALLOW_ANONYMOUS_LOGIN=yesZOO_SERVER_ID=1)。容器端口 2181(client)/ 2888(follower)/ 3888(election)。Service:ClusterIP zookeeper(2181)+ headless zookeeper-headless(2181/2888/3888)。主要作为 Kafka 的元数据协调后端,无 ExternalSecret、无 ServiceMonitor、无 Ingress。

存储与调度

四个组件的持久化方式分两种:Kafka 与 ZooKeeper 用 StatefulSet 的 volumeClaimTemplates 申请 nfs-client 存储(分别 10Gi / 5Gi);NATS 与 RabbitMQ 则挂独立 pvc.yaml,使用 local-path(本节点本地盘,分别 20Gi / 100Gi)—— 这与它们被钉在 node-role: database 节点的调度约定一致。

组件镜像namespace副本节点选择存储ExternalSecretServiceMonitor / Ingress
kafkabitnami/kafka:3.6kafka1workload: appvolumeClaimTemplates 10Gi (nfs-client)无 / 无
natsnats:2.14-alpinenats1node-role: databasepvc 20Gi (local-path)secret/database/prod/nats有 (经 exporter) / nats.yldm.tech
rabbitmqrabbitmq:4.3-management-alpinerabbitmq1node-role: databasepvc 100Gi (local-path)secret/database/prod/rabbitmq无 (内置 :15692) / NodePort 30673
zookeeperbitnami/zookeeper:3.9zookeeper1workload: appvolumeClaimTemplates 5Gi (nfs-client)无 / 无

评论