はじめに
とある案件でLXDからincusへの乗り換えを行うことになったため、コンテナの移行手順をまとめてみました。
LXDからincusへ乗り換えの方法としてはマイグレーションツールを利用する方法もありますが、マイグレーションツールを利用せずにLXDからincusへ移行したいケースもあるかと思います。
今後LXDからincusへ移行を検討されている方の参考になりましたら幸いです。
前提
各手順は以下の前提をもとに記載しています。この前提より外れる場合は、適宜読み替えや記載外の設定調整が必要となります。
- LXDにおいてコンテナのネットワークは
lxdbr0
がアタッチされている - incusにおいてコンテナのネットワークは
incusbr0
がアタッチされている - プロファイルは
default
である - ストレージプールは
default
である
手順
ホストのバックアップ、スナップショット
- ホスト環境をイメージレベルでバックアップする
- IaaSやKVM, Hyper-Vなどを利用している場合は、スナップショットが手軽でおすすめ
- 後述するLXDバージョンアップ後は、何があっても基本的には旧バージョンに戻せなくなるため、不測の事態を考慮して(失敗してもやり直せるよう)対応しておくこと
LXDバージョンアップ
- LXDのバージョンが5.21でない(5.21よりも古い)場合は、5.21までバージョンアップする
- snapでインストールされている場合は、以下のコマンドを順番に実行
snap refresh lxd --channel=5.0/stable
-
snap refresh lxd --channel=5.21/stable
- LXD 4.xの場合は、LXD 4.x -> LXD5.0 -> LXD 5.21の順にバージョンアップする
(5.0を飛ばして4.x -> 5.21へいきなりバージョンアップすると、LXDがエラーで立ち上がらなくなるため注意)
- snapでインストールされている場合は、以下のコマンドを順番に実行
LXDコンテナのエクスポート
- LXDホスト上で
lxc export --instance-only <コンテナ名> <アーカイブファイル名(tar.gz)>
でコンテナをエクスポートする
(LXD 4.xでコンテナをエクスポートすると、incusでインポート時にエラーとなりインポートできないので注意) - エクスポートしたアーカイブファイルをincusホストへコピーする
ホスト側への共有先ディレクトリ配置
- エクスポートしたLXDコンテナで共有ディレクトリを設定していた(LXD運用時に共有ディレクトリを利用していた)場合は、LXDホストとincusホスト間で共有先ディレクトリを同じ構成とする
- incusへの当該コンテナインポート前に対応する
(incusホスト側に共有先ディレクトリが未設定の場合、コンテナインポート時にエラーとなる)
incusへのLXDコンテナインポート
- incusホスト上で
incus import <アーカイブファイル名(tar.gz)> <incusコンテナ名>
を実行し、コンテナをインポートする
incusコンテナ上の/var/log/journal
ディレクトリ削除
-
/var/lib/incus/storage-pools/default/containers/<コンテナ名>/rootfs/var/log/journal
フォルダが存在する場合は削除する - 当該フォルダが存在する場合、以下のエラーが発生する場合がある
Error: Failed to handle idmapped storage: invalid argument - Failed to change ACLs on /var/lib/incus/storage-pools/default/containers/<コンテナ名>/rootfs/var/log/journal
※参考
incusコンテナのconfigを変更
-
incus config edit <コンテナ名>
を実行する -
lxdbr0
をincusbr0
へ文字列置換する
(未設定の場合、コンテナ起動時にエラーとなる)
※以下の手順で固定IPアドレスを割り当てていない場合は、不要かもしれない