Accidentellement essayé de supprimer tous les PV de la grappe, mais heureusement, ils ont toujours des PVC qui leur sont liés. Tous les PV sont donc bloqués dans Status: Terminating.
Comment puis-je sortir le PV du statut de "terminaison" et le ramener à un état sain dans lequel il est "lié" au PVC et fonctionne pleinement?
La clé ici est que je ne veux pas perdre de données et que je veux m'assurer que les volumes sont fonctionnels et ne risquent pas d'être résiliés si la réclamation disparaît.
Voici quelques détails d'un kubectl describe
sur le PV.
$ kubectl describe pv persistent-vol-1
Finalizers: [kubernetes.io/pv-protection foregroundDeletion]
Status: Terminating (lasts 1h)
Claim: ns/application
Reclaim Policy: Delete
Voici la description sur la réclamation.
$ kubectl describe pvc application
Name: application
Namespace: ns
StorageClass: standard
Status: Bound
Volume: persistent-vol-1
Il est en fait possible de sauvegarder les données de votre PersistentVolume
avec Status: Terminating
et RetainPolicy
définis sur défaut (supprimer). Nous l'avons fait sur GKE, pas sûr d'AWS ou d'Azure mais je suppose qu'ils sont similaires
Nous avons eu le même problème et je vais publier notre solution ici au cas où quelqu'un d'autre aurait un problème comme celui-ci.
Votre PersistenVolumes
ne sera pas résilié tant qu'il n'y aura pas de module, de déploiement ou pour être plus spécifique - une PersistentVolumeClaim
l'utilisant.
Les mesures que nous avons prises pour remédier à notre état brisé:
Une fois que vous êtes dans la situation du PO, la première chose que vous voulez faire est de créer un instantané de votre PersistentVolumes
.
Dans la console GKE, accédez à Compute Engine -> Disks
et trouvez votre volume à cet endroit (utilisez kubectl get pv | grep pvc-name
), puis créez un instantané de votre volume.
Utilisez l'instantané pour créer un disque: gcloud compute disks create name-of-disk --size=10 --source-snapshot=name-of-snapshot --type=pd-standard --zone=your-zone
À ce stade, arrêtez les services utilisant le volume et supprimez le volume et la revendication de volume.
Recréez le volume manuellement avec les données du disque:
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: name-of-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
gcePersistentDisk:
fsType: ext4
pdName: name-of-disk
persistentVolumeReclaimPolicy: Retain
Maintenant, il suffit de mettre à jour votre revendication de volume pour cibler un volume spécifique, la dernière ligne du fichier yaml:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
namespace: my-namespace
labels:
app: my-app
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeName: name-of-pv
Malheureusement, vous ne pouvez pas enregistrer vos PV et vos données dans ce cas . Tout ce que vous pouvez faire est de recréer un PV avec Reclaim Policy: Retain
- cela évitera la perte de données à l'avenir . Vous pouvez en savoir plus sur les règles de récupération ici et ici .
Que se passe-t-il si je supprime un PersistentVolumeClaim (PVC)? Si le volume a été provisionné de manière dynamique, la stratégie de récupération par défaut est définie sur "effacer". Cela signifie que, par défaut, lorsque le PVC est supprimé, le Les ressources PV et de stockage sous-jacentes seront également supprimées. Si tu veux conserver les données stockées sur le volume, vous devez alors modifier la récupération stratégie de «supprimer» à «conserver» après la configuration du PV.