¿Cómo soluciono un contenedor o nodo anormal debido a que no hay espacio en disco de thin pool?
Descripción del problema
Cuando el espacio en disco de un thin pool en un nodo está a punto de agotarse, ocasionalmente se producen las siguientes excepciones:
No se pueden crear archivos o directorios en el contenedor, el sistema de archivos del contenedor es de solo lectura, el nodo está contaminado con la presión del disco o el nodo no está disponible.
Puede ejecutar el comando docker info en el nodo para ver el espacio utilizado y restante del thin pool para localizar el error. La siguiente figura es un ejemplo.
Causa posible
Cuando se utiliza el mapeador de dispositivos Docker, aunque puede configurar el parámetro basesize para limitar el tamaño del directorio /home de un solo contenedor (a 10 GB de forma predeterminada), todos los contenedores del nodo siguen compartiendo el thin pool del nodo para el almacenamiento. No están completamente aislados. Cuando la suma del espacio de thin pool utilizado por ciertos recipientes alcanza el límite superior, otros recipientes no pueden funcionar correctamente.
Además, después de eliminar un archivo en el directorio /home del contenedor, el espacio de thin pool ocupado por el archivo no se libera inmediatamente. Por lo tanto, incluso si basesize se establece en 10 GB, el espacio de thin pool ocupado por los archivos sigue aumentando hasta 10 GB cuando se crean archivos en el contenedor. El espacio liberado después de la eliminación del archivo se reutilizará solo después de un tiempo. Si el número de contenedores de servicio en el nodo multiplicado por tamaño básico es mayor que el tamaño del espacio de thin pool del nodo, existe la posibilidad de que se haya agotado el espacio de thin pool.
Solución
Cuando se agota el espacio de thin pool de un nodo, algunos servicios pueden migrarse a otros nodos para recuperar servicios rápidamente. Pero se recomienda utilizar las siguientes soluciones para resolver la causa raíz:
Solución 1:
Planifique correctamente la distribución del servicio y el espacio en disco del plano de datos para evitar el escenario donde el número de contenedores de servicio multiplicado por el tamaño básico es mayor que el tamaño del thin pool del nodo. Para ampliar el espacio del thin pool, consulte Ampliación de la capacidad del disco del nodo.
Solución 2:
Cree y elimine archivos en contenedores de servicio en el almacenamiento local (por ejemplo, emptyDir y hostPath) o en el directorio de almacenamiento en la nube montado en el contenedor. Tales archivos no ocupan el espacio de thin pool.
Solución 3:
Si el sistema operativo utiliza OverlayFS, los servicios se pueden desplegar en dichos nodos para evitar el problema de que el espacio en disco ocupado por los archivos creados o eliminados en el contenedor no se libere inmediatamente.