Ce document explique comment configurer une valeur de délai avant expiration en cas de drainage d'un nœud de cluster qui enfreint un budget d'interruption de pod (PDB).
Lorsqu'un nœud est drainé, tous les pods du nœud doivent être arrêtés. Par défaut, si la terminaison d'un pod enfreint un budget d'interruption de pod, le drainage du nœud est bloqué.
Dans certains cas, il est conseillé de configurer un délai maximal pendant lequel le drainage d'un nœud peut être bloqué par un cas de non-respect PDB. Par exemple, vous pouvez configurer un délai avant expiration avant de lancer la mise à jour ou la mise à niveau d'un cluster. Vous devrez peut-être configurer une valeur de délai avant expiration pour un nœud actuellement bloqué par un cas de non-respect PDB.
Définir un délai avant expiration
Chaque nœud est représenté par un objet Machine.
Répertoriez les objets Machine dans le cluster :
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines
Remplacez CLUSTR_KUBECONIFG par le chemin d'accès au fichier kubeconfig du cluster.
Exemple de résultat :
my-node-pool-7f864959cd-cw472 my-node-pool-7f864959cd-kh86m my-node-pool-7f864959cd-wtpvx
Ouvrez un objet Machine pour le modifier :
kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME
Remplacez MACHINE_NAME par le nom de l'objet Machine.
Dans l'éditeur, ajoutez l'annotation suivante :
onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT
Remplacez TIMEOUT par une chaîne qui spécifie la durée du délai avant expiration. Les unités valides sont "s", "m" et "h". Exemples de valeurs temporelles : "1h", "1h30m", "10m" et "100s".
Si vous définissez la valeur du délai avant expiration sur "0s", les cas de non-respect PDB n'expirent jamais. Ce comportement est identique à celui par défaut.
Exemple :
apiVersion: cluster.k8s.io/v1alpha1 kind: Machine metadata: annotations: kubelet-version: 1.23.5-gke.1502 onprem.cluster.gke.io/gke-on-prem-version: 1.12.0-gke.430 vm-ip-address: 203.0.113.2 onprem.cluster.gke.io/pdb-violation-timeout: "5m"
Fermez la session de modification.
Mises à jour progressives
Lors d'une mise à jour progressive, une machine de surutilisation est créée en premier. Ensuite, l'ancien nœud est drainé et, une fois tous les pods qu'il contient supprimés, l'ancien objet Machine et l'objet Node sont tous deux supprimés. L'annotation du délai avant expiration des cas de non-respect PDB n'est pas conservée sur le nouvel objet Machine.