无法在AKS群集中启动RabbitMQ图像

时间:2019-06-05 03:22:22

标签: kubernetes rabbitmq azure-aks

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

不清楚允许通过防火墙的内容是什么(或者甚至是问题所在)。

这是Pod启动时的输出:

  

启动失败

     

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

     

故障转储正在写入:   /var/log/rabbitmq/erl_crash.dump ...分段错误(核心已转储)

     

{“ init在do_boot中终止”,generate_config_file} init终止   在do_boot(generate_config_file)中

     

故障转储正在写入:   /var/log/rabbitmq/erl_crash.dump ...完成

我已将永久卷附加到/ var / log和/ var / lib / rabbitmq,但是没有日志文件或其他任何有助于调试此问题的文件。创建了Schema,lost + found和其他Rabbitmq文件夹和文件,因此可以很好地进行读取/写入。

这是我用来创建广告连播的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     

2 个答案:

答案 0 :(得分: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 :(得分:0)

对于您的问题,在将卷安装到路径/var/lib/rabbitmq时,您将在rabbitmq.conf内覆盖了docker镜像rabbitmq:3。因此,您只需要删除安装路径为volumeMounts的{​​{1}}。这样就可以了。或者,您也可以在其中创建带有自己的Rabbitmq.conf的PVC。

更新:

使用您提供的编辑yaml,它也可以很好地工作,并且屏幕截图如下:

enter image description here

您还可以执行命令/var/lib/rabbitmq来检查是否还有其他错误。顺便说一句,您应该注意yaml文件的格式,还可以使用永久卷来存储日志。