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
# podman save --output counter.tar counter
Copy to Clipboard Copied! エクスポートしたコンテナーイメージを移行先システム (
other_host
) にコピーします。scp counter.tar other_host:
# scp counter.tar other_host:
Copy to Clipboard Copied! エクスポートしたコンテナーを移行先システムにインポートします。
ssh other_host podman load --input counter.tar
# ssh other_host podman load --input counter.tar
Copy to Clipboard Copied! このコンテナーの移行先のシステムには、ローカルコンテナーストレージに保存されているのと同じコンテナーイメージがあります。
手順
root でコンテナーを起動します。
podman run --name criu-test --detach counter
# podman run --name criu-test --detach counter
Copy to Clipboard Copied! コンテナーの IP アドレスを表示します。
podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}"
# podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}" 10.88.0.247
Copy to Clipboard Copied! 要求をコンテナーに送信します。
curl 10.88.0.247:8080 curl 10.88.0.247:8080
# curl 10.88.0.247:8080 0 # curl 10.88.0.247:8080 1
Copy to Clipboard Copied! コンテナーのチェックポイントを作成し、チェックポイントイメージを
tar.gz
ファイルにエクスポートします。podman container checkpoint criu-test --export /tmp/chkpt.tar.gz
# podman container checkpoint criu-test --export /tmp/chkpt.tar.gz
Copy to Clipboard Copied! チェックポイントアーカイブを移行先ホストにコピーします。
scp /tmp/chkpt.tar.gz other_host:/tmp/
# scp /tmp/chkpt.tar.gz other_host:/tmp/
Copy to Clipboard Copied! 移行先ホスト (
other_host
) のチェックポイントを復元します。podman container restore --import /tmp/chkpt.tar.gz
# podman container restore --import /tmp/chkpt.tar.gz
Copy to Clipboard Copied! 宛先ホスト (
other_host
) のコンテナーに要求を送信します。*curl 10.88.0.247:8080*
# *curl 10.88.0.247:8080* 2
Copy to Clipboard Copied!
これで、ステートフルコンテナーが、状態を失うことなく、別のシステムへ移行されました。