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 sul nodo devono essere terminati. Per impostazione predefinita, se la terminazione di un pod viola un PDB, lo svuotamento del nodo viene bloccato.
In alcune situazioni, potresti voler 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, potresti dover configurare un valore di timeout per un nodo a cui è attualmente 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 di timeout su "0s", le violazioni di PDB non andranno mai in timeout. Questo è lo stesso del 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 graduale, viene creata prima una nuova macchina di picco. Poi viene svuotato il vecchio nodo e, dopo che tutti i pod sono stati espulsi, vengono eliminati sia il vecchio oggetto Machine sia il vecchio oggetto Node. L'annotazione del timeout della violazione del PDB non viene mantenuta nel nuovo oggetto Machine creato.