22.3. 在系统间迁移容器


您可以将正在运行的容器从一个系统迁移到另一个系统,而不会丢失容器中运行的应用程序的状态。本例是基于标记为 counter在本地创建和恢复容器检查点 部分中的容器。

重要

只有在系统配置完全匹配时,才支持使用 podman container checkpointpodman 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

      现在,此容器迁移的目标系统在其本地容器存储中有一个同样的容器镜像。

流程

  1. 以 root 用户身份启动容器:

    # podman run --name criu-test --detach counter
  2. 显示容器的 IP 地址:

    # podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}"
    10.88.0.247
  3. 将请求发送到容器:

    # curl 10.88.0.247:8080
    0
    # curl 10.88.0.247:8080
    1
  4. 创建容器的检查点,并将检查点镜像导出到 tar.gz 文件中:

    # podman container checkpoint criu-test --export /tmp/chkpt.tar.gz
  5. 将 checkpoint 归档复制到目标主机:

    # scp /tmp/chkpt.tar.gz other_host:/tmp/
  6. 在目标主机上恢复检查点(other_host):

    # podman container restore --import /tmp/chkpt.tar.gz
  7. 向目标主机上的容器(other_host)发送一个请求:

    # *curl 10.88.0.247:8080*
    2

因此,有状态的容器已从一个系统迁移到另一个系统,而不丢失其状态。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.