Configurar el tiempo de espera de infracción de PDB

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

Cuando se agota un nodo, se deben finalizar todos los pods del nodo. De forma predeterminada, si la finalización de un pod infringe una PDB, se bloquea el drenaje del nodo.

En algunas situaciones, puede que quieras configurar un tiempo máximo durante el que se pueda bloquear el drenaje de un nodo por una infracción de PDB. Por ejemplo, puede que quieras configurar un valor de tiempo de espera antes de iniciar una actualización o una mejora de un clúster. También puede que tengas que configurar un valor de tiempo de espera para un nodo que no se puede vaciar debido a una infracción de PDB.

Definir un valor de tiempo de espera

Cada nodo se representa mediante un objeto Machine.

Lista los objetos Machine del clúster:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Sustituye CLUSTR_KUBECONIFG por la ruta del archivo kubeconfig del clúster.

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

Sustituye MACHINE_NAME por el nombre del objeto Machine.

En el editor, añade esta anotación:

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

Sustituye TIMEOUT por una cadena 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 asigna el valor "0s" al tiempo de espera, las infracciones de PDB nunca se agotarán. Es lo mismo 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 continuas

Durante una actualización gradual, primero se crea una nueva máquina de sobrecarga. A continuación, se vacía el nodo antiguo y, después de que se hayan expulsado todos los pods, se eliminan tanto el objeto Machine antiguo como el objeto Node. La anotación de tiempo de espera de infracción de PDB no se conserva en el objeto Machine recién creado.