这是LXD2.0系列介绍文章的第九篇。LXD入门安装和配置您的第一个LXD容器资源控制图像管理LXD中的远程主机和容器迁移DockerLXD中的LXD简介LXD2.0中一个非常令人兴奋的功能,尽管是实验性的,它是支持容器检查点和恢复。简单地说,检查点/恢复意味着可以将正在运行的容器的状态序列化到磁盘,作为同一主机上的状态快照,或者相当于实时迁移的另一台主机上的状态快照。要求要使用容器实时迁移和有状态快照,您需要满足以下条件:最新的Linux内核,版本4.4或更高版本。CRIU2.0,可能需要一些精心挑选的提交,具体取决于您的确切内核配置。直接在主机上运行LXD。这些功能不能在容器嵌套下使用。对于迁移,目标主机必须至少实现源主机的指令集,目标主机内核必须至少提供与源主机相同的系统调用,并且任何安装在源主机上的内核文件系统也必须可以安装在目标主机上.Ubuntu16.04LTS已经提供了所有必需的依赖项,在这种情况下,您只需要安装CRIU本身:aptinstallcriu使用CRIU状态快照普通快照如下所示:04/2519:35UTC)(无状态)有状态快照如下所示:stgraber@dakara:~$lxcsnapshotc1second--statefulstgraber@dakara:~$lxcinfoc1|grepsecondsecond(takenat2016/04/2519:36UTC)(有状态)这意味着所有容器运行时状态作为快照的一部分序列化到磁盘。您可以在恢复无状态快照时恢复有状态快照:stgraber@dakara:~$lxcrestorec1secondstgraber@dakara:~$停止/启动有状态快照假设由于内核升级或其他类似维护需要重新启动机器。您可以:stgraber@dakara:~$lxcstopc1--stateful容器状态将写入磁盘并在下次启动时读取,而不是等待重新启动以启动所有容器。你甚至可以看到这样的状态:root@dakara:~#tree/var/lib/lxd/containers/c1/rootfs/state//var/lib/lxd/containers/c1/rootfs/state/├──cgroup.img├──core-101.img├──core-102.img├──core-107.img├──core-108.img├──core-109.img├──core-113.img├──core-114.img├──core-122.img├──core-125.img├──core-126.img├──core-127.img├──core-183.img├───core-1.img├──core-245.img├──core-246.img├──core-50.img├──core-52.img├──core-95.img├──core-96.img├──core-97.img├──core-98.img├──dump.log├──eventfd.img├──eventpoll.img├──fdinfo-10.img├──fdinfo-11.img├──fdinfo-12.img├──fdinfo-13.img├──fdinfo-14.img├──fdinfo-2.img├──fdinfo-3.img├──fdinfo-4.img├──fdinfo-5.img├──fdinfo-6.img├──fdinfo-7.img├──fdinfo-8.img├──fdinfo-9.img├──fifo-data.img├──fifo.img├──filelocks.img├──fs-101.img├──fs-113.img├──fs-122.img├──fs-183.img├──fs-1.img├──fs-245.img├──fs-246.img├──fs-50.img├──fs-52.img├──fs-95.img├──fs-96.img├──fs-97.img├──fs-98.img├──ids-101.img├──ids-113.img├──ids-122.img├──ids-183.img├──ids-1.img├──ids-245.img├──ids-246.img├──ids-50.img├──ids-52.img├──ids-95.img├──ids-96.img├──ids-97.img├──ids-98.img├──ifaddr-9.img├──inetsk.img├──inotify.img├──inventory.img├──ip6tables-9.img├──ipcns-var-10。img├──iptables-9.img├──mm-101.img├──mm-113.img├──mm-122.img├──mm-183.img├──mm-1.img├──mm-245.img├──mm-246.img├──mm-50.img├──mm-52.img├──mm-95.img├──mm-96.img├──mm-97.img├──mm-98.img├──mountpoints-12.img├──netdev-9.img├──netlinksk.img├──netns-9.img├──netns-ct-9.img├──netns-exp-9.img├──packetsk.img├──pagemap-101.img├──pagemap-113.img├──pagemap-122.img├──pagemap-183。img├──pagemap-1.img├──pagemap-245.img├──pagemap-246.img├──pagemap-50.img├──pagemap-52.img├──pagemap-95.img├──pagemap-96.img├──pagemap-97.img├──pagemap-98.img├──pages-10.img├──pages-11.img├──pages-12.img├──pages-13.img├──pages-1.img├──pages-2.img├──pages-3.img├──pages-4.img├──pages-5.img├──pages-6.img├──pages-7.img├──pages-8.img├──pages-9.img├──pipes-data.img├──pipes.img├──pstree.img├──reg-files.img├──remap-fpath.img├──route6-9.img├──route-9.img├──rule-9.img├──seccomp.img├──sigacts-101.img├──sigacts-113.img├──sigacts-122.img├──sigacts-183.img├──sigacts-1.img├──sigacts-245.img├──sigacts-246.img├──sigacts-50.img├───sigacts-52.img├──sigacts-95.img├──sigacts-96.img├──sigacts-97.img├──sigacts-98.img├──signalfd.img├──stats-dump├──timerfd.img├──tmpfs-dev-104.tar.gz.img├──tmpfs-dev-109.tar.gz.img├──tmpfs-dev-110.tar.gz.img├───tmpfs-dev-112.tar.gz.img├──tmpfs-dev-114.tar.gz.img├──tty.info├──unixsk.img├──userns-13.img└──utsns-11.img0directories,154files恢复容器也很简单:stgraber@dakara:~$lxcstartc1live-migrationlive-migrationlive-migration和上面statefulsnapshot的stop/start基本一样,只是容器目录和配置都移到了另一台机器stgraber@dakara:~$lxclistc1+------+--------+------------------------+--------------------------------------------+-----------+------------+|名称|状态|IPV4|IPV6|类型|快照|+------+--------+------------------------+------------------------------------------+------------+------------+|c1|运行|10.178.150.197(eth0)|2001:470:b368:4242:216:3eff:fe19:27b0(eth0)|持久|2|+------+--------+----------------------+------------------------------------------+------------+------------+stgraber@dakara:~$lxclists-tollana:+------+--------+------+------+------+----------+|名称|状态|IPV4|IPV6|类型|快照|+------+--------+------+------+------+------------+stgraber@dakara:~$lxcmovec1s-tollana:stgraber@dakara:~$lxclistc1+------+------+------+------+------+------------+|名称|状态|IPV4|IPV6|类型|快照|+------+--------+------+------+------+------------+stgraber@dakara:~$lxclists-tollana:+------+--------+--------------------+----------------------------------------+------------+-----------+|名称|状态|IPV4|IPV6|类型|快照|+------+--------+------------------------+---------------------------------------------+------------+----------+|c1|正在运行|10.178.150.197(eth0)|2001:470:b368:4242:216:3eff:fe19:27b0(eth0)|PERSISTENT|2|+------+--------+-----------------------+------------------------------------------------+------------+------------+限制正如我之前所说,容器检查点/恢复仍然是非常新的,我们仍在努力研究这个功能,修复已知问题我们确实需要更多人来尝试这个功能并给我们反馈,但我不建议在生产中使用这个功能。我们跟踪的问题列表在Launchpad上。我们估计带有一些服务的基本Ubuntu容器可以在带有CRIU的Ubuntu16.04上正常工作。但是,对于更复杂的容器、使用设备直通、复杂的网络服务或特殊的存储配置,它可能会失败。如果出现问题,CRIU将尝试在转储时失败而不是在可能的情况下进行恢复。在这种情况下,源容器将继续运行,快照或迁移将失败并生成用于调试目的的日志文件。在极少数情况下,CRIU无法恢复容器,在这种情况下,源容器仍然存在但将被停止,必须手动重新启动。发送错误报告我们正在为CRIUUbuntu软件包的Launchpad跟踪检查点/恢复相关的错误。大多数错误修复工作是在CRIU或Linux内核的上游完成的,但我们更容易以这种方式进行跟踪。要提交新的错误报告,请参阅此处。请务必包括:您运行的命令和向您显示的错误消息lxcinfo(*)的输出lxcinfo
