Cas d'utilisation:
J'ai un répertoire NFS disponible et je veux l'utiliser pour conserver les données pour plusieurs déploiements et pods.
J'ai créé un PersistentVolume
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: http://mynfs.com
path: /server/mount/point
Je veux que plusieurs déploiements puissent utiliser ce PersistentVolume
, donc ma compréhension de ce qui est nécessaire est que je dois créer plusieurs PersistentVolumeClaims
qui pointeront tous sur ce PersistentVolume
.
kind: PersistentVolumeClaim
apiVersion: v1
metaData:
name: nfs-pvc-1
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Mi
Je crois que cela crée une revendication de 50 Mo sur le PersistentVolume
. Quand je lance kubectl get pvc
, Je vois:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc-1 Bound nfs-pv 10Gi RWX 35s
Je ne comprends pas pourquoi je vois une capacité de 10Gi, pas 50Mi.
Lorsque je change ensuite le PersistentVolumeClaim
déploiement yaml pour créer un PVC nommé nfs-pvc-2
J'ai compris:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc-1 Bound nfs-pv 10Gi RWX 35s
nfs-pvc-2 Pending 10s
Le PVC2 ne se lie jamais au PV. Est-ce un comportement attendu? Puis-je avoir plusieurs PVC pointant vers le même PV?
Lorsque je supprime nfs-pvc-1
, Je vois la même chose:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc-2 Pending 10s
Encore une fois, est-ce normal?
Quelle est la manière appropriée d'utiliser/réutiliser une ressource NFS partagée entre plusieurs déploiements/pods?
Fondamentalement, vous ne pouvez pas faire ce que vous voulez, car la relation PVC <--> PV est individuelle.
Si NFS est le seul stockage disponible et que vous souhaitez plusieurs PV/PVC sur une seule exportation nfs, utilisez Dynamic Provisioning et une classe de stockage par défaut.
Ce n'est pas encore dans les K8 officiels, mais celui-ci est dans l'incubateur et je l'ai essayé et cela fonctionne bien: https://github.com/kubernetes-incubator/external-storage/tree/master/nfs -client
Cela simplifiera considérablement votre provisioning de volume car vous n'avez qu'à prendre soin du PVC, et le PV sera créé en tant que répertoire sur le serveur/export nfs que vous avez défini.
De: https://docs.openshift.org/latest/install_config/storage_examples/shared_storage.html
Comme Baroudi Safwen l'a mentionné, vous ne pouvez pas lier deux pvc au même pv, mais vous pouvez utiliser le même pvc dans deux pods différents.
volumes:
- name: nfsvol-2
persistentVolumeClaim:
claimName: nfs-pvc-1 <-- USE THIS ONE IN BOTH PODS
Une revendication de volume persistant est exclusivement liée à un volume persistant.
Vous ne pouvez pas lier 2 pvc au même pv .
Je suppose que vous êtes intéressé par l'approvisionnement dynamique. J'ai rencontré ce problème lorsque je déployais des ensembles avec état, qui nécessitent un approvisionnement dynamique pour les pods. Vous devez donc déployer un provisionneur NFS dans votre cluster, le provisionneur NFS (pod) aura accès au dossier NFS (chemin d'hôte), et chaque fois qu'un pod demandera un volume, le provisionneur NFS le montera dans le répertoire NFS pour le compte de la gousse.
Voici le dépôt github pour le déployer:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs/deploy/kubernetes
Cependant, vous devez être prudent, vous devez vous assurer que le provisionneur nfs s'exécute toujours sur la même machine où vous avez le dossier NFS en utilisant le sélecteur de noeud puisque vous le volume est de type hostpath.
quelques points sur l'approvisionnement dynamique ..
l'utilisation du provisionnement dynamique de nfs vous empêche de modifier l'une des options de montage nfs par défaut. Sur ma plateforme, cela utilise rsize/wsize de 1M. cela peut provoquer d'énormes problèmes dans certaines applications utilisant de petits fichiers ou bloquant la lecture. (Je viens de toucher ce problème de manière importante)
dynamique est une excellente option si elle convient à vos besoins. Je suis maintenant coincé avec la création de 250 paires pv/pvc pour mon application qui était gérée par dynamique en raison de la relation 1-1.