#mongodb #kubernetes #docker-volume #rancher
Вопрос:
Я настроил рабочую нагрузку mongodb в Rancher (2.5.8)
Рабочая нагрузка начинается нормально, если у меня есть контейнеры, настроенные на масштабирование до 1. Итак, 1 контейнер запустится, и все в порядке.
Однако, если я настрою рабочую нагрузку на 2 или более контейнеров, один контейнер запустится нормально, но затем другие не запустятся.
Вот как выглядит моя рабочая нагрузка, если я настрою ее на масштабирование до 2. Один контейнер запущен и работает нормально, но второй (и третий, если у меня его масштаб до 3) выходят из строя.
Если я удалю том, то все 2 контейнера запустятся нормально, но тогда данные будут храниться только в каждом контейнере (и теряются всякий раз, когда я повторно развертываю).
Но если у меня установлен том, то данные действительно хранятся в томе (хосте), но затем могут запускаться только в одном контейнере.
Заранее благодарим вас за любые предложения
Джейсон
Комментарии:
1. Привет, вы можете поделиться журналами из контейнера, который выходит из строя? Я бы подумал, что это может пролить некоторый свет на
CrashLoopBackOff
проблему, с которой вы сталкиваетесь.
Ответ №1:
Опубликуйте этот вики-ответ сообщества, чтобы установить базовый уровень и, надеюсь, показать одну из возможных причин, по которой mongodb
он не работает.
Не стесняйтесь редактировать/расширять.
Поскольку в этом вопросе отсутствует много информации, например, как он был создан, как mongodb
был подготовлен, а также отсутствуют журналы из контейнера, фактическую проблему может быть трудно определить.
Предполагая, что Deployment
он был создан со следующим манифестом:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
replicas: 1 # THEN SCALE TO 3
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo
imagePullPolicy: "Always"
ports:
- containerPort: 27017
volumeMounts:
- mountPath: /data/db
name: mongodb
volumes:
- name: mongodb
persistentVolumeClaim:
claimName: mongo-pvc
Часть настройки, на которую Volume
ссылается is, может отличаться (например hostPath
, может использоваться), но предпосылка этого была:
- Если
Pods
физически они ссылаются на одно и то жеdata/db/mongod
, оно перейдет вCrashLoopBackOff
состояние.
Далее по этой теме:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mongo-5d849bfd8f-8s26t 1/1 Running 0 45m
mongo-5d849bfd8f-l6dzb 0/1 CrashLoopBackOff 13 44m
mongo-5d849bfd8f-wgh6m 0/1 CrashLoopBackOff 13 44m
$ kubectl logs mongo-5d849bfd8f-l6dzb
<-- REDACTED -->
{"t":{"$date":"2021-06-05T12:43:58.025 00:00"},"s":"E", "c":"STORAGE", "id":20557, "ctx":"initandlisten","msg":"DBException in initAndListen, terminating","attr":{"error":"DBPathInUse: Unable to lock the lock file: /data/db/mongod.lock (Resource temporarily unavailable). Another mongod instance is already running on the /data/db directory"}}
<-- REDACTED -->
Ссылаясь на сайт O’Reilly о mongodb
производственной настройке:
Укажите альтернативный каталог для использования в качестве каталога данных; по умолчанию используется
/data/db/
(или, в Windows,datadb
на двоичном томе MongoDB). Каждому процессу mongod на компьютере требуется свой собственный каталог данных, поэтому, если вы запускаете три экземпляраmongod
на одной машине, вам понадобятся три отдельных каталога данных. Приmongod
запуске он создаетmongod.lock
файл в своем каталоге данных, что предотвращаетmongod
использование этого каталога любым другим процессом. Если вы попытаетесь запустить другой сервер MongoDB, используя тот же каталог данных, это выдаст ошибку:exception in initAndListen: DBPathInUse: Unable to lock the lock file: data/db/mongod.lock (Resource temporarily unavailable). Another mongod instance is already running on the data/db directory, terminating`
— Oreilly.com: Библиотека: Просмотр: Mongodb окончательное: Глава 21
В качестве альтернативного подхода вы можете использовать другие средства mongodb
, такие как, например:
- Docs.mongodb.com: Оператор Kubernetes: Мастер: Учебник: Развертывание набора реплик (я бы проверил конфигурацию
StorageClasses
здесь) - Bitname.com: Стек: Mongodb: Рулевой