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_pluginsrabbitmq_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_locatormin-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
definitionsmanagement.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类型端口用途
rabbitmqClusterIP5672 amqp、15672 management集群内访问
rabbitmq-headlessHeadless(clusterIP None)5672、15672StatefulSet 稳定网络标识 / peer discovery
rabbitmq-nodeportNodePort5672 → nodePort 30672集群外 AMQP 接入
rabbitmq-managementNodePort15672 → 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 总览

评论