MountVolume.Сбой установки для тома «mongo»: ошибка проверки типа пути к хосту: /mongo/data не является каталогом

#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/... сработало для меня.