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_user
和 default_pass
中使用的用户名和密码更新默认凭据 Secret
。