Как сохранить состояние работающего контейнера LXC?

Как сохранить состояние работающего контейнера LXC?

Используя VirtualBox или KVM, я могу сохранить состояние гостевой виртуальной машины, перезагрузить хост и затем возобновить гостевую.
Как я могу это сделать, если мой гость — это всего лишь контейнер, а не виртуальная машина?

решение1

Это можно сделать с помощью CRIU.

Обратите внимание, что это больше, чем он можеттеоретическибыть сделано, но если ваши контейнеры делают что-то хоть немного сложное (например, запускают systemd, который использует пространства имен, имеет tty и т. д.),это, скорее всего, потерпит неудачу.

Более практичный ответ — на данном этапе это невозможно сделать с помощью универсальных контейнеров. Возможно, в будущем, но это маловероятно, учитывая текущие темпы развития CRIU.

Конкретные команды различаются в зависимости от того, используете ли вы чистый LXC или демон управления LXD.


LXC

Если вы используете сырой LXC, вам понадобится этот lxc-checkpointинструмент. Вот несколько примеровна вики CRIU, истраницы руководства lxc-checkpoint.

Пожалуйста, обрати вниманиезапись в вики CRIUрекомендует вам настроить контейнеры особым образом, предположительно, чтобы попытаться избежать проблем с наследованием пространств имен и устройств:

lxc.console = none
lxc.tty = 0
lxc.cgroup.devices.deny = c 5:1 rwm

Это может стать решающим фактором, если вам необходимо разместить эти устройства в контейнере.

Чтобы создать контрольную точку:

lxc-checkpoint -s -D /path/to/checkpoint -n containername

(примечание -sостанавливает контейнер после создания контрольной точки)

Чтобы восстановить контрольную точку:

lxc-checkpoint -r -D /path/to/checkpoint -n containername

Контрольная точка останется, пока вы ее не удалите.


ЛКД

Если вы используете мгновенную установку LXD, вам сначала необходимо включить CRIU:

snap set lxd criu.enable=true
systemctl reload snap.lxd.daemon

Чтобы остановить контейнер с сохранением состояния:

lxc stop --stateful containername

Если вы позжеlxc start без --stateless, он должен вернуться в предыдущее состояние.

Вы также можете вручную создавать моментальные снимки состояния с помощью lxc snapshot/ lxc restore.

Связанный контент