无法在 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 群集

将网站或域与 AKS 群集链接

如何找到我的 AKS 群集的服务主体机密?

如何在 terraform 中由 AKS 群集资源创建的虚拟机规模集或负载均衡器上启用诊断日志?

在 Azure 上将卷添加到 Terraform AKS 群集时出现错误“没有这样的主机”

Shell (ssh) 到 Azure AKS (Kubernetes) 群集工作节点