MISE À JOUR: je me suis connecté au minikubevm et je vois mon répertoire Host monté mais il n'y a pas de fichiers là-bas. De plus, lorsque je crée un fichier là-bas, il ne sera pas dans ma machine hôte. Tout lien existe entre eux
J'essaie de monter un répertoire Host pour développer mon application avec kubernetes.
Comme le doc l'a recommandé, j'utilise minikube pour exécuter mon cluster kubernetes sur mon PC. L'objectif est de créer un environnement de développement avec docker et kubernetes pour développer mon application. Je veux monter un répertoire local pour que mon docker lise l'application de code à partir de là. Mais ce n'est pas du travail. Toute aide serait vraiment appréciée.
mon application de test (server.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);
mon Dockerfile:
FROM node:latest
WORKDIR /code
ADD code/ /code
EXPOSE 8080
CMD server.js
ma configuration pod kubernetes: (pod-configuration.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
mon dossier est:
/home/<myuser>/Projects/nodetest/
- pod-configuration.yaml
- api-server/
- Dockerfile
- code/
- server.js
Lorsque j'exécute mon image docker sans le volume hostPath, cela fonctionne bien sûr, mais le problème est que, à chaque changement, je dois recréer mon image qui n'est vraiment pas puissante pour le développement, c'est pourquoi j'ai besoin du volume hostPath.
Une idée ? pourquoi je n'arrive pas à monter mon répertoire local?
Merci pour l'aide.
EDIT: Il semble que la solution soit soit d'utiliser un conteneur privilégié , soit de monter manuellement votre dossier personnel pour permettre au MiniKube VM de lire à partir de votre hostPath - - https://github.com/boot2docker/boot2docker#virtualbox-guest-additions . (Nous remercions Eliel d'avoir compris cela).
Il est absolument possible de configurer un volume hostPath avec minikube - mais il y a beaucoup de bizarreries et il n'y a pas un très bon support pour ce problème particulier.
Essayez de supprimer ADD code/ /code
à partir de votre Dockerfile. instruction "AJOUTER" de Docker copie le code de votre machine hôte dans le /code
répertoire. C'est pourquoi la reconstruction de l'image met à jour avec succès votre code.
Lorsque Kubernetes essaie de monter le conteneur du /code
répertoire vers le chemin de l'hôte, il constate que ce répertoire est déjà plein du code qui a été intégré dans l'image. Si vous retirez cela de l'étape de génération, Kubernetes devrait être capable de monter avec succès le chemin de l'hôte lors de l'exécution.
Assurez-vous également de vérifier les autorisations du code/
répertoire sur votre machine hôte.
Ma seule autre pensée est liée au montage dans le répertoire racine. J'ai rencontré des problèmes lors du montage de volumes Kubernetes hostPath vers/depuis des répertoires dans le répertoire racine (je suppose que cela était lié aux autorisations). Donc, autre chose à essayer serait un mountPath comme /var/www/html
.
Voici un exemple d'un volume hostPath fonctionnel:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
volumes:
- name: example-volume
hostPath:
path: '/Users/example-user/code'
containers:
- name: example-container
image: example-image
volumeMounts:
- mountPath: '/var/www/html'
name: example-volume
Ils ont maintenant donné le minikube mount
qui fonctionne sur tous les environnements
https://github.com/kubernetes/minikube/blob/master/docs/Host_folder_mount.md
Essayé sur 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
Et en pod:
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