Configura timeout violazione PDB

Questo documento mostra come configurare un valore di timeout in caso di svuotamento di un nodo cluster in violazione di un budget di interruzione dei pod (PDB).

Quando un nodo viene svuotato, è necessario terminare tutti i pod nel nodo. Per impostazione predefinita, se la terminazione di un pod viola un PDB, lo svuotamento del nodo è bloccato.

In alcune situazioni, potresti voler configurare un tempo massimo durante il quale il 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. Oppure potresti dover configurare un valore di timeout per un nodo che è attualmente bloccato dallo svuotamento a causa di una violazione PDB.

Imposta un valore di timeout

Ogni nodo è rappresentato da un oggetto macchina.

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 da modificare:

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 dei PDB non scadranno mai. È lo stesso 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 sovraccarico. Quindi il vecchio nodo viene svuotato e, una volta rimossi tutti i pod, l'oggetto Macchina precedente e l'oggetto Nodo vengono eliminati. L'annotazione del timeout della violazione PDB non persiste per l'oggetto macchina appena creato.