HostPath с minikube - Kubernetes

обновление: Я подключился к minikubevm, и я вижу, что мой каталог хоста установлен, но там нет файлов. Также, когда я создаю файл, он не в моей машине. Любая связь между ними

Я пытаюсь смонтировать каталог хоста для разработки моего приложения с kubernetes.

как рекомендовал doc, я использую minikube для запуска кластера kubernetes на моем компьютере. Цель состоит в том, чтобы создать среду с Docker и kubernetes для разработки моего приложения. Я хочу чтобы смонтировать локальный каталог, чтобы мой докер прочитал приложение кода оттуда. Но это не работа. Любая помощь была бы очень признательна.

мое тестовое приложение (сервер.в JS):

var http = require('http');
var handleRequest = function(request, response) {
response.writeHead(200);
response.end("Hello World!");
}
var www = http.createServer(handleRequest);
www.listen(8080);

мой файла Docker:

FROM node:latest
WORKDIR /code
ADD code/ /code
EXPOSE 8080
CMD server.js

моя конфигурация pod kubernetes: (pod-конфигурация.и YAML)

apiVersion: v1
kind: Pod
metadata:
  name: apiserver
spec:
  containers:
  - name: node
    image: myusername/nodetest:v1
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: api-server-code-files
      mountPath: /code
  volumes:
  - name: api-server-code-files
    hostPath:
      path: /home/<myuser>/Projects/nodetest/api-server/code

мои папки:

/home/<myuser>/Projects/nodetest/
- pod-configuration.yaml
- api-server/
    - Dockerfile
    - code/
        - server.js

когда я запускаю свой образ docker без Тома hostPath, это, конечно, работает, но проблема в том, что при каждом изменении я буду должен воссоздать мой образ, который действительно не силен для разработки, поэтому мне нужен путь к хосту Тома.

есть идеи ? почему мне не удается смонтировать локальный каталог ?

Спасибо за помощь.

3 ответов


EDIT: похоже, решение состоит в том, чтобы использовать контейнер привилегированные, или вручную смонтировать домашнюю папку, чтобы позволить VM MiniKube читать с вашего пути к хосту -- https://github.com/boot2docker/boot2docker#virtualbox-guest-additions. (Хвала Элиэлю за то, что он это понял).

абсолютно возможно настроить том hostPath с помощью minikube - но есть много причуд, и для этого не очень хорошая поддержка вопрос.

Попробуйте удалить ADD code/ /code из вашего Dockerfile. инструкция Докера "добавить" копирует код с вашего хост-компьютера в


Теперь они дали minikube mount который работает на всей окружающей среде

https://github.com/kubernetes/minikube/blob/master/docs/host_folder_mount.md

пробовал на Mac:

$ minikube mount ~/stuff/out:/mnt1/out
Mounting /Users/macuser/stuff/out into /mnt1/out on the minikube VM
This daemon process needs to stay alive for the mount to still be accessible...
ufs starting

и в РМО:

apiVersion: v1
kind: Pod
metadata:
  name: myServer
spec:
  containers:
  - name: myServer
    image: myImage
    volumeMounts:
    - mountPath: /mnt1/out
      name: volume
    # Just spin & wait forever
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]
  volumes:
  - name: volume
    hostPath:
      path: /mnt1/out

лучшей практикой было бы создание кода в вашем образе, вы не должны запускать образ с кодом, только что поступающим с диска. Ваш Dockerfile должен выглядеть больше как:

FROM node:latest COPY /code/server.js /code/server.js EXPOSE 8080 CMD /code/server.js

затем вы запускаете изображение на Kubernetes без каких-либо томов. Вам нужно перестроить образ и обновлять стручок каждый раз, когда вы обновляете код.

кроме того, в настоящее время я не знаю, что minikube позволяет монтировать между виртуальной машиной, которую он создает, и хостом, на котором вы его запускаете на.

Если вы действительно хотите экстремально быстрый цикл обратной связи изменения кода во время работы контейнера, вы можете использовать только Докер сам по себе с -v /path/to/host/code:/code без Kubernetes, а затем, как только вы будете готовы, создайте образ, разверните и протестируйте его на minikube. Однако я не уверен, что это сработает, если вы меняете main .JS-файл вашего приложения узла.