Aide-mémoire CKAD
exemple YAML StorageClass Kubernetes
Un StorageClass nomme comment un claim obtient un disque. Un claim qui ne nomme pas de classe prend le défaut. La classe est au niveau du cluster.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: rancher.io/local-path
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
kubectl get sc
kubectl patch sc local-path -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
kubectl patch sc fast -p '{"allowVolumeExpansion":true}'
kubectl patch pvc data -p '{"spec":{"resources":{"requests":{"storage":"2Gi"}}}}'
Champs
- provisioner
- Le plugin qui crée le volume. Utiliser la chaîne nommée par la tâche. kubernetes.io/no-provisioner ne crée rien.
- reclaimPolicy
- Delete ou Retain, copié sur le nouveau volume. Le défaut est Delete. Figé après la création.
- volumeBindingMode
- Immediate lie tout de suite. WaitForFirstConsumer attend un Pod. Le défaut est Immediate. Figé après la création.
- allowVolumeExpansion
- true laisse un claim grandir. Patcher ce champ, puis augmenter requests.storage. Un claim ne rétrécit pas.
- storageclass.kubernetes.io/is-default-class
- “true” marque le défaut. Mettre l’autre classe à “false”. Un claim qui omet storageClassName prend le défaut le plus récent.
- kubectl get
- (default) est la classe qu’un claim prend quand il omet storageClassName. La première colonne est le nom.
- kubectl patch
- Pose l’annotation de défaut, ou allowVolumeExpansion. provisioner, reclaimPolicy et volumeBindingMode sont refusés.
Pièges
- storageclass.kubernetes.io/is-default-class à “true” marque le défaut. Toute autre valeur, ou pas d’annotation, ne le marque pas. Un claim qui omet storageClassName prend la classe par défaut la plus récente. Mettre la classe précédente à “false”. Les claims déjà là gardent leur classe.
- provisioner, parameters, reclaimPolicy et volumeBindingMode sont figés à la création. Supprimer le StorageClass et le recréer. allowVolumeExpansion se patche. Ensuite augmenter requests.storage du claim. Le claim ne peut pas rétrécir, et le provisioner doit supporter l’expansion.
- volumeBindingMode vaut Immediate par défaut, et lie dès qu’un volume correspond. WaitForFirstConsumer reste Pending jusqu’à ce qu’un Pod utilise le claim. kubernetes.io/no-provisioner ne crée pas de disque. Vous écrivez le PersistentVolume, et storageClassName correspond des deux côtés.
- Un StorageClass n’a pas de namespace. reclaimPolicy vaut Delete par défaut et est copié sur les volumes que cette classe provisionne. Un volume écrit à la main garde son propre persistentVolumeReclaimPolicy. Un storageClassName vide sur un claim ne se lie qu’à un volume dont la classe est vide aussi. Omettre le champ et, quand une classe est marquée par défaut, cette classe est remplie.
Doc officielle Storage Classes Change the default StorageClass