无法在 AKS 群集中启动 RabbitMQ 映像
Posted
技术标签:
【中文标题】无法在 AKS 群集中启动 RabbitMQ 映像【英文标题】:Unable to start RabbitMQ image in AKS Cluster 【发布时间】:2019-10-20 13:45:40 【问题描述】:我正在尝试在我的 AKS 群集中启动 RabbitMQ 映像。组成集群的虚拟机位于私有 VNET 上,并具有适当的防火墙规则。
什么需要被允许通过防火墙并不清楚(或者甚至是问题所在)。
这是 pod 启动时的输出:
启动失败
配置文件生成失败:未能创建脏 io 调度程序 线程 6,错误 = 11
故障转储正在写入: /var/log/rabbitmq/erl_crash.dump...分段错误(核心转储)
"init 终止在 do_boot",generate_config_file 初始化终止 在 do_boot (generate_config_file)
故障转储正在写入: /var/log/rabbitmq/erl_crash.dump...完成
我已将持久卷附加到 /var/log 和 /var/lib/rabbitmq,但没有日志文件或任何其他有助于调试此问题的文件。 Schema、lost+found 和其他 rabbitmq 文件夹和文件被创建,所以它的读/写很好。
这是我用来创建 pod 的 YAML:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mayan-broker
spec:
replicas: 1
template:
metadata:
labels:
app: mayan-broker
spec:
containers:
- name: mayan-broker
image: rabbitmq:3
volumeMounts:
- name: broker-storage
mountPath: /var/lib/rabbitmq
- name: broker-logging
mountPath: /var/log/rabbitmq
ports:
- containerPort: 5672
env:
- name: RABBITMQ_DEFAULT_USER
value: mayan
- name: RABBITMQ_DEFAULT_PASS
value: mayan
- name: RABBITMQ_DEFAULT_VHOST
value: mayan
volumes:
- name: broker-storage
persistentVolumeClaim:
claimName: rabbit-claim
- name: broker-logging
persistentVolumeClaim:
claimName: logging-claim
每个请求没有卷和挂载的 YAML,产生相同的结果:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mayan-broker
spec:
replicas: 1
template:
metadata:
labels:
app: mayan-broker
spec:
containers:
- name: mayan-broker
image: rabbitmq:3
ports:
- containerPort: 5672
env:
- name: RABBITMQ_DEFAULT_USER
value: mayan
- name: RABBITMQ_DEFAULT_PASS
value: mayan
- name: RABBITMQ_DEFAULT_VHOST
value: MAYAN
【问题讨论】:
请提供您的rabbitmq.conf
我不会更改docker镜像附带的rabbitmq.conf。
【参考方案1】:
我在使用 AKS 时遇到了同样的问题(我开始认为这是 AKS 的问题)。
基本上,AKS 限制了 pod 可以使用的线程数,而 rabbitmq(以及所有 Erlang 中的所有东西)使用 很多 线程。
您可以在 yaml 中使用 env vars 来减少线程数,就像在我的配置中一样:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
spec:
serviceName: "rabbitmq"
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:3.7-management
env:
# this needs to be there because AKS (as of 1.14.3)
# limits the number of thread a pod can use
- name: RABBITMQ_IO_THREAD_POOL_SIZE
value: "30"
ports:
- containerPort: 5672
name: amqp
resources:
limits:
memory: 4Gi
requests:
cpu: "1"
memory: 1Gi
我正在使用 statefulsets,但部署的修复方法是相同的。
【讨论】:
这将在 1.14 GA 中修复:github.com/Azure/AKS/issues/1051以上是关于无法在 AKS 群集中启动 RabbitMQ 映像的主要内容,如果未能解决你的问题,请参考以下文章
无法从连接到 Azure *** 的本地计算机(在家庭网络上)访问专用 AKS 群集
如何在 terraform 中由 AKS 群集资源创建的虚拟机规模集或负载均衡器上启用诊断日志?