Límites de adjuntos 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 programar las cargas de trabajo y dimensionar los grupos de nodos de forma adecuada, es fundamental que comprendas la cantidad máxima de volúmenes persistentes que se pueden adjuntar a un nodo de GKE. Si deseas tener un mayor control sobre la programación de cargas de trabajo, en especial cuando usas varios tipos de discos con límites de conexión variables en una sola instancia, puedes usar una etiqueta de nodo para anular los límites de conexión predeterminados.

Este documento está dirigido a los especialistas en almacenamiento que crean y asignan almacenamiento, y a los administradores de GKE que administran la programación de cargas de trabajo y el tamaño de los grupos de nodos. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que se hace referencia en el contenido de Google Cloud , consulta Tareas y roles comunes de los usuarios 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 servicio de Persistent Disk Google Cloud .

Cuando habilitas el controlador de CSI de Persistent Disk de Compute Engine (PDCSI) en los clústeres de GKE, el controlador de PDCSI calcula y registra el límite de conexión de volúmenes persistentes por nodo en 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 de PDCSI informó límites de conexión inexactos, específicamente un número superior al límite real, no se podrán programar los Pods y quedarán en estado Pending. Esto puede ocurrir en tipos de máquinas de tercera generación, como C3, que tienen límites de conexión diferentes para Hyperdisks y Persistent Disks.

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

En el caso de 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 la combinación de volúmenes de Persistent Disk y Hyperdisk. 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:

  • En el caso de los tipos de máquinas de cuarta generación, como C4, el controlador de 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. El límite de conexión informado suele estar dentro de un rango de 8 a 128 volúmenes persistentes.
  • En cambio, para los tipos de máquinas de tercera generación, como C3, el controlador de 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, ya que el límite real puede ser inferior a 128 según el recuento de CPU virtuales.

Puedes anular el límite de adjuntos predeterminado con una etiqueta de nodo.

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

Anula el límite predeterminado de volúmenes persistentes adjuntos

Si tienes requisitos específicos o configuraciones de nodos en los que deseas adjuntar una cantidad específica de volúmenes persistentes a tus nodos, puedes anular el límite predeterminado de volúmenes persistentes adjuntos 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 específico de volúmenes persistentes adjuntos, 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 actual de volúmenes persistentes conectados 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 de pdcsi-node estén en estado Running.

Reemplaza lo siguiente:

  • NODE_POOL_NAME: Es el nombre del grupo de nodos que deseas crear o actualizar.
  • CLUSTER_NAME: Es el nombre del clúster para el grupo de nodos que deseas 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 adjuntar. Si especificas un valor superior a 127, se ignorará la etiqueta del nodo y el controlador de PDCSI usará el límite predeterminado de volúmenes persistentes adjuntos. 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, comprueba las etiquetas y la capacidad del nodo.

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

  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 de 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 Cómo verificar los recursos asignables en un nodo.

¿Qué sigue?