22.3. 在系统间迁移容器
您可以将正在运行的容器从一个系统迁移到另一个系统,而不丢失容器中运行的应用程序的状态。本示例基于本地创建并恢复一个容器检测点 中的内容,使用 counter tag。
只有在系统配置完全匹配时,才支持使用 podman container checkpoint 和 podman container restore 命令在系统间迁移容器,如下所示:
- Podman 版本
- OCI 运行时(runc/crun)
- 网络堆栈(CNI/Netavark)
- Cgroups 版本
- 内核版本
- CPU 功能
您可以迁移到具有更多功能的 CPU,但不能迁移到没有您使用的特定功能的 CPU。低级工具执行检查点(CRIU)可能检查 CPU 功能兼容性 :https://criu.org/Cpuinfo。
先决条件
-
container-tools元数据包已安装。 如果容器被推送到注册表,则不需要执行下列步骤,因为 Podman 将自动从注册表下载容器(如果本地没有的话)。本例没有使用注册中心,您必须导出之前构建并标记的容器(请参阅 在本地创建和恢复容器检查点)。
导出之前构建的容器:
# podman save --output counter.tar counter将导出的容器镜像复制到目标系统(
other_host):# scp counter.tar other_host:在目的系统中导入导出的容器:
# ssh other_host podman load --input counter.tar现在,此容器迁移的目标系统在其本地容器存储中有一个同样的容器镜像。
流程
以 root 用户身份启动容器:
# podman run --name criu-test --detach counter显示容器的 IP 地址:
# podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}" 10.88.0.247将请求发送到容器:
# curl 10.88.0.247:8080 0 # curl 10.88.0.247:8080 1创建容器的检查点,并将检查点镜像导出到
tar.gz文件中:# podman container checkpoint criu-test --export /tmp/chkpt.tar.gz将 checkpoint 归档复制到目标主机:
# scp /tmp/chkpt.tar.gz other_host:/tmp/在目标主机上恢复检查点(
other_host):# podman container restore --import /tmp/chkpt.tar.gz向目标主机上的容器(
other_host)发送一个请求:# *curl 10.88.0.247:8080* 2
因此,有状态的容器已从一个系统迁移到另一个系统,而不丢失其状态。