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:
créé un disque dans GCE manuellement:
gcloud compute disks create --size 5Gi disk-for-rabbitmq --zone europe-west1-b
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
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 deDelete
?
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?
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.