Подключите локальный каталог к ​​контейнеру в мини-кубе

Я запускаю minikube v0.24.1. В этом миникубе я создам Pod для моего nginx-приложения. А также я хочу передать данные из моего локального каталога.

Это означает, что я хочу установить локальный $HOME/go/src/github.com/nginx в мой Pod

Как я могу это сделать?

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:0.1
    name: nginx
    volumeMounts:
    - mountPath: /data
      name: volume
  volumes:
  - name: volume
    hostPath:
      path: /data

Ответ 1

Вы не можете напрямую подключить локальный каталог к ​​своему Pod.

Сначала вам нужно подключить каталог $HOME/go/src/github.com/nginx к мини-миниму.

$ minikube start --mount-string="$HOME/go/src/github.com/nginx:/data"

Затем, если вы установите /data в свой Pod с помощью hostPath, вы получите данные локального каталога в Pod.

Существует другой способ

Каталог хоста $HOME устанавливается в каталог minikube /hosthome. Здесь вы получите свои данные

$ ls -la /hosthome/go/src/github.com/nginx

Итак, чтобы установить этот каталог, вы можете изменить свой хост-хост Pod

hostPath:
  path: /hosthome/go/src/github.com/nginx

Ответ 2

Я опробовал решение для аэрокита, но обнаружил, что мне нужно передать --mount, а также --mount-string "local-path:minikube-path", чтобы смонтировать каталог в миникубе.

minikube start --mount-string ${HOME}/go/src/github.com/nginx:/data --mount. Потратил некоторое время на выяснение этого.

Ответ 3

Я нашел способ.

Таким образом, вы можете напрямую смонтировать каталог в контейнер. Вам не нужно сначала монтировать каталог в minikube.

Мы можем указать каталог, который мы хотим добавить в контейнер, используя hostPath в volumes

  volumeMounts:
    - name: crypto-config
      mountPath: <PATH IN CONTAINER>
    - name: channel-artifacts
      mountPath: /opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    - name: chaincode
      mountPath: /opt/gopath/src/github.com/chaincode
  volumes:
    - name: crypto-config
      hostPath:
        path: <YOUR LOCAL DIR PATH>
    - name: channel-artifacts
      hostPath:
        path: /Users/akshaysood/Blockchain/Kubernetes/Fabric/network/channel-artifacts
    - name: chaincode
      hostPath:
        path: /Users/akshaysood/Blockchain/Kubernetes/Fabric/network/chaincode

Ответ 4

Для уже запущенного мини-куба вы можете сделать следующее:

nohup minikube mount <host-directory-path>:<desired-minikube-directory-path> &

Ответ 5

DefaultMountDir

Minikube по умолчанию уже подключает домашний каталог к виртуальной машине:

  • на Mac он монтирует каталог всех пользователей - /Users
  • в Linux и Windows просто дом текущего пользователя - homedir.HomeDir()

Вы можете увидеть, как это происходит, если вы просматриваете источники Minikube.
Вот поиск на данный момент, но результат может измениться со временем:
https://github.com/kubernetes/minikube/search?q=DefaultMountDir&unscoped_q=DefaultMountDir

Определение HomeDir(): https://godoc.org/k8s.io/client-go/util/homedir

Вы всегда можете сделать minikube ssh в виртуальной машине Minikube и изучить ее:

$ df -hl
Filesystem      Size  Used Avail Use% Mounted on
...
/Users          466G  442G   25G  95% /Users

Поскольку Minikube является кластером Kubernetes с одним узлом, вы можете смонтировать /Users/... внутри своих модулей.

Рекомендуемый способ

minikube mount /path/to/dir/to/mount:/vm-mount-path - это рекомендуемый способ монтирования каталогов в мини-куб, чтобы их можно было использовать в локальном кластере Kubernetes. Команда работает на всех поддерживаемых платформах.

Смотрите документацию и пример:https://github.com/kubernetes/minikube/blob/master/docs/host_folder_mount.md

Ответ 6

Не уверен, что присоединился к вечеринке поздно, но я сделал отображение root: root, выполнив следующую команду:

minikube start --mount-string="/:/"

Это просто смонтирует корневой каталог вашей локальной файловой системы в minikube и обеспечит бесперебойную работу систем. Надеюсь, это поможет.