Debian

salsa.debian.org: Postmortem de movimiento de registro de Docker fallido

Nuevos mantenedores de Debian (noviembre y diciembre de 2020)

los Salsa El equipo de administración proporciona el siguiente informe sobre la migración fallida del registro del contenedor de Docker. El registro de contenedores de Docker almacena imágenes de Docker, que se utilizan, por ejemplo, en el conjunto de herramientas Salsa CI. Esta migración habría trasladado todos los datos a Google Cloud Storage (GCS) y habría reducido significativamente el espacio del sistema de archivos utilizado en los sistemas Debian.

El registro de contenedores de Docker es parte del Distribución de Docker conjunto de herramientas. Este sistema admite múltiples backends para el almacenamiento de archivos: local, Amazon Simple Storage Service (Amazon S3) y Google Cloud Storage (GCS). Como Salsa ya usa GCS para el almacenamiento de datos, el equipo de administración de Salsa decidió mover todos los datos del registro de Docker también a GCS.

Migración y reversión

El 2019-08-06 se inició el proceso de migración. La migración en sí fue bien, aunque tardó un poco más de lo previsto. Sin embargo, como no todas las partes de la migración se habían probado correctamente, una prueba de la recolección de basura provocó un bicho en el software.

El 2019-08-10, los administradores de Salsa comenzaron a ver problemas con la recolección de basura. El trabajo que lo ejecuta se agotó después de una hora. Dentro de este período de tiempo, ni siquiera logró recopilar información sobre todas las capas utilizadas para ver qué puede limpiar. Un análisis del código fuente mostró que este defecto de diseño no se puede solucionar.

El 2019-08-13, el cambio se revertió al almacenamiento de datos en el sistema de archivos.

Almacenamiento de datos de registro de Docker

El registro de Docker almacena todos los datos sin indexación o referencias inversas en una estructura similar a un sistema de archivos compuesta por 4 tipos separados de información: Manifiestos de imágenes y contenido, etiquetas para los manifiestos, capas deduplicadas (o blobs) que almacenan los datos reales. y, por último, los enlaces que muestran qué blogs deduplicados pertenecen a sus respectivas imágenes, todo esto no permite una búsqueda fácil dentro de los datos.

La estructura del sistema de archivos está construida como solo para agregar, lo que permite agregar blobs y manifiestos, agregar, modificar o eliminar etiquetas. Sin embargo, la limpieza de elementos que no sean etiquetas no se puede lograr con las herramientas de mantenimiento.

Existe un proceso de recolección de basura que se puede usar para limpiar blobs sin referencia, sin embargo, de acuerdo con la documentación, el proceso solo se puede usar mientras el registro está configurado como de solo lectura y, desafortunadamente, no se puede usar para limpiar enlaces no utilizados.

Recolección de basura del registro de Docker en almacenamiento externo

Para la recolección de basura, la herramienta de registro necesita leer mucha información ya que no hay indexación de los datos. La herramienta se conecta al medio de almacenamiento y procede a descargar … todo, cada manifiesto e información sobre los blobs referenciados, lo que ahora tarda más de 1 segundo en procesar un único manifiesto. Este proceso tomará una cantidad significativa de tiempo, lo que en la configuración actual de almacenamiento externo haría casi imposible la limpieza.

Leasons aprendidas

El registro de Docker es una herramienta de almacenamiento de datos que solo se puede usar correctamente en el modo de solo incorporación. Si nunca limpia, funciona bien.

Tan pronto como desee eliminar los datos, se estropeará. Para Salsa, la limpieza de datos antiguos es en realidad una necesidad, ya que el registro actualmente crece alrededor de 20 GB por día.

Próximos pasos

Lamentablemente, no se puede hacer mucho con el registro de contenedores de Docker existente. ¿Quizás GitLab o alguien más le gustaría contribuir con una nueva implementación de un registro de Docker, ya sea integrado en GitLab o independiente?

Leave a Comment

You may also like