Questo documento mostra come configurare un valore di timeout nel caso in cui lo svuotamento di un nodo cluster violi il budget di interruzione dei pod (PDB).
Quando un nodo viene svuotato, tutti i pod al suo interno devono essere arrestati. Per impostazione predefinita, se la terminazione di un pod viola un PDB, lo svuotamento del nodo è bloccato.
In alcune situazioni, è possibile configurare un intervallo di tempo massimo per cui il svuotamento di un nodo può essere bloccato da una violazione PDB. Ad esempio, potrebbe essere opportuno configurare un valore di timeout prima di avviare un aggiornamento o un upgrade del cluster. Oppure potresti dover configurare un valore di timeout per un nodo attualmente bloccato per lo svuotamento a causa di una violazione del PDB.
Imposta un valore di timeout
Ogni nodo è rappresentato da un oggetto Machine.
Elenca gli oggetti Machine presenti 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 Machine 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 temporali sono "1h", "1h30m", "10m" e "100s".
Se imposti il valore di timeout su "0s", le violazioni dei PDB non scadono mai. È uguale al 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 in sequenza, viene creata prima una nuova macchina di picco. Il vecchio nodo viene svuotato e, dopo aver rimosso tutti i pod al suo interno, vengono eliminati l'oggetto precedente e l'oggetto Node. L'annotazione del timeout della violazione PDB non viene mantenuto sull'oggetto Machine appena creato.