22.3. システム間のコンテナーの移行

コンテナーで実行しているアプリケーションの状態を失うことなく、実行中のコンテナーを別のシステムに移行できます。この例は、counter とタグ付けされたコンテナーのチェックポイントの作成および復元のコンテナー セクションのコンテナーを基にしています。

重要

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

      このコンテナーの移行先のシステムには、ローカルコンテナーストレージに保存されているのと同じコンテナーイメージがあります。

手順

  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. チェックポイントアーカイブを移行先ホストにコピーします。

    # 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

これで、ステートフルコンテナーが、状態を失うことなく、別のシステムへ移行されました。