Podman 是一个运行、管理和部署容器的工具。 OCI 标准。 使用无根访问权限运行容器和创建 Pod(一个 Pod 是一组容器)是 Podman 的附加功能。 本文描述并解释了如何在 Podman 中使用检查点来保存正在运行的容器的状态以供以后使用。
检查点容器: Checkpoint / Restore In User-space,或 CRIU,是在 Fedora Linux 存储库作为“criu”包。 它可以冻结正在运行的容器(或单个应用程序)并将其状态检查点到磁盘(参考: https://criu.org/Main_Page). 保存的数据可用于恢复容器并完全按照冻结期间的状态运行它。 使用它,我们可以实现应用程序或容器的实时迁移、快照或远程调试。 此功能需要在系统上安装 CRIU 3.11 或更高版本。
Podman 检查点
# podman container checkpoint <containername>
此命令将创建容器的检查点并冻结其状态。 检查点容器也会停止正在运行的容器。 如果您执行 podman ps,将不会存在名为
您可以将检查点作为文件导出到特定位置,并将该文件复制到不同的服务器
# podman container checkpoint <containername> -e /tmp/mycheckpoint.tar.gz
Podman 恢复
# podman container restore --keep <containername>
–keep 选项将恢复包含所有临时文件的容器。
要导入容器检查点,您可以使用:
# podman container restore -i /tmp/mycheckpoint.tar.gz
使用 Podman Checkpoint 进行实时迁移
本节介绍如何使用 podman 检查点功能将容器从 client1 迁移到 client2。 这 example 使用 https://lab.redhat.com/tracks/rhel-system-roles 由 Red Hat 提供的游乐场,因为它有多个已配置 ssh-keygen 的主机。
这 example 将在 client1 上运行一个带有某个进程的容器,创建一个检查点,并将其迁移到 client2。 首先使用以下命令在 client1 机器上运行一个容器:
podman run --name=demo1 -d docker.io/httpd podman exec -it demo1 bash sleep 600& (run a process for verification ) exit
上面的代码片段运行一个容器作为 demo1 和 httpd 进程,它在后台运行一个睡眠进程 600 秒(10 分钟)。 您可以通过执行以下操作来验证这一点:
# podman top demo1 USER PID PPID %CPU ELAPSED TTY TIME COMMAND root 1 0 0.000 5m40.61208846s ? 0s httpd -DFOREGROUND www-data 3 1 0.000 5m40.613179941s ? 0s httpd -DFOREGROUND www-data 4 1 0.000 5m40.613258012s ? 0s httpd -DFOREGROUND www-data 5 1 0.000 5m40.613312515s ? 0s httpd -DFOREGROUND root 88 1 0.000 16.613370018s ? 0s sleep 600
现在创建一个容器检查点并将其导出到特定文件:
# podman container checkpoint myapache2 -e /tmp/mycheckpoint.tar.gz # scp /tmp/mycheckpoint.tar.gz client2:/tmp/
然后在客户端 2 上:
# cd /tmp # podman container restore -i mycheckpoint.tar.gz # podman top demo1
您应该看到如下输出:
USER PID PPID %CPU ELAPSED TTY TIME COMMAND root 1 0 0.000 5m40.61208846s ? 0s httpd -DFOREGROUND www-data 3 1 0.000 5m40.613179941s ? 0s httpd -DFOREGROUND www-data 4 1 0.000 5m40.613258012s ? 0s httpd -DFOREGROUND www-data 5 1 0.000 5m40.613312515s ? 0s httpd -DFOREGROUND root 88 1 0.000 16.613370018s ? 0s sleep 600
通过这种方式,您可以使用 podman 检查点功能实现实时迁移。