Cómo habilitar la actualización automática de contenedores Podman

Cómo habilitar la actualización automática de contenedores Podman

Podman es una plataforma de contenedorización compatible con OCI que a menudo se usa en lugar de Docker. Su modelo sin daemon y su amplio conjunto de funciones lo convierten en un buen candidato para su uso tanto en desarrollo como en producción.

En este artículo, le mostraremos cómo usar el sistema de actualización automática de Podman para reiniciar sus contenedores cuando se publiquen nuevas imágenes. Podman se puede configurar para buscar periódicamente actualizaciones, extraer la imagen más reciente y regenerar los contenedores afectados utilizando su configuración actual.

¿Por qué actualizar automáticamente los contenedores?

Los contenedores suelen ser de corta duración, pero aún necesitan un mantenimiento regular. Una vulnerabilidad crítica dentro de una imagen podría dar acceso a los atacantes a su aplicación, que será explotada a las pocas horas de ser descubierta.

La mayoría de las tecnologías de contenedores populares requieren que actualice manualmente sus contenedores. Esto pone en los equipos de operaciones la responsabilidad de suscribirse a los anuncios de lanzamiento y crear herramientas que implementen nuevos cambios.

El sistema de actualización de contenedores incorporado de Podman resuelve este problema y mantiene las cargas de trabajo actualizadas. Los contenedores se pueden actualizar rápidamente después de que se insertan nuevas versiones de imágenes, lo que garantiza que sus implementaciones estén actualizadas con los últimos parches y correcciones de errores.

Habilitar actualizaciones automáticas

Las actualizaciones automáticas se habilitan para un contenedor estableciendo una io.containers.autoupdateetiqueta cuando se crea.

$ podman run -d -p 8080:80 \

–name nginx-contenedor\

–label io.containers.autoupdate=registro \

docker.io/library/nginx:latest

La etiqueta puede tener dos valores posibles:

  • registry– Mientras busca actualizaciones, Podman verificará con el registro de imágenes para ver si hay disponible una nueva versión de la etiqueta utilizada por su contenedor. En este caso, la imagen se extraerá y su contenedor se reiniciará. Las actualizaciones del registro solo funcionan si usa la ruta completa del registro; docker.io/library/nginx:latestel enlace que se muestra arriba es intencional ya nginx:latestque es demasiado vago.
  • local– Este método de actualización evita que Podman vea imágenes de contenedores que ya existen en el sistema de archivos de su host. El contenedor se reiniciará si la versión local de la etiqueta de imagen es diferente de la versión en la que se ejecuta el contenedor. Esto puede ser útil cuando se reconstruyen imágenes durante el desarrollo.

La presencia de la etiqueta hace que este contenedor NGINX de muestra sea elegible para actualizaciones automáticas. Sin embargo, se requiere más trabajo antes de que se puedan aplicar las actualizaciones.

Creación de un servicio Systemd

El mecanismo de actualización de Podman requiere que sus contenedores se ejecuten dentro de los servicios systemd. Debido a que Podman no tiene demonios, carece de un controlador central que pueda iniciar y detener sus contenedores. Envolverlos en un servicio systemd brinda capacidades de administración del ciclo de vida y la capacidad de reiniciarse en respuesta a ciertos eventos.

La CLI de Podman incluye un comando que crea una definición de módulo systemd a partir de un contenedor:

$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service

Los comandos anteriores crean un nuevo contenedor NGINX con un servicio systemd en la ubicación correcta.

Luego, vuelva a cargar systemd para registrar la definición del servicio, luego habilite e inicie el servicio:

$ systemctl daemon-reload

$ systemctl habilitar nginx-container.service

$ systemctl start nginx-container.service

Su contenedor NGINX ahora es un servicio systemd que se inicia automáticamente cuando se inicia su host. Puede usar systemctlcomandos para iniciar y detener un contenedor en lugar de la CLI de Podman:

$ systemctl start nginx-container.service

$ systemctl stop nginx-container.service

Para eliminar el contenedor en el futuro, debe detener, deshabilitar y eliminar el archivo del módulo de servicio. Después de eso, reinicie systemd para aplicar completamente los cambios.

$ systemctl stop nginx-container.service

$ systemctl deshabilitar nginx-container.service

$ rm /etc/systemd/system/nginx-container.servicio

$ systemctl daemon-reload

Realización de una actualización

Ahora todo está configurado para una actualización automática exitosa del contenedor NGINX. Puede ejecutar una verificación de actualización bajo demanda con el comando Podman auto-update:

$ podman auto-update

Intentando extraer docker.io/library/nginx:latest…

Obtener firmas de origen de imagen

POLÍTICA DE IMAGEN DE CONTENEDOR DE UNIDAD ACTUALIZADA

nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry true

Esto actualiza los contenedores en los servicios systemd que están disponibles para el usuario que ejecuta el comando. Es posible que deba usar sudopara seguir el ejemplo anterior; si es así, ejecute auto-updateel comando también como root:

$ sudo podman auto-update

En registryeste ejemplo, se utilizó una estrategia de actualización, por lo que Podman se conecta al registro de imágenes, busca cambios y luego extrae una nueva imagen, si corresponde. El resultado del comando muestra si se ha actualizado cada contenedor de servicios.

Debido a que los contenedores son administrados por systemd, Podman puede determinar si un nuevo contenedor se inició correctamente. Podman retrocederá automáticamente a una versión anterior de la imagen si se detecta un error de actualización. Para que esto funcione de manera confiable, la aplicación dentro del contenedor debe notificar a systemd que se inició correctamente. Esto se puede hacer ejecutando systemd-notify --ready.

Comprobando actualizaciones

En ocasiones, es posible que desee verificar si hay actualizaciones disponibles para su flota de contenedores sin aplicarlas de inmediato. Use auto-updateel --dry-runcomando flag para obtener una lista de servicios donde se publica la imagen actualizada:

$ podman auto-update --dry-run

POLÍTICA DE IMAGEN DE CONTENEDOR DE UNIDAD ACTUALIZADA

nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry pending

Los servicios mostrados pendingtienen una actualización disponible.

Aplicar actualizaciones en un horario

Ahora hemos configurado con éxito las actualizaciones de contenedores bajo demanda. No necesita extraer manualmente nuevas imágenes o reiniciar contenedores. El paso final es configurar un programa para que Podman aplique actualizaciones periódicamente sin ejecutar un auto-updatecomando.

La mayoría de las distribuciones de Podman incluyen un temporizador de sistema para este propósito. Puedes activar el temporizador usando systemctl:

$ systemctl enable podman-auto-update.timer

El temporizador está configurado para buscar actualizaciones todos los días. Puede personalizar la programación abriendo el archivo del temporizador usando systemctl edity cambiando el valor del OnCalendarcampo :

$ systemctl edit podman-auto-update.timer

[Temporizador]

OnCalendar=Fri *-*-* 18:00

La expresión de tiempo que se muestra arriba ejecutará la verificación de actualización todos los viernes a las 18:00. La sintaxis se describe en el manual de systemd .

Ahora que el temporizador está habilitado, puede comenzar a implementar sus io.containers.autoupdatecontenedores etiquetados. Se actualizarán y reiniciarán periódicamente, automatizando los procedimientos de mantenimiento.

No necesita usar el temporizador del sistema de Podman para programar actualizaciones. Puede ejecutar podman auto-updatedentro de su kit de herramientas existente u otro programador de tareas como cron.

Resumen

Las actualizaciones automáticas de Podman le permiten mover contenedores a nuevas versiones de imágenes sin reiniciarlos manualmente ni usar herramientas externas. Esto puede ayudarlo a mantener su flota de contenedores a medida que las imágenes publican correcciones de errores y correcciones de seguridad.

Si bien las actualizaciones automáticas son una herramienta útil, no deben usarse sin el debido cuidado. Permitir actualizaciones automáticas puede generar problemas propios si se libera accidentalmente una imagen corrupta. Los contenedores que se reinician solos también pueden causar tiempo de inactividad o interrumpir los servicios dependientes.

Por lo tanto, debe evaluar la idoneidad de su propia aplicación antes de implementar esta solución. Un enfoque intermedio es auto-update --dry-runejecutar periódicamente y enviar los resultados al servicio de supervisión. Esto le informa de las actualizaciones disponibles sin ponerlas en riesgo de que se apliquen sin aprobación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *