Aide-mémoire CKAD
exemple YAML PDB Kubernetes
Un PDB limite l’éviction volontaire. Poser minAvailable ou maxUnavailable, et un selector sur les labels du Pod. drain le respecte.
kubectl create pdb web-pdb --selector=app=web --min-available=2
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: web
unhealthyPodEvictionPolicy: IfHealthyBudget
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-pdb
spec:
maxUnavailable: 1
selector:
matchLabels:
app: web
kubectl get pdb
kubectl describe pdb web-pdb
Champs
- minAvailable
- Pods qui doivent rester Ready. Un entier, ou un pourcentage entre guillemets comme "50%". Un pourcentage s’arrondit au-dessus.
- maxUnavailable
- Pods qui peuvent être indisponibles. Reste juste quand le nombre de réplicas change. Un pourcentage s’arrondit au-dessus, donc plus de Pods peuvent tomber que le pourcentage ne le dit. Ceci ou minAvailable, pas les deux. Chaque Pod sélectionné doit partager un seul contrôleur.
- selector
- Obligatoire. Matcher les labels du template de Pod. Un selector vide matche chaque Pod du namespace.
- matchLabels
- Les labels du Pod, pas les metadata du Deployment. Un raté laisse ALLOWED DISRUPTIONS à 0.
- unhealthyPodEvictionPolicy
- IfHealthyBudget est le défaut. Un Pod Running qui n’est pas Ready peut partir seulement tant que currentHealthy vaut au moins desiredHealthy. AlwaysAllow l’expulse même si le budget est déjà cassé.
- kubectl create pdb
- Nom court de poddisruptionbudget. --min-available ou --max-unavailable, plus --selector. Ajouter -n quand la tâche nomme un namespace.
- kubectl get
- ALLOWED DISRUPTIONS est status.disruptionsAllowed. 0 signifie que drain attend.
- kubectl describe
- Montre le selector, le budget, et currentHealthy face à desiredHealthy.
Pièges
- Poser minAvailable ou maxUnavailable, jamais les deux. L’API rejette l’objet. maxUnavailable reste juste quand le nombre de réplicas change, et seulement si chaque Pod sélectionné appartient au même contrôleur. Un Pod nu utilise un minAvailable entier. minAvailable: 2 sur un Deployment de 2 laisse disruptionsAllowed à 0.
- selector doit matcher les labels du template de Pod. Un selector vide matche chaque Pod du namespace. Un selector qui ne matche rien affiche ALLOWED DISRUPTIONS 0.
- kubectl drain utilise l’API d’éviction et attend tant que disruptionsAllowed vaut 0. kubectl delete pod ne consulte pas le PDB. Un rolling update n’est pas limité par lui, et un crash de nœud n’est pas bloqué par lui. Monter les réplicas pour qu’un Pod puisse partir. Ne pas supprimer le PDB pour finir le drain.
- Healthy signifie Ready=True. IfHealthyBudget, le défaut, n’expulse pas un Pod Running qui n’est pas Ready quand le budget est déjà cassé, donc un CrashLoop peut bloquer drain. AlwaysAllow expulse ces Pods. Les Pods Pending, Succeeded et Failed peuvent toujours être expulsés.
Doc officielle Specifying a Disruption Budget Disruptions