Saltar al contenido

¿Cómo puedo resolver la presión del disco en mis nodos de trabajo de Amazon EKS?

5 minutos de lectura
0

Quiero resolver la excesiva presión del disco en mis nodos de trabajo de Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción corta

La presión del disco en los nodos de trabajo de Kubernetes se produce cuando el espacio disponible en disco cae a niveles bajos. Para mitigar la presión del disco, aumente el tamaño del volumen de EBS o agregue nuevos nodos de trabajo al grupo de nodos para proporcionar más capacidad de disco. También puede ajustar los umbrales de recopilación de imágenes no utilizadas de Kubelet, configurar la rotación de los registros de tiempo de la versión ejecutable del contenedor y limpiar manualmente las imágenes no utilizadas para administrar de manera efectiva el uso del disco.

Es importante supervisar y administrar el almacenamiento efímero para evitar problemas de presión del disco y garantizar que los clústeres de Kubernetes se ejecuten correctamente.

Si tiene una presión del disco excesiva, es posible que reciba un mensaje de error.

En el caso del nodo, es posible que se muestre un mensaje de error parecido al siguiente:

"Warning DiskPressure ... kubelet, worker-node DiskPressure on node"

En el caso de Kubelet, es posible que se muestre un mensaje de error parecido al siguiente:

"Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold"

Para confirmar el problema, ejecute el comando df -h para comprobar el uso del disco en el nodo de trabajo.

Resultado de ejemplo:

/dev/nvme0n1p1   20G   18G  2.2G  90% /       
........

Nota: En el ejemplo anterior, el sistema de archivos raíz /dev/nvme0n1p1 tiene un uso del 90 %. El uso excesivo provoca problemas de presión del disco y errores en la recopilación de imágenes no utilizadas.

Resolución

Aumento del tamaño del volumen de EBS

Para aumentar el espacio en disco disponible, aumente el tamaño del volumen de EBS que está conectado al nodo de trabajo. Para obtener más información, consulta ¿Cómo puedo aumentar o reducir el tamaño de mi volumen de EBS?

Nota: En lugar de cambiar el tamaño de los volúmenes efímeros, se recomienda aprovisionar nuevas instancias con el tamaño de disco deseado. Use las nuevas instancias para sustituir la instancia anterior. Luego, las nuevas instancias tienen el tamaño de disco correcto y se alinean con la mentalidad de infraestructura inmutable.

Adición de un nuevo nodo de trabajo al grupo de nodos

Agregue un nuevo nodo al grupo o grupo de nodos para agregar más volumen de disco al clúster y distribuir la carga de trabajo entre varios nodos. Esto alivia la presión del disco en cualquier nodo individual.

Configuración de umbrales personalizados para el recopilador de elementos no utilizados de Kubelet

Configure Kubelet para iniciar la recopilación de imágenes no utilizadas en diferentes umbrales de uso del disco. Para ello, defina los argumentos --image-gc-high-threshold y --image-gc-low-threshold para permitir más búfer. Por ejemplo, establezca el umbral alto en el 70 % y el umbral bajo en el 60 % para mantener un búfer mayor de espacio libre en disco. Esta configuración permite que Kubelet realice la recopilación de imágenes no utilizadas antes de que el disco se llene de forma crítica.

Para obtener más información sobre cómo configurar estos argumentos en los nodos de trabajo, consulte ¿Cómo configuro los nodos de trabajo de Amazon EKS para limpiar la caché de imágenes en un porcentaje específico del uso del disco?

Comprobación y ajuste de la rotación de registros de la versión ejecutable del contenedor

Las aplicaciones en contenedores escriben registros en stdout y stderr, y los archivos de registro los administra la versión ejecutable del contenedor. Se recomienda ajustar la configuración de rotación de registros para la versión ejecutable del contenedor en los nodos de trabajo.

Para configurar la rotación de registros, en el caso de containerd, use las opciones containerd.runc.log del archivo de configuración /etc/cotainerd/config/toml. Configure las opciones log_file_max y log_file_max_size para controlar la cantidad máxima de archivos de registro rotados y el tamaño máximo de cada archivo de registro.

Limpieza de imágenes de contenedores no utilizadas

Si Kubelet no puede realizar una recopilación de imágenes no utilizadas de forma automática, limpie manualmente las imágenes de contenedor no utilizadas en el nodo de trabajo. Para eliminar las imágenes que cuelgan o no se utilizan y liberar una cantidad considerable de espacio en disco, use el comando crictl rmi --prune.

Administración del almacenamiento efímero

Para lograr la estabilidad a largo plazo y el buen funcionamiento de las aplicaciones, se recomienda administrar adecuadamente el almacenamiento efímero. Si no establece límites para el almacenamiento efímero, es posible que un pod consuma todo el espacio en disco del nodo en el que se ejecuta.

Para mitigar este riesgo, establezca las solicitudes y los límites de almacenamiento efímero adecuados para sus pods. Realice las siguientes acciones para determinar los límites:

  • Para identificar los requisitos de almacenamiento de los pods, analice las necesidades de almacenamiento de la aplicación, los datos temporales y cualquier otro archivo que esté almacenado en el almacenamiento efímero. A continuación, puede estimar los requisitos de almacenamiento de cada pod.
  • Para establecer las solicitudes y los límites de almacenamiento efímero, defina la cantidad mínima de almacenamiento efímero necesaria para que el pod funcione correctamente. A continuación, el programador de Kubernetes puede asignar nodos con suficientes recursos de almacenamiento para sus pods.
    Ejemplo:
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:latest
        resources:
            requests:
                ephemeral-storage: "1Mi"
            limits:
                ephemeral-storage: "2Mi"
OFICIAL DE AWSActualizada hace un año