nerdctl, como interfaz de línea de comandos compatible con Docker para containerd, incluye un módulo de funciones experimentales (docs/experimental.md) que explora tecnologías emergentes. Entre estas, el mecanismo de migración en caliente (Live Migration) se encuentra en fase de pruebas internas, permitiendo mover un contenedor en ejecución a un host distinto sin detener el servicio.
Principio técnico y arquitectura
La migración en caliente garantiza la continuidad del servicio mediante tres fases:
- Captura de estado: La herramienta CRIU serializa el estado de memoria y los metadatos del sistema de archivos del contenedor.
- Transferencia incremental: Se utiliza un algoritmo de sincronización diferencial para minimizar el volumen de datos transmitidos entre nodos.
- Restauración: En el nodo destino, se reconstruye el espacio de nombres de red y se reanuda el contexto de los procesos.
La arquitectura de red aislada en modo Rootless (docs/rootless.md) proporciona la base para esta funcionalidad.
Preparación del entorno de pruebas
Requisitos del sistema
- Kernel de Linux ≥ 5.14 (con
CONFIG_CHECKPOINT_RESTOREactivado). - cotnainerd ≥ 1.7.0-rc.1.
- CRIU ≥ 3.17.
Proceso de instalación
# Habilitar la funcionalidad experimental en containerd
sudo cp ./Dockerfile.d/etc_containerd_config.toml /etc/containerd/config.toml
sudo systemctl restart containerd
# Instalar dependencias necesarias
sudo apt install -y criu libseccomp-dev
Uso de comandos y ejemplos
Sintaxis general
# Lanzar un contenedor de prueba
nerdctl run -d --name miapp nginx:alpine
# Crear un punto de verificación (checkpoint)
nerdctl checkpoint create miapp ckpt-01
# Restaurar el checkpoint en otro nodo
scp -r /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/ckpt-01 usuario@nodo-destino:/ruta/contenedores/
nerdctl restore --force miapp ckpt-01
Parámetros clave
| Parámetro | Función | Estado |
|---|---|---|
--live |
Habilita modo de migración incremental | Experimental |
--tcp-port |
Define el puerto para transferencia de datos de migración | Experimental |
--skip-files |
Omite la transferencia de archivos estáticos grandes | Estable |
Resultados de pruebas y compatibilidad
Se realizaron 10 migraciones con servicios sin estado como Nginx y Redis. El tiempo promedio de migración fue de 2.3 segundos, con una ventana de interrupción de servicio inferior a 50 ms.
Limitaciones actuales:
- No es compatible con contenedores que montan directorios del host.
- Requiere deshabilitar SELinux y AppArmor en modo obligatorio.
- Contenedores de Windows no son soportados actualmente (
docs/experimental.md).
Advertencias y buenas prácticas
Esta es una función experimental; no se recomienda su uso en producción. Para pruebas:
- Validar primero con aplicaciones de ejemplo como
examples/compose-wordpress. - Utilizar el modo depuración con
nerdctl --debugpara registrar el proceso. - Inspeccionar el estado del contenedor con
nerdctl inspectantes de la migración.
Roadmap futuro
Según el plan en docs/experimental.md, esta función está prevista para la versión 2.0 con:
- Integración transparente de CRIU para checkpoints.
- Soporte para migración completa de aplicaciones Docker Compose.
- Incorporación de verificaciones de salud previas a la migración.