跳至主要内容

RabbitMQ 消息拓扑 Kubernetes 运算符故障排除

本指南涵盖了 RabbitMQ 消息拓扑运算符故障排除的基础知识。

日志

如果某些 RabbitMQ 拓扑对象无法创建,消息拓扑运算符日志是一个很好的信息来源。

要检查日志,请运行

kubectl -n rabbitmq-system logs -l app.kubernetes.io/name=messaging-topology-operator

状态

所有自定义消息拓扑运算符资源都具有一个状态子资源,用于描述资源的当前状态。

例如,要获取名为“my-queue”的队列的状态,请运行

kubectl get queues.rabbitmq.com my-queue -oyaml

kubectl describe queues.rabbitmq.com my-queue

队列的状态示例可能如下所示

apiVersion: rabbitmq.com/v1beta1
kind: Queue
metadata:
name: my-queue
namespace: rabbitmq-system
spec:
...
status:
conditions:
- lastTransitionTime: ""
status: "True" # could be true, false, or unknown; false means the last reconciliation has failed
type: Ready
Reason: "SuccessfulCreateOrUpdate" # status false result in reason FailedCreateOrUpdate
Message: "" # set with error message when status is false

kubectl apply 成功,但在 RabbitMQ 中未创建任何对象

拓扑运算符依赖于集群运算符创建的默认用户 `Secret`。如果默认用户 `Secret` 没有有效的凭据,则拓扑运算符将无法与 RabbitMQ HTTP API 通信。如果 `RabbitmqCluster` 对象定义了默认用户和密码,则可能会发生这种情况,例如

apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
name: custom-configuration
spec:
replicas: 1
rabbitmq:
additionalConfig: |
default_user = some-user
default_pass = some-pass

以上操作将导致在默认用户 `Secret` 中生成不正确的凭据。尝试使用拓扑对象定位 `RabbitmqCluster` 将导致错误。例如,以下清单

apiVersion: rabbitmq.com/v1beta1
kind: Queue
metadata:
name: my-queue
spec:
name: qq # name of the queue
type: quorum
durable: true
rabbitmqClusterReference:
name: custom-configuration

在拓扑运算符日志中观察到的错误将包含以下消息

Error: API responded with a 401 Unauthorized

解决方法

使用 `default_user` 和 `default_pass` 中使用的用户名和密码更新默认凭据 `Secret`。

© 2024 RabbitMQ. All rights reserved.