Configurar el tiempo de espera de incumplimiento de PDB

En este documento, se muestra cómo configurar un valor de tiempo de espera en caso de que el vaciado de un nodo de clúster infrinja un presupuesto de interrupción del Pod (PDB).

Cuando se vacía un nodo, se deben finalizar todos los Pods. De forma predeterminada, si la finalización de un Pod infringe un PDB, se bloquea el vaciado del nodo.

En algunas situaciones, es posible que desees configurar un tiempo máximo que el vaciado de un nodo puede bloquearse por un incumplimiento del PDB. Por ejemplo, es posible que desees configurar un valor de tiempo de espera antes de comenzar una actualización del clúster. También es posible que debas configurar un valor de tiempo de espera para un nodo que se encuentra bloqueado por un incumplimiento de PDB.

Establece un valor de tiempo de espera

Cada nodo está representado por un objeto Machine.

Enumera los objetos Machine del clúster:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Reemplaza CLUSTR_KUBECONIFG por la ruta de acceso del archivo kubeconfig del clúster.

Resultado de ejemplo:

my-node-pool-7f864959cd-cw472
my-node-pool-7f864959cd-kh86m
my-node-pool-7f864959cd-wtpvx

Abre un objeto Machine para editarlo:

kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME

Reemplaza MACHINE_NAME por el nombre del objeto Machine.

En el editor, agrega esta anotación:

onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT

Reemplaza TIMEOUT por una string que especifique la duración del tiempo de espera. Las unidades de tiempo válidas son “s”, “m” y “h”. Algunos ejemplos de valores de tiempo son “1h”, “1h30m”, “10m” y “100s”.

Si estableces el valor del tiempo de espera en “0s”, los incumplimientos de PDB nunca agotarán el tiempo de espera. Esto es igual que el comportamiento predeterminado.

Ejemplo:

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"

Cierra la sesión de edición.

Actualizaciones progresivas

Durante una actualización progresiva, se crea primero una máquina de aumento nueva. Luego, el nodo antiguo se vacía y, una vez que se expulsan todos los Pods, se borran los objetos Machine y Node anteriores. La anotación del tiempo de espera de incumplimiento de PDB no se conserva en el objeto Machine recién creado.