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.