如何保存正在運作的LXC容器的狀態?

如何保存正在運作的LXC容器的狀態?

使用 VirtualBox 或 KVM,我可以儲存來賓虛擬機器的狀態,重新啟動主機,然後恢復來賓虛擬機器。
如果我的來賓只是一個容器而不是虛擬機,我該怎麼做?

答案1

這可以透過 CRIU 來完成。

請注意,它還可以理論上已經完成了,但是如果您的容器執行任何遠端複雜的操作(例如,請執行使用命名空間、具有 tty 等的 systemd...),它可能會失敗

更實際的答案是,現階段還無法用通用容器來完成。也許將來會發生,但考慮到 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

如果您使用 LXD 的快照安裝,您首先需要啟用 CRIU:

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

有狀態地停止容器:

lxc stop --stateful containername

如果你以後lxc start 沒有 --stateless,它應該恢復之前的狀態。

您也可以使用lxc snapshot/手動建立有狀態快照lxc restore

相關內容