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.

Un officier de pont pose la main sur de petits coffres dans un anneau lumineux, tandis que des conteneurs de vrac et des caisses enchaînées attendent dans le noir. Un officier de pont pose la main sur de petits coffres dans un anneau lumineux, tandis que des conteneurs de vrac et des caisses enchaînées attendent dans le noir.
StorageClass
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
Laisser un seul défaut
kubectl get sc
kubectl patch sc local-path -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Agrandir un claim
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

S’entraîner sur un cluster réel →