mongodb - 在用于 MongoDB 镜像的 Azure AKS 群集上增加副本数超过 1 时发生 CrashLoopBackOff

标签 mongodb azure ubuntu kubernetes

Click here to get error screen

我正在将 MongoDb 部署到 Azure AKS,并使用 Azure 文件共享作为卷(使用持久卷和持久卷声明)。如果我增加副本超过一个,则会发生 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

最佳答案

对于您的问题,您可以看一下另一个issue对于同样的错误。因此,当另一个卷已经为 mongo 完成时,您似乎无法初始化相同的卷。根据错误,我建议您只使用卷来存储数据。您可以在创建镜像时在 Dockerfile 中进行初始化。或者您可以通过StatefulSets为每个pod使用创建卷。而且更值得推荐。

更新:

下面的 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

然后 Pod 就可以正常工作了,截图如下:

enter image description here

关于mongodb - 在用于 MongoDB 镜像的 Azure AKS 群集上增加副本数超过 1 时发生 CrashLoopBackOff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56438719/

相关文章:

Azure - Web角色 - 根据主机过滤请求

linux - 在不同浏览器中测试网站的环境设置

mongodb - 数组的最小值和最大值?

java - Mongodb + java 按日期查询

mongodb-go-driver接口(interface)转换 : interface {} is primitive. ObjectID,不是primitive.ObjectID(来自不同包的类型)

scala - 在 azure HDInsight 应用程序中添加自定义日志

javascript - MongoDB填写查询结果中不包含的数据

Azure 函数 v2.无法从 nuget 引用 dll

mysql - E : Sub-process/usr/bin/dpkg returned an error code (1) while removing mysql completely from ubuntu 20. 04

java - Gtk-消息 : Failed to load module "unity-gtk-module"