会社で、OpenStack上に作成して動かしてたVMをKVMホストに移行させる必要があったので、備忘として残しておく。
といっても大したことは特に必要ない。以下の流れに沿って作業を行うだけだ。
1.OpenStack上でスナップショットを取得する
OpenStack上で、対象の仮想マシンのスナップショットを取得する。
これは、(OSのアップデート中とか高負荷状態でないなら)VMの動作中でも構わない。
スナップショットの取得も特殊なことは必要なく、普通にブラウザから対象のVMを選択してスナップショットの取得を行うだけだ。
2.スナップショットのデータ(仮想HDDデータ)を取得してKVMホストにコピーする
スナップショットが取得できたら、OpenStackのホストにsshで接続し、スナップショットのイメージファイルを抽出する。
まず、コマンドからのアクセス用の変数を入れたファイルを作成する。ファイル名は適当。
● keystonerc_admin
unset OS_SERVICE_TOKEN
export OS_USERNAME=<OpenStackのユーザ名>
export OS_PASSWORD=<OpenStackのユーザパスワード>
export OS_AUTH_URL=http://ホストのIPアドレス:5000/v2.0
export PS1='[\u@\h \W(keystone_admin)]\$ '
export OS_TENANT_NAME=<移行対象のVMがいるプロジェクト名>
export OS_REGION_NAME=RegionOne
ファイル作成後、読み込んで環境変数を設定する。
. ./keystonerc_admin
環境変数設定後、以下のコマンドでスナップショットの一覧を取得する。
nova image-list
[root@test ~(keystone_admin)]# nova image-list
+--------------------------------------+-----------------------------------+--------+--------------------------------------+
| ID | Name | Status | Server |
+--------------------------------------+-----------------------------------+--------+--------------------------------------+
| 4c68f274-8beb-421e-bac9-8eb59a8b0fd4 | test_snapshot | ACTIVE | fa5c3dd2-94a8-4b25-b6a1-31b3e929d9e0 |
+--------------------------------------+-----------------------------------+--------+--------------------------------------+
移行対象となるVMのスナップショットのID(一番左のカラム)がわかったら、以下のコマンドでイメージを抽出する。
glance image-download --file 抽出後のHDDイメージ名 SnapshotのID
コマンド実行後、抽出されたHDDイメージをscpなどでKVMホストにコピーしてやればよい。
3.HDDデータを使ってVMを作成する
あとは、OpenStackから抽出時点でqcow2フォーマットになっているので、そのままKVM側でVMを作ってやればよい。