检查 RabbitmqCluster 状态

本指南用于判断 RabbitmqCluster 是否从 Kubernetes operator 视角和 RabbitMQ broker 视角都处于健康状态。

仅凭 Kubernetes 就绪状态是不够的。Pod 可能显示为 Ready,但 broker 可能尚未加入预期的 RabbitMQ 集群,或者运行时告警仍处于活动状态。

1. 检查 RabbitmqCluster 资源

从自定义资源开始:

kubectl -n <namespace> get rabbitmqcluster <instance-name> \
  -o custom-columns='NAME:.metadata.name,PHASE:.status.phase,GENERATION:.metadata.generation,OBSERVED:.status.observedGeneration,OPERATOR:.status.operatorVersion,DEFAULT_USER:.status.defaultUser.secretReference.name'

检查条件:

kubectl -n <namespace> get rabbitmqcluster <instance-name> \
  -o jsonpath='{range .status.conditions[*]}{.type}={"status":.status,"reason":.reason}{"\n"}{end}'

以下状态字段最适合用于日常检查:

字段含义
status.phaseoperator 报告的高级生命周期状态。
status.conditions详细的就绪和协调条件,例如 AllReplicasReadyClusterAvailableReconcileSuccess
status.observedGenerationoperator 最近一次成功观察到的 metadata.generation
status.defaultUser.secretReference存储默认 RabbitMQ 用户的已生成 Secret。
status.operatorVersion对该集群执行协调的 operator 版本。
status.upgradeStatus集群 bundle 的升级相关元数据。

2. 检查 Pod 和 Service

列出 Pod:

kubectl -n <namespace> get pods \
  -l app.kubernetes.io/name=<instance-name>

检查 Service:

kubectl -n <namespace> get svc <instance-name>

检查 endpoints:

kubectl -n <namespace> get endpoints <instance-name>
kubectl -n <namespace> get endpoints <instance-name>-nodes

如果某个 Pod 未出现在 endpoints 中,即使 Pod 存在,客户端或 peer discovery 也可能失败。

3. 检查 broker 存活性和集群成员关系

验证 broker 进程是否正在运行:

kubectl -n <namespace> exec <instance-name>-server-0 -- \
  rabbitmq-diagnostics ping

检查集群成员关系:

kubectl -n <namespace> exec <instance-name>-server-0 -- \
  rabbitmqctl cluster_status

cluster_status 必须显示 broker 集群中所有预期的节点。如果某个 Pod 处于 Ready 状态,但 cluster_status 未显示对应的 broker 节点,则应在确认实例健康之前先调查集群组建情况。

4. 检查监听器、告警和运行时状态

检查监听器:

kubectl -n <namespace> exec <instance-name>-server-0 -- \
  rabbitmq-diagnostics listeners

检查运行时状态:

kubectl -n <namespace> exec <instance-name>-server-0 -- \
  rabbitmq-diagnostics status

请重点关注:

  • 内存高水位使用情况
  • 磁盘可用空间告警
  • 连接和队列总数
  • 已启用的插件
  • 与访问方式和 TLS 预期相匹配的监听端口

5. 当状态不清晰时检查日志

如果资源或 broker 检查结果不一致,请检查 operator 和 broker 日志:

kubectl -n <namespace> logs <instance-name>-server-0

有关特定平台的日志指南,请参见 日志视图

相关信息