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
このコンテナーの移行先のシステムには、ローカルコンテナーストレージに保存されているのと同じコンテナーイメージがあります。
手順
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
チェックポイントアーカイブを移行先ホストにコピーします。
# 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
これで、ステートフルコンテナーが、状態を失うことなく、別のシステムへ移行されました。