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`。