Después de utilizar Harbor durante un período, es posible que experimente problemas de congelación o errores al realizar pull/build como "no space left on device". También puede observar que los builds se completan exitosamente pero las imágenes no aparecen en docker images, lo que generalmente indica que el espacio en disco de Docker está lleno.
A continuación se presentan los pasos para diagnosticar y resolver este problema:
Verificar el tamaño del directorio de almacenamiento de imágenes de Docker:
du -hs /var/lib/docker/
Identificar las particiones con mayor espacio disponible y crear un nuevo directorio para Docker:
df -h
mkdir -p /opt/data/docker
Detener el servicio de Docker:
systemctl stop docker
Migrar los archivos del directorio /var/lib/docker al nuevo directorio:
rsync -avz /var/lib/docker /opt/data/docker
Editar el archivo /etc/docker/daemon.json para agregar el siguiente parámetro:
vi /etc/docker/daemon.json
{
"data-root": "/opt/data/docker"
}
Recargar y reiniciar Docker:
systemctl daemon-reload && systemctl restart docker
Verificar el cambio:
docker info
Métodos Comunes de Limpieza de Docker
El comando docker system df funciona de manera similar al comando df en Linux, mostrando el uso del disco en Docker:
El comando docker system prune permite limpiar el disco, eliminando contenedores detenidos, volúmenes de datos no utilizados, redes y colagndo imágenes (imágenes sin etiqueta).
docker system prune -a realiza una limpieza más exhaustiva, eliminando todas las imágenes de Docker que no estén siendo utilizadas por contenedores. Tenga en cuenta que estos comandos eliminarán los contenedores temporalmante detenidos y las imágenes de Docker no utilizadas.
Resolución de problemas de parada en Kubernetes y etcd debido al espacio en disco
Manejo de problemas de espacio lleno en el clúster
Primero, implementaremos una solución de migración mediante enlaces simbólicos:
Los directorios predeterminados de docker y kubelet están en /var/lib/, los migraremos a un directorio en ./opt:
# mv /var/lib/docker /var/lib/docker-respaldo
Crear enlace simbólico:
# ln -s /ruta/al/archivo_original /ruta/al/archivo_destino
Problema: Al intentar eliminar los datos originales aparece el error "Device or resource busy"
Causa: Los montajes de docker/kubelet impiden la eliminación de los archivos.
Solución:
Ejecute el comando:
# mount
Busque las entrancias que contengan /var/lib/docker o /var/lib/kubelet
# umount /var/lib/docker-respaldo/overlay2/bcb3739ab39e056b12f4d7f86caff5f500cb43b2f29a180871e8b566e18016dd/merged
# rm -rf /var/lib/docker-respaldo/*
La migración se ha completado exitosamente.
Posteriormente, si nota que el sistema sigue sin espacio, siga este proceso de diagnóstico:
# du -h --max-depth=1 / | grep -v "^[0-9.]*[MG]\s*$" | sort -hr >> /tmp/uso_disco.txt
# du -h --max-depth=1 /var/ | sort -hr >> /tmp/uso_disco_var.txt
# cd /var/log
# ll -h
# tail -n 100 message
Los archivos de registro pueden ser muy grandes, especialmente los de Kubernetes, debido a los niveles de registro. Los registros pueden crecer más de 3GB en promedio por semana.
La solución es eliminar periódicamente los archivos de registro antiguos.
Por lo tanto, es recomendable implementar etcd como despliegue independiente para evitar olvidar la limpieza y que Kubernetes agote el espacio, causando que el clúster etcd falle y todo el sistema colapse.
</div> Solución adicional para espacio en disco no liberado
<div>```
Cuando los métodos anteriores no resuelven el problema de espacio en disco, incluso cuando el comando du no muestra un uso tan elevado, puede utilizar el siguiente método:
A veces, los archivos han sido eliminados pero el espacio no se ha liberado. Reiniciar el sistema es una solución pero no la óptima.
Utilice el siguiente comando para identificar procesos que tienen archivos eliminados pero aún en uso:
lsof | grep "DEL"
Finalice estos procesos mediante sus PID:
kill [PID]
Este método puede liberar instantáneamente grandes cantidades de espacio, reduciendo el uso de disco de manera significativa.
Niveles de registro en Kubernetes
--v=0 Generalmente útil para que siempre sea visible para un operador.
--v=1 Nivel de registro predeterminado razonable si no desea verbosidad.
--v=2 Información útil de estado estable sobre el servicio y mensajes importantes que pueden correlacionarse con cambios significativos en el sistema. Este es el nivel de registro predeterminado recomendado para la mayoría de los sistemas.
--v=3 Información extendida sobre cambios.
--v=4 Nivel de depuración de verbosidad.
--v=6 Muestra los recursos solicitados.
--v=7 Muestra los encabezados de solicitudes HTTP.
--v=8 Muestra el contenido de las solicitudes HTTP