CrashLoopBackOff,同时增加MongoDB映像在Azure AKS群集上的副本数超过1个

时间:2019-06-04 06:49:30

标签: mongodb azure ubuntu kubernetes

Click here to get error screen

我正在将Azure共享作为卷将MongoDb部署到Azure AKS(使用持久卷和持久卷声明)。如果我要增加多个副本,则发生CrashLoopBackOff。只有一个Pod正在创建,其他Pod却失败了。

我的用于创建MongoDb映像的Docker文件。

FROM ubuntu:16.04

RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

RUN echo "deb http://repo.mongodb.org/apt/ubuntu $(cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2)/mongodb-org/3.2 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list

RUN apt-get update && apt-get install -y mongodb-org

EXPOSE 27017

ENTRYPOINT ["/usr/bin/mongod"]

用于部署的YAML文件

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: mongo
    spec:      
      containers:
      - name: mongo
        image: <my image of mongodb>
        ports:
        - containerPort: 27017
          protocol: TCP
          name: mongo 
        volumeMounts:
        - mountPath: /data/db
          name: az-files-mongo-storage
      volumes:
      - name: az-files-mongo-storage
        persistentVolumeClaim:
          claimName: mong-pvc
      ---
apiVersion: v1
kind: Service
metadata:
  name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    app: mongo

3 个答案:

答案 0 :(得分:4)

对于您的问题,您可以查看另一个issue遇到相同的错误。因此,当另一个已经为mongo完成的卷似乎无法初始化相同的卷时。从错误中,我建议您只使用卷来存储数据。您可以在创建映像时在Dockerfile中进行初始化。或者,您可以通过StatefulSets为每个吊舱使用创建卷,建议您使用它。

更新

下面的yam文件将为您工作:

apiVersion: v1
kind: Service
metadata:
  name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    app: mongo
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      app: mongo 
  serviceName: mongo
  replicas: 3 
  template:
    metadata:
      labels:
        app: mongo 
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: mongo
        image: charlesacr.azurecr.io/mongodb:v1
        ports:
        - containerPort: 27017
          name: mongo
        volumeMounts:
        - name: az-files-mongo-storage
          mountPath: /data/db
  volumeClaimTemplates:
    - metadata:
        name: az-files-mongo-storage
      spec:
        accessModes:
          - ReadWriteOnce
        storageClassName: az-files-mongo-storage
        resources:
          requests:
            storage: 5Gi

并且您需要在创建statefulSet之前创建StorageClass。下面的yam文件:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: az-files-mongo-storage
provisioner: kubernetes.io/azure-file
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=1000
  - gid=1000
parameters:
  skuName: Standard_LRS

然后豆荚工作正常,下面的屏幕截图:

enter image description here

答案 1 :(得分:0)

您可以配置name。但是,卷或存储类型仍应支持此模式。 Find the table here

根据该表,AzureFile支持ReadWriteMany,但不支持AzureDisk。

答案 2 :(得分:0)

您应该对Mongodb使用StatefulSets。部署是针对无状态服务的。