Je souhaite accéder et modifier les fichiers de mon PersistentVolume Kubernetes sur mon ordinateur local (macOS), mais je ne comprends pas où trouver ces fichiers!
Je pointe mon hostPath à / tmp / wordpress-volume
mais je ne le trouve nulle part. Quel est le secret caché qui me manque
J'utilise la configuration suivante sur un cluster docker-for-desktop Version 2.0.0.2 (30215) code>.
kind: Deployment metadata: name: wordpress # ... spec: containers: - image: wordpress:4.8-apache # ... volumeMounts: - name: wordpress-volume mountPath: /var/www/html volumes: - name: wordpress-volume persistentVolumeClaim: claimName: wordpress-volume-claim
kind: PersistentVolumeClaim metadata: name: wordpress-volume-claim # ...
kind: PersistentVolume metadata: name: wordpress-volume spec: # ... hostPath: path: /tmp/wordpress-volume
3 Réponses :
Tout d'abord, vous devez vous rappeler que Kubernetes s'exécute sur le cluster minikube
.
minikube
s'exécute lui-même sur une machine virtuelle. Donc, ce chemin ne sera pas sur votre machine hôte, mais plutôt sur le chemin de la machine virtuelle.
Mais avec minikube
, nous avons un moyen facile de le faire. Vous devez d'abord monter le répertoire hôte sur minikube
.
(Si vous utilisez des fournisseurs de cloud, vous aurez un moyen de créer un stockage. Pour GCE, vous avez gcePersistentDisk
)
minikube mount / path / to / dir / to / mount: / vm-mount-path
Maintenant
kind: PersistentVolume metadata: name: wordpress-volume spec: # ... hostPath: path: /vm-mount-path
Si vous créez cette ressource, cela devrait enregistrer le fichier sur votre ordinateur hôte.
J'essayais d'utiliser docker-for-desktop , mais à ce stade, je vais passer à Minikube qui semble avoir plus de documentation sur le sujet.
Euh, tu te souviens où tu l'as vu? J'ai découvert cet article qui dit: "dans l'ordre pour que le pvc se lie réellement au pv, vous devez leur donner à tous les deux le même storageClassName dans la définition yaml. "
Je ne me souviens pas où mais, si vous n'utilisez pas StorageClass Resource, vous devrez peut-être ajouter spec.storageClassName: ""
dans un yaml où vous créez du PVC. Il garantit d'utiliser le PV existant au lieu d'en créer un nouveau.
Oui, j'ai trouvé un autre article traitant de la même chose ici
Grâce à @ aman-tuladhar et quelques heures perdues sur Internet, j'ai découvert qu'il vous suffit de vous assurer que storageClassName
est défini pour vous PersistentVolume et PersistentVolumeClaim .
Conformément à la documentation si vous voulez éviter cela Kubernetes génère dynamiquement des PersistentVolumes sans tenir compte de celui que vous avez déclaré statiquement, vous pouvez simplement définir une chaîne vide ""
.
Dans mon cas j'ai défini storageClassName: manual
.
kind: PersistentVolumeClaim metadata: name: wordpress-volume-claim spec: storageClassName: manual # ...
kind: PersistentVolume metadata: name: wordpress-volume spec: # ... storageClassName: manual hostPath: path: /tmp/wordpress-volume
Dans le cas de MacOS et Kubernetes dans Docker pour Mac. Comment trouver un emplacement réel d'un volume local basé sur un répertoire dans VM
1) Créez un nouveau PersistentVolume avec un chemin unique:
blablabla.yml:
XXX
kubectl apply -f blablabla.yml
2) Connectez-vous à la VM:
find / -name blablabla /containers/services/docker/rootfs/mnt/blablabla # <= got it! /containers/services/docker/tmp/upper/mnt/blablabla
3) Trouvez votre volume:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty # then press Enter
4) Quitter l'écran: Ctrl-a ky, Détacher de l'écran: Ctrl-a d
Parfois, vous avez une chance d'avoir une session d'écran cassée, cela ressemble à un stdout garbé avec des symboles en désordre, stdin fonctionne toujours bien. Dans ce cas, essayez de mettre fin à toutes les sessions d'écran et de vous reconnecter à la première. Ou redémarrez simplement votre docker pour mac.