Kubernetes 无法在AKS群集中启动RabbitMQ映像

Kubernetes 无法在AKS群集中启动RabbitMQ映像,kubernetes,rabbitmq,azure-aks,Kubernetes,Rabbitmq,Azure Aks,我正在尝试在我的AKS群集中启动RabbitMQ映像。组成集群的VM位于专用VNET上,并具有适当的防火墙规则 需要允许哪些内容通过防火墙尚不清楚(或者这是否是问题) 以下是pod启动时的输出: 启动失败 配置文件生成失败:无法创建脏io计划程序 线程6,错误=11 正在将崩溃转储写入: /var/log/rabbitmq/erl_crash.dump…分段错误(内核转储) {“初始化终止于do_引导”,生成_config_文件}初始化终止 在do_引导中(生成配置文件) 正在将崩溃转储写入:

我正在尝试在我的AKS群集中启动RabbitMQ映像。组成集群的VM位于专用VNET上,并具有适当的防火墙规则

需要允许哪些内容通过防火墙尚不清楚(或者这是否是问题)

以下是pod启动时的输出:

启动失败 配置文件生成失败:无法创建脏io计划程序 线程6,错误=11

正在将崩溃转储写入: /var/log/rabbitmq/erl_crash.dump…分段错误(内核转储)

{“初始化终止于do_引导”,生成_config_文件}初始化终止 在do_引导中(生成配置文件)

正在将崩溃转储写入: /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     

我对AKS也有同样的问题(我开始认为这是AKS的问题)

基本上,AKS限制了pod可以使用的线程数量,而rabbitmq(以及一般的Erlang)使用了大量线程

您可以在yaml中使用env vars来减少线程数量,如在my config中:

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,但对部署的修复是相同的

请提供您的
rabbitmq.conf
我不会更改docker映像附带的rabbitmq.conf。这将在1.14 GA中修复: