消息拓扑 Kubernetes Operator 故障排查
本指南介绍了 RabbitMQ 消息拓扑 Operator 的基本故障排查方法。
日志
如果某些 RabbitMQ 拓扑对象未能成功创建,消息拓扑 Operator 的日志是一个很好的信息来源。
要检查日志,请运行
kubectl -n rabbitmq-system logs -l app.kubernetes.io/name=messaging-topology-operator
状态
所有自定义的消息拓扑 Operator 资源都有一个 status 子资源,它描述了资源的当前状态。
例如,要获取名为 '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 中未创建对象
拓扑 Operator 依赖于 Cluster Operator 创建的默认用户 Secret。如果默认用户 Secret 没有有效的凭据,拓扑 Operator 将无法与 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
在拓扑 Operator 日志中观察到的错误将包含以下消息:
Error: API responded with a 401 Unauthorized
解决方法
使用 default_user 和 default_pass 中使用的用户名和密码更新默认凭据 Secret。