排查消息拓扑 Kubernetes Operator 问题
本指南涵盖了排查 RabbitMQ 消息拓扑 Operator 的基础知识。
日志
如果某些 RabbitMQ 拓扑对象无法创建,消息拓扑 Operator 的日志是获取信息的一个良好来源。
要检查日志,请运行
kubectl -n rabbitmq-system logs -l app.kubernetes.io/name=messaging-topology-operator
状态
所有自定义消息拓扑 Operator 资源都有一个状态子资源 (status subresource),用于描述资源的当前状态。
例如,要获取名为“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 依赖于由集群 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。