Límites de conexión de volúmenes persistentes para nodos de GKE

En este documento, se explica cómo funcionan los límites de conexión de volúmenes persistentes para los discos persistentes y los hiperdiscos de Compute Engine en los nodos de Google Kubernetes Engine (GKE). Para la programación adecuada de las cargas de trabajo y el ajuste de tamaño del grupo de nodos, es fundamental que comprendas la cantidad máxima de volúmenes persistentes que se pueden conectar a un nodo de GKE. Si deseas tener un mayor control sobre la programación de las cargas de trabajo, en especial cuando usas varios tipos de discos con diferentes límites de conexión en una sola instancia, puedes usar una etiqueta de nodo para anular los límites de conexión predeterminados.

Este documento está destinado a especialistas en almacenamiento que crean y asignan almacenamiento, y a administradores de GKE que administran la programación de cargas de trabajo y el ajuste de tamaño del grupo de nodos. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que se hace referencia en Cloud de Confiance by S3NS el contenido, consulta Roles de usuario y tareas comunes de GKE Enterprise.

Descripción general

En GKE, cuando solicitas un PersistentVolume (PV) con el controlador CSI de Persistent Disk de Compute Engine (pd.csi.storage.gke.io), se aprovisiona un volumen de almacenamiento en bloque desde el Cloud de Confiance servicio de Persistent Disk.

Cuando habilitas el controlador CSI de Persistent Disk de Compute Engine (PDCSI) en clústeres de GKE, el controlador PDCSI calcula y comunica el límite de conexión de volúmenes persistentes por nodo al kubelet. Según esta información, el programador de Kubernetes toma decisiones de programación para garantizar que no programe demasiados Pods que requieran volúmenes persistentes en un nodo que haya alcanzado su capacidad de conexión. Si el controlador PDCSI informó límites de conexión inexactos, más específicamente, un número superior al límite real, no se programarán los Pods y se quedarán en estado Pending. Esto puede suceder en tipos de máquinas de tercera generación, como C3, que tienen diferentes límites de conexión para hiperdiscos y discos persistentes.

Comprende los límites de conexión de volúmenes persistentes

Para las generaciones de máquinas anteriores a la cuarta, el controlador PDCSI de Compute Engine establece un límite de conexión de volúmenes persistentes agregado de 128 discos (127 discos de datos más un disco de arranque) en todos los tipos de máquinas. El límite de conexión se aplica a los volúmenes de Persistent Disk y Hyperdisk combinados. En el caso de Hyperdisk, el límite de conexión está determinado por el tipo de máquina subyacente de Compute Engine, la cantidad de CPU virtuales que tiene la máquina y el tipo específico de Hyperdisk.

Por ejemplo:

  • Para los tipos de máquina de cuarta generación, como C4, el controlador PDCSI informa con precisión un límite de conexión predeterminado a Kubernetes que se calcula en función del recuento de CPU virtuales del nodo. Por lo general, el límite de conexión informado se encuentra dentro de un rango de 8 a 128 volúmenes persistentes.
  • Por el contrario, para los tipos de máquinas de tercera generación, como C3, el controlador PDCSI informa un límite de conexión predeterminado a Kubernetes como el límite fijo de 128 discos, lo que puede provocar una falla en la programación de Pods porque el límite real puede ser inferior a 128 según el recuento de CPU virtuales.

Puedes anular el límite de conexión predeterminado con una etiqueta de nodo.

Consulta los siguientes recursos útiles en la documentación de Compute Engine:

Anula el límite de conexión de volúmenes persistentes predeterminado

Si tienes requisitos o configuraciones de nodos específicos en los que deseas conectar una cantidad específica de volúmenes persistentes a tus nodos, puedes anular el límite de conexión de volúmenes persistentes predeterminado para un grupo de nodos con la siguiente etiqueta de nodo: node-restriction.kubernetes.io/gke-volume-attach-limit-override: VALUE.

Puedes usar esta etiqueta de nodo en las siguientes versiones de GKE:

  • 1.32.4-gke.1698000 y versiones posteriores
  • 1.33.1-gke.1386000 y versiones posteriores

Grupo de nodos nuevo

Para crear un grupo de nodos nuevo con un límite de conexión de volúmenes persistentes específico, ejecuta el siguiente comando:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE

Grupo de nodos existente

Para modificar el límite de conexión de volúmenes persistentes actual de un grupo de nodos existente, sigue estos pasos:

  1. Actualiza el límite de conexión en el grupo de nodos:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE
    
  2. Reinicia el DaemonSet pdcsi-node:

    kubectl rollout restart ds pdcsi-node -n kube-system
    

    El nuevo límite de conexión se aplica después de que los Pods pdcsi-node estén en estado Running.

Reemplaza lo siguiente:

  • NODE_POOL_NAME: Es el nombre del grupo de nodos que quieres crear o actualizar.
  • CLUSTER_NAME: Es el nombre del clúster para el grupo de nodos que quieres crear o actualizar.
  • VALUE: Es un número entero entre 0 y 127 para especificar la nueva cantidad de volúmenes persistentes que se pueden conectar. Si especificas un valor superior a 127, se ignora la etiqueta de nodo y el controlador PDCSI usa el límite de conexión de volúmenes persistentes predeterminado. El límite predeterminado es 128 para las máquinas de tercera generación y un valor basado en el recuento de CPU virtuales para las máquinas de cuarta generación.

Verifica la anulación

Para verificar si la anulación se aplicó correctamente, revisa las etiquetas y la capacidad del nodo.

En los siguientes comandos, reemplaza NODE_NAME por el nombre de un nodo que forma parte del grupo de nodos específico en el que aplicaste la etiqueta de nodo de anulación.

  1. Verifica las etiquetas del nodo:

    kubectl get node NODE_NAME --show-labels
    

    El resultado debe incluir la etiqueta node-restriction.kubernetes.io/gke-volume-attach-limit-override.

  2. Verifica la capacidad del nodo:

    kubectl describe node NODE_NAME
    

    El resultado debe incluir la capacidad attachable-volumes-gce-pd, que debe coincidir con el valor de anulación que estableciste para el grupo de nodos. Para obtener más información, consulta Verifica los recursos asignables en un nodo.

¿Qué sigue?