web-dev-qa-db-fra.com

Kubernetes NFS Persistent Volumes - plusieurs revendications sur le même volume? Revendication bloquée en attente?

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?

18
John

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.

12
Volker Kerkhoff

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   
10
Javier Salmeron

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.

6
Baroudi Safwen

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.

0
Pete Smith