CrashLoopBackOff при увеличении числа реплик более 1 в кластере Azure AKS для образа MongoDB - PullRequest
3 голосов
/ 04 июня 2019

Нажмите здесь, чтобы получить экран ошибки

Я развертываю MongoDb в Azure AKS с общим доступом к файлам Azure в качестве тома (с использованием постоянного тома и утверждения постоянного тома).Если я увеличиваю реплики более чем на одну, то происходит CrashLoopBackOff.Создается только один модуль, а другие - не работают.

Мой файл Docker для создания образа MongoDb.

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 ]

4 голосов
/ 04 июня 2019

По вашей проблеме вы можете взглянуть на другую проблему на ту же ошибку. Таким образом, кажется, вы не можете инициализировать тот же объем, когда другой уже сделал это для монго. Из-за ошибки, я предлагаю вам просто использовать объем для хранения данных. Вы можете инициализировать в 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

И вам нужно создать 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

0 голосов
/ 04 июня 2019

вы должны использовать StatefulSets для mongodb. развертывания для служб без сохранения состояния.

0 голосов
/ 04 июня 2019

Вы можете настроить accessModes: - ReadWriteMany.Но все же том или тип хранилища должны поддерживать этот режим. Найдите таблицу здесь

Согласно этой таблице AzureFile поддерживает ReadWriteMany, но не AzureDisk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...