
Usando VirtualBox o KVM, puedo guardar el estado de la VM invitada, reiniciar el host y luego reanudar el invitado.
¿Cómo puedo hacer eso si mi invitado es solo un contenedor y no una VM?
Respuesta1
Esto se puede hacer con CRIU.
Tenga en cuenta que es más que puedeteóricamentepor hacer, pero si sus contenedores hacen algo remotamente complejo (como, por ejemplo, ejecutar systemd que usa espacios de nombres, tiene un tty, etc...),probablemente fallará.
La respuesta más práctica es que no se puede hacer con contenedores de uso general en esta etapa. Quizás en el futuro, pero es poco probable dado el ritmo actual de desarrollo de CRIU.
Los comandos específicos difieren dependiendo de si estás usando LXC sin formato o el demonio de administración LXD.
LXC
Si está utilizando LXC sin formato, querrá la lxc-checkpoint
herramienta. Hay algunos ejemplosen la wiki de CRIU, ylas páginas de manual de lxc-checkpoint.
tenga en cuentala entrada wiki de CRIUrecomienda configurar sus contenedores de una manera especial, presumiblemente para tratar de evitar los problemas de herencia de dispositivos y espacios de nombres:
lxc.console = none
lxc.tty = 0
lxc.cgroup.devices.deny = c 5:1 rwm
Esto puede terminar siendo un factor decisivo si necesita estos dispositivos en su contenedor.
Para crear un punto de control:
lxc-checkpoint -s -D /path/to/checkpoint -n containername
(la nota -s
detiene el contenedor después de la creación del punto de control)
Para restaurar un punto de control:
lxc-checkpoint -r -D /path/to/checkpoint -n containername
El punto de control permanecerá activo hasta que lo elimines.
LXD
Si está utilizando una instalación instantánea de LXD, primero deberá habilitar CRIU:
snap set lxd criu.enable=true
systemctl reload snap.lxd.daemon
Para detener un contenedor con estado:
lxc stop --stateful containername
si luegolxc start
sin --stateless
, debería reanudar el estado anterior.
También puede crear manualmente instantáneas con estado con lxc snapshot
/ lxc restore
.