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 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.