新しいゲストインスタンスのデプロイに使用できるライブCDからディスクイメージに移行するために、OpenStackで最も抵抗の少ないパスを見つけようとしています。
ライブCDからOpenStackインスタンスを起動する場合、OSを「エフェメラル」ディスク(この場合は/dev/vda
)にインストールできます...
...それはすばらしいことですが、そのディスクからイメージを作成する方法はありません。 image-create
コマンドは、ライブCD自体のスナップショットを作成しようとします(失敗します)(これがブートボリュームであるため)。
新しいボリュームを作成してアタッチし(volume-create
とvolume-attach
を使用)、OSをインストールできますが、このボリュームをGlanceでホストされるイメージに変換する方法がないようです他のインスタンスで使用するため。
管理者として私は明らかにストレージホストにログインし、ボリュームブロックデバイスから直接新しいグランスイメージを作成できますが、これはAPIまたはWeb GUIを介してやり取りする人が利用できる手段ではありません。
他に利用できるオプションはありますか?
Icehouse以降では、upload-to-imageコマンドでCinderボリュームをGlanceイメージに変換できます。
cinder upload-to-image <volume> <image-name>
これは古い質問ですが、やりたいのは、kvmを使用して、cdrom isoファイルと空のボリュームを使用してrawディスクイメージを作成することです。次に、生のディスクをアップロードして一目で確認し、他のディスクを起動するために使用できます。
これは、たとえば、ベースのDebian、Ubuntu、またはその他のLinuxホストを作成する方法です。
Cinderボリュームをglanceイメージに変換する簡単な方法は、LVMパーティションをqemu-imgでqcow2形式に変換します。
例:
Sudo qemu-img convert -c -f raw -O qcow2 /dev/stack-volumes/volume-6e4eb1d5-71fa-45a1-9178-ac6611351404 test.img
次のステップは、一目で画像を追加します。
glance image-create --name test_converted --disk-format qcow2 --container-format bare < test.img
KVMローカルLinuxマシンでローカルディスクイメージファイル(rawまたはqcow2)を使用して)を使用してopenstackのイメージを正常に構築し、イメージファイルを圧縮qcow2に変換して、一目でアップロードしました。
いくつかのヒント:
http://169.254.169.254/
からインスタンスメタデータ(sshキー、IPアドレス、ホスト名、ユーザーデータなど)をフェッチし、VMで。
cloud-initはubuntuで最適に動作しますが、Debianに移植されており、RHへの移植も見ました。
イメージをクリーンアップ(ログとシェルの履歴の消去、パスワードの無効化、/ etc/udev/rules.d/70-persistent-net.rulesの削除など)および圧縮されたqcow2をアップロードする前にディスクイメージをゼロで埋める良い考えです。 VM 10GBディスクのイメージを300-500MBに簡単に縮小できます。これは、openstackがインスタンスを起動するときにアップロードとコピーが高速になります。
ディスクをゼロフィルする最も簡単な方法は、 'dd if =/dev/zero of =/root/junk; rm -f/root/junk '。または、VMをシャットダウンしてループバックマウントし(イメージがすでにqcow2の場合はqemu-nbdを使用できます)、次にそれをゼロフィルします。ファイルシステムがext2/3/4の場合、 zerofree と呼ばれるツールを使用してファイルをゼロフィルできます(マウント解除またはマウントされたROする必要があります)。他のファイルの場合は、 secure-delete からsfillを使用できます(secure-deleteのホームページが消えました)。
ところで、「ソース」イメージがすでに圧縮されたqcow2である場合でも、アップロードする前に、それを新しい圧縮されたqcow2に「変換」する価値があります。これにより、ファイルが書き込み時にコピーされたときに残った古いデータが取り除かれます。