跳到主要内容

Messaging Topology Kubernetes Operator 故障排除

本指南涵盖了 RabbitMQ Messaging Topology Operator 故障排除的基础知识。

日志

如果某些 RabbitMQ 拓扑对象无法创建,则信息的一个良好来源是 Messaging Topology Operator 日志。

要检查日志,请运行

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

状态

所有自定义 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 内部未创建任何对象

Topology Operator 依赖于 Cluster Operator 创建的默认用户 Secret。如果默认用户 Secret 没有工作凭据,则 Topology 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

在 Topology Operator 日志中观察到的错误将包含消息

Error: API responded with a 401 Unauthorized

解决方法

使用 default_userdefault_pass 中使用的用户名和密码更新默认凭据 Secret

© . All rights reserved.