Questo documento mostra come configurare un valore di timeout nel caso in cui lo svuotamento di un nodo del cluster violi un budget di interruzione dei pod (PDB).
Quando un nodo viene svuotato, tutti i pod al suo interno devono essere terminati. Per impostazione predefinita, se la terminazione di un pod viola un PDB, lo svuotamento del nodo viene bloccato.
In alcuni casi, potrebbe essere opportuno configurare un tempo massimo per cui lo svuotamento di un nodo può essere bloccato da una violazione PDB. Ad esempio, potresti voler configurare un valore di timeout prima di avviare un aggiornamento o un upgrade del cluster. In alternativa, potrebbe essere necessario configurare un valore di timeout per un nodo a cui al momento è stato impedito lo svuotamento a causa di una violazione PDB.
Impostare un valore di timeout
Ogni nodo è rappresentato da un oggetto Machine.
Elenca gli oggetti Machine nel cluster:
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines
Sostituisci CLUSTR_KUBECONIFG con il percorso del file kubeconfig del cluster.
Output di esempio:
my-node-pool-7f864959cd-cw472 my-node-pool-7f864959cd-kh86m my-node-pool-7f864959cd-wtpvx
Apri un oggetto Macchina per la modifica:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME
Sostituisci MACHINE_NAME con il nome dell'oggetto Machine.
Nell'editor, aggiungi questa annotazione:
onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT
Sostituisci TIMEOUT con una stringa che specifica la durata del timeout. Le unità di tempo valide sono "s", "m", "h". Esempi di valori di tempo sono "1h", "1h30m", "10m" e "100s".
Se imposti il valore del timeout su "0s", le violazioni PDB non scadranno mai. Questo è il comportamento predefinito.
Esempio:
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"
Chiudi la sessione di modifica.
aggiornamenti in sequenza.
Durante un aggiornamento progressivo, viene creata prima una nuova macchina di picco. Poi il vecchio nodo viene svuotato e, dopo che tutti i pod al suo interno sono stati espulsi, vengono eliminati sia l'oggetto Machine sia l'oggetto Node. L'annotazione del timeout della violazione PDB non persiste nell'oggetto Machine appena creato.