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 programar correctamente las cargas de trabajo y dimensionar los grupos de nodos, es fundamental que conozcas el número máximo de volúmenes persistentes que se pueden adjuntar a un nodo de GKE. Si quieres tener más control sobre la programación de las cargas de trabajo, sobre todo cuando usas varios tipos de disco con límites de conexión diferentes en una sola instancia, puedes usar una etiqueta de nodo para anular los límites de conexión predeterminados.

Este documento está dirigido a especialistas en almacenamiento que crean y asignan almacenamiento, así como a administradores de GKE que gestionan 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 habituales y las tareas de ejemplo que se mencionan en el Google Cloud contenido, consulta Roles y tareas habituales de los usuarios de GKE Enterprise.

Información general

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

Cuando habilitas el controlador de CSI para Persistent Disk en Compute Engine (PDCSI) en clústeres de GKE, el controlador PDCSI calcula y comunica el límite de acoplamiento de volúmenes persistentes por nodo al kubelet. En función de esta información, el programador de Kubernetes toma decisiones de programación para asegurarse de que no programa demasiados pods que requieran volúmenes persistentes en un nodo que haya alcanzado su capacidad de adjuntos. Si el controlador PDCSI ha informado de límites de adjuntos incorrectos (en concreto, un número superior al límite real), los pods no se programarán y se quedarán en el estado Pending. Esto puede ocurrir en tipos de máquinas de tercera generación, como C3, que tienen límites de adjuntos diferentes para los hiperdiscos y los discos persistentes.

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

En las generaciones de máquinas anteriores a la cuarta, el controlador PDCSI de Compute Engine establece un límite agregado de 128 discos persistentes (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 adjuntos se determina en función del tipo de máquina de Compute Engine subyacente, el número de vCPUs que tiene la máquina y el tipo de Hyperdisk específico.

Por ejemplo:

  • En el caso de los tipos de máquinas de cuarta generación, como C4, el controlador PDCSI informa con precisión de un límite de conexión predeterminado a Kubernetes que se calcula en función del número de vCPUs del nodo. El límite de adjuntos notificado suele estar entre 8 y 128 volúmenes persistentes.
  • Por el contrario, en el caso de los tipos de máquinas de tercera generación, como C3, el controlador PDCSI informa de un límite de conexión predeterminado a Kubernetes como el límite fijo de 128 discos, lo que puede provocar un error de programación de pods, ya que el límite real puede ser inferior a 128 en función del número de vCPUs.

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

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

Anular el límite de conexión de volumen persistente predeterminado

Si tienes requisitos o configuraciones de nodos específicos en los que quieres adjuntar un número concreto de volúmenes persistentes a tus nodos, puedes anular el límite predeterminado de volúmenes persistentes adjuntos de un grupo de nodos mediante 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.

Nuevo grupo de nodos

Para crear un grupo de nodos con un límite de conexión de volumen persistente 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 actual

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

  1. Actualiza el límite de adjuntos del 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 archivos adjuntos se aplica cuando los pdcsi-nodepods están en estado Running.

Haz los cambios siguientes:

  • NODE_POOL_NAME: el nombre del grupo de nodos que quieras crear o actualizar.
  • CLUSTER_NAME: el nombre del clúster del grupo de nodos que quieras crear o actualizar.
  • VALUE: un número entero entre 0 y 127 para especificar el nuevo número de volúmenes persistentes que se pueden adjuntar. Si especifica un valor superior a 127, se ignora la etiqueta del nodo y el controlador PDCSI utiliza el límite de acoplamiento de volumen persistente predeterminado. El límite predeterminado es 128 para las máquinas de tercera generación y un valor basado en el número de vCPUs para las máquinas de cuarta generación.

Verificar la anulación

Para comprobar si la anulación se ha aplicado correctamente, comprueba las etiquetas y la capacidad de los nodos.

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

  1. Comprueba las etiquetas de los nodos:

    kubectl get node NODE_NAME --show-labels
    

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

  2. Comprueba 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 sustitución que haya definido para el grupo de nodos. Para obtener más información, consulta Comprobar los recursos asignables de un nodo.

Siguientes pasos