web-dev-qa-db-fra.com

Que faire avec le volume persistant libéré?

TL; DR. Je ne sais plus comment accéder aux données après avoir supprimé un PVC, ni pourquoi PV ne disparaîtrait pas après avoir supprimé un PVC.

Étapes que je prends:

  1. créé un disque dans GCE manuellement:

    gcloud compute disks create --size 5Gi disk-for-rabbitmq --zone europe-west1-b
    
  2. couru:

    kubectl apply -f /tmp/pv-and-pvc.yaml
    

    avec la configuration suivante:

    # /tmp/pv-and-pvc.yaml
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-for-rabbitmq
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 5Gi
      gcePersistentDisk:
        fsType: ext4
        pdName: disk-for-rabbitmq
      persistentVolumeReclaimPolicy: Delete
      storageClassName: standard
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-for-rabbitmq
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: standard
      volumeName: pv-for-rabbitmq
    
  3. supprimé manuellement un PVC (à un niveau élevé: je simule ici un scénario désastreux, comme une suppression accidentelle ou une mauvaise configuration d'une version helm):

    kubectl delete pvc pvc-for-rabbitmq
    

À ce stade, je vois ce qui suit:

$ kubectl get pv
NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                      STORAGECLASS   REASON   AGE
pv-for-rabbitmq   5Gi        RWO            Delete           Released   staging/pvc-for-rabbitmq   standard                8m
$

Une question secondaire, améliorez simplement ma compréhension: pourquoi PV est toujours là, même si sa politique de récupération est définie sur Delete? Isn 'est-ce pas ce que les docs disent pour la politique de récupération de Delete?

Maintenant, si j'essaye de recréer le PVC pour retrouver l'accès aux données en PV:

$ kubectl apply -f /tmp/pv-and-pvc.yaml
persistentvolume "pv-for-rabbitmq" configured
persistentvolumeclaim "pvc-for-rabbitmq" created
$

J'obtiens toujours ceci pour pv s, par exemple un PV est bloqué dans l'état Released:

$
kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                             STORAGECLASS   REASON    AGE
pv-for-rabbitmq                            5Gi        RWO            Delete           Released   staging/pvc-for-rabbitmq          standard                 15m
$

... et j'obtiens ceci pour pvc s:

$
kubectl get pvc
NAME               STATUS    VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-for-rabbitmq   Pending   pv-for-rabbitmq   0                         standard       1m
$

Il semble que mon PV soit bloqué dans l'état Released et que le PVC ne puisse pas accéder au PV qui n'est pas dans l'état Available.

Alors, pourquoi le même PV et PVC ne peuvent plus être amis? Comment puis-je créer un PVC pour retrouver l'accès aux données dans le PV existant?

15
gmile

Vous courez dans l'idée fausse typique en pensant que le PV et le PVC sont plus liés qu'eux.

Volume persistant: Dans les K8, cette ressource a beaucoup d'options. Par exemple, hostPath réservera la taille spécifiée à partir du nœud sur lequel le pod s'exécute et la mappera sur le chemin souhaité sur les deux; votre pod et votre nœud.

Revendication de volume persistant: PVC, en particulier sur GKE, créera un disque persistant physique sur Google Cloud Platform et le joindra au nœud sur lequel le pod s'exécute, en tant que disque secondaire. Ainsi, la revendication est plus spécifique au fournisseur de cloud.

Remarque: vous n'avez pas besoin de créer manuellement le disque. Créez simplement la réclamation et vérifiez ce qui se passe. Vous devrez lui donner un peu de temps, mais finalement l'état devrait être BOUND, ce qui signifie que le disque persistant est créé, attaché et prêt à être utilisé.

Si tu fais df -h, il apparaîtra comme périphérique connecté, et il apparaîtra également avec kubectl get pv, car au final c'est un volume persistant

À propos de la suppression de choses. Lorsque vous supprimez un PV ou un PVC, rien ne se passe. Vous pouvez toujours entrer dans le module et accéder au chemin qui a été mappé. Aucun problème. Comme il n'est pas supprimé, le pod y a toujours accès. Maintenant, si votre pod tombe en panne et est recréé, sans ce PV ou PVC, vous obtiendrez une erreur.

0
suren