3
votes

Comment accéder aux fichiers PersistentVolume sur docker-for-desktop?

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>.

PersistentVolume

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

PersistentVolumeClaim

kind: PersistentVolumeClaim
metadata:
  name: wordpress-volume-claim
# ...

Déploiement

kind: PersistentVolume
metadata:
  name: wordpress-volume
spec:
  # ...
  hostPath:
    path: /tmp/wordpress-volume


0 commentaires

3 Réponses :


2
votes

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.

Suivez ceci documentation du minikube pour plus de détails


4 commentaires

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



6
votes

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 .

PersistentVolume

kind: PersistentVolumeClaim
metadata:
  name: wordpress-volume-claim
spec:
  storageClassName: manual
  # ...

PersistentVolumeClaim

kind: PersistentVolume
metadata:
  name: wordpress-volume
spec:
  # ...
  storageClassName: manual
  hostPath:
    path: /tmp/wordpress-volume


0 commentaires

1
votes

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

Remarque

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.


0 commentaires