Podman 检查点

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 检查点功能实现实时迁移。