#kubernetes
#docker #kubernetes #владелец ранчо
Вопрос:
Я пытаюсь настроить путь к хосту для запуска модуля Mongodb.
У меня установлен только один узел kubernetes версии v1.8.5 с последней стабильной версией rancher.
У меня есть создать папку /mongo/data
и разрешить все разрешения всем пользователям.
Я могу отлично запускать docker image с помощью docker без sudo:
docker run --name some-mongo -v /mongo/data:/data/db mongo:3.2.1
Но когда я запускаю kubernetes:
sudo kubectl create -f mongodb.yml
Я получаю MountVolume.SetUp failed for volume "mongo" : hostPath type check failed: /mongo/data is not a directory
Это mongodb.yml:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: mongo:3.2.1
name: test-container
volumeMounts:
- mountPath: /data/db
name: mongo
volumes:
- name: mongo
hostPath:
# directory location on host
path: /mongo/data
# this field is optional
type: Directory
Есть идеи, где я должен искать?
Ответ №1:
Изменение type: Directory
на type: DirectoryOrCreate
работает для меня.
Ответ №2:
Если вы случайно используете minikube, не забывайте, что minikube сам по себе является контейнером. Поэтому hostPath
указывает на путь в этом контейнере, а не на путь на вашем хост-компьютере. Вам необходимо смонтировать путь к компьютеру в контейнер minikube, а затем в модуль.
Пример: minikube start --mount --mount-string="/host/path:/minikubeContainer/path"
Комментарии:
1. Чувак, огромное спасибо! Просто примечание — minikube — это виртуальная машина, а не контейнер.
2. @Skyblade Рад помочь, также рад узнать что-то новое! Не возражаете ли вы расширить «мини-куб — это виртуальная машина»? Я подумал, что если вы используете Docker, то minikube является его контейнером. Например. вы можете сделать
docker ps
и посмотреть, как работает контейнер minikube. Кроме того, у меня было много проблем, когда я пытался освободить место на диске путем очисткиdocker system prune
, и это удалило мой остановленный контейнер minikube. Я был в полном замешательстве, например, куда делся мой экземпляр minikube ?! Возможно, я ошибаюсь, но откуда вы знаете, что это виртуальная машина?3. Мой плохой. В прошлом это было правдой, но теперь minikube использует драйвер docker, так что это не так. Извините, что ввел вас в заблуждение.
Ответ №3:
Удаление type: Directory
из mongodb.yml работает, как ожидалось
Обновить:
В новых версиях, изменяющихся type: Directory
на type: DirectoryOrCreate
, создается каталог.
Ответ №4:
Вы создаете контейнер docker непосредственно на главном узле. В результате этого вы сможете запустить контейнер docker с вновь созданным каталогом. Но когда вы запускаете файл kubernetes yaml, он намеревается запускаться на рабочем узле. Поскольку вы создаете каталог на главном узле, kubelet не может найти каталог на рабочем узле и сбой. Вот почему значение «DirectoryorCreate» для флага типа является своего рода решением для этого.
Ответ №5:
Я получил точно такую же ошибку, как вы показали.
В моем случае проблема заключалась в том, что папка, определенная в пути к хосту тома, не была создана. После создания папки на сервере рабочего узла проблема была устранена.
Ответ №6:
Как хост Windows, изменение формата пути с Windows-стиля C:Users...
на Unix-стиль /C/Users/...
сработало для меня.