Configura il timeout per le violazioni PDB

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.