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-файл вашего приложения узла.