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.

Deux chasseurs restent dans un anneau lumineux pendant que l’équipage pousse le troisième hors de l’aire. Deux chasseurs restent dans un anneau lumineux pendant que l’équipage pousse le troisième hors de l’aire.
Créer
kubectl create pdb web-pdb --selector=app=web --min-available=2
minAvailable
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: web-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: web
  unhealthyPodEvictionPolicy: IfHealthyBudget
maxUnavailable
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: web-pdb
spec:
  maxUnavailable: 1
  selector:
    matchLabels:
      app: web
Inspecter
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

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