Aide-mémoire CKAD
exemple YAML PersistentVolume Kubernetes
Un PersistentVolume est le stockage du cluster. Un claim dans un namespace se lie à un volume, et un Pod monte le claim.
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/data
type: DirectoryOrCreate
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
namespace: default
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
storageClassName: manual
resources:
requests:
storage: 1Gi
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: manual
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: Immediate
kubectl get pv,pvc
kubectl delete pvc data
kubectl patch pv data-pv --type=json -p='[{"op": "remove", "path": "/spec/claimRef"}]'
Champs
- storageClassName
- La même chaîne sur le volume et le claim. Immuable après create. Chaîne vide des deux côtés : pas de classe.
- accessModes
- ReadWriteOnce, c’est un nœud. Le claim et le volume listent le même mode.
- volumeMode
- Filesystem ou Block. Le défaut est Filesystem. Les deux objets doivent être d’accord.
- persistentVolumeReclaimPolicy
- Retain garde le volume après la suppression du claim. Il reste Released tant que claimRef est là.
- hostPath.path
- Répertoire sur le nœud, pas dans l’image. Le Pod et le volume doivent arriver sur ce nœud.
- hostPath.type
- DirectoryOrCreate crée le répertoire. Directory exige qu’il existe déjà.
- capacity.storage
- Ce que le volume offre. La demande du claim doit être inférieure ou égale.
- requests.storage
- Ce que le claim demande. Plus grand que le volume, et le claim reste Pending.
- provisioner
- kubernetes.io/no-provisioner signifie que vous créez le PersistentVolume vous-même.
- volumeBindingMode
- Immediate lie dès qu’un volume correspond. WaitForFirstConsumer attend un Pod.
- kubectl delete
- Supprimer un claim Pending et le recréer. La classe, le mode et volumeMode ne se changent pas sur place.
- kubectl patch
- Retire claimRef sur un volume Released pour que le claim suivant puisse se lier. Retain laisse cette ref.
Pièges
- Un claim se lie quand storageClassName, accessModes et volumeMode correspondent à un volume, et que requests.storage est inférieur ou égal à capacity.storage. Lire le volume d’abord et en copier ces quatre.
- storageClassName est immuable. Supprimer un claim Pending et le recréer avec la classe que le volume a déjà. Un claim qui omet le champ prend le StorageClass par défaut, qui ne correspond pas à un volume nommé manual.
- volumeBindingMode: WaitForFirstConsumer reste Pending jusqu’à ce qu’un Pod utilise le claim. Immediate lie dès qu’un volume correspond. kubernetes.io/no-provisioner ne crée pas de disques. Vous écrivez le PersistentVolume.
- Retain laisse le volume Released après la suppression du claim. Retirer claimRef avant qu’un autre claim puisse se lier. hostPath type DirectoryOrCreate crée le chemin sur le nœud. Le volume est au niveau du cluster. Le claim est namespacé. Le Pod nomme le claim.
Doc officielle Persistent Volumes Storage Classes