こんにちは、こんばんは、miyakeです :-)
GWはどのように過ごされたでしょうか?
私は1年ぶりに自転車で、鎌倉までポタリング(往復で70kmぐらい)してました :-)
今回は、前回のOpenStack Ironic用のカスタムイメージファイルを作る【導入編】 - Taste of Tech Topicsの続き、Ironic用イメージファイルの生成手順について説明します。
イメージファイル作成ツールのインストール
まずはイメージファイル作成ツールを、以下のコマンドを実行してインストールします。
# pip install diskimage-builder
このDiskimage-builderは、OpenStackのVM用イメージファイルなどのディスクイメージを生成するツールです。
このツールには、Ironicイメージを生成するための機能も含まれていて、今回はこのDiskimage-builderを使います。
デプロイ用イメージファイルの生成
次に、以下のコマンドを実行してデプロイ用イメージファイルを生成します。
# mkdir /root/image # cd /root/image # ramdisk-image-create ubuntu deploy-ironic -o deploy-image
ここでは、デプロイ用イメージファイルの基になるOSイメージとしてUbuntuを指定しています。
デプロイ用イメージファイルは、初期のデプロイ処理を行うためのイメージでしかないため、仮想マシンイメージファイルのOSと合わせる必要はありません。
※この例では前回の例と同様に"/root/image"の下でイメージファイル作成を行っています。あくまでも今回の説明用に作っているだけなので、実際には適当に作業領域を作ってください。
ramdisk-image-create を実行した後、"/root/image"の下に以下の2つのファイルが生成されます。
deploy-image.kernel deploy-image.initramfs
deploy-image.kernelは、デプロイ処理の際に使用するカーネルイメージファイルで、deploy-image.initramfsは、デプロイ処理のブートイメージで、インストールするための準備と、準備完了をIronicに通知する処理を行うイメージファイルになります。
この2ファイルがPXEBootによって物理サーバマシンに読み込まれることで、カスタムイメージファイルをインストールするための準備を行います。*1
Ironic用イメージファイルに変換
ここから、disk-image-createコマンドを使って、前回作成したオリジナルの仮想マシンのイメージファイル(/var/lib/libvirt/images/centos7-custom.qcow2)からIronic用イメージファイルに変換する手順の説明になります..
が、ここでいきなりハマりどころが...
【ハマりどころ】
disk-image-createは引数で変換元イメージファイルを設定できない
変換元イメージファイルを指定する方法を示すマニュアルやそれらしい資料が見つからなかったので、仕方ないのでソースを読みました... :-(
disk-image-createは、elementsという単位で機能を追加する仕組みをもっているのですが、このelementsに定義を引数で渡す手段がないようで、環境変数でカスタマイズしたい定義を渡すようになっていました...(というより、そうせざるをえない構造な気がする)
で、オリジナルの仮想マシンイメージファイルからIronic用イメージファイルに変換する場合、環境変数の"DIB_LOCAL_IMAGE" に、変換元になるイメージファイルをフルパスで指定します。
# export DIB_LOCAL_IMAGE=/root/image/centos7-custom.qcow2
ちなみに、DIB_LOCAL_IMAGEを設定しないでdisk-image-createコマンドを実行すると、変換元のイメージファイルは、CentOSやFerora、Ubuntuが公開しているクラウドイメージファイル(仮想マシン用イメージファイル)からダウンロードしてきます。
あぁ~~ これでオリジナルイメージができると思って実行したところ、変換に失敗...
蓋を開けてみると、disk-image-createは作業用ディスク領域にtmpfs(RAMディスク)を使っていて、変換対象のイメージサイズが大きいため容量不足でエラーになっていました...
※元々VM程度のディスクイメージサイズのファイルしか作ることを想定していなかったのでしょう...
調べた結果、環境変数 "DIB_NO_TMPFS"に 1 を設定することで、/tmp 配下を作業領域にするようになることがわかりました。
【注意】
環境によっては、"/"パーティションのディスクサイズが小さい(50Gbyteとか)ため、/tmp の容量不足でエラーになることがあります。
よって、"/"パーティションのディスクサイズについては、"/home"を減らして、"/"の容量を増やすなどの対処が必要になることがあります...
最終的に、以下のコマンドを実行することでIronic用イメージファイルに変換することができるようになります。
# export DIB_LOCAL_IMAGE=/root/image/centos7-custom.qcow2 # export DIB_NO_TMPFS=1 # disk-image-create centos7 baremetal dhcp-all-interfaces grub2 -o centos7-custom-image -a amd64
disk-image-create の -o で指定している"centos7-custom-image"の名称で、Ironic用イメージファイルが生成されます。
上記コマンドを実行すると、オリジナルの仮想マシンイメージファイルをマウントしたり、必要なパッケージをインストールしたりという処理を実行する経過が表示され、20分後ぐらいに、以下の3つのイメージファイルが生成されます。
centos7-custom-image.vmlinuz centos7-custom-image.initrd centos7-custom-image.qcow2
centos7-custom-image.vmlinuzはカーネルのイメージファイル、centos7-custom-image.initrdはブート時に実行されるinitrdのイメージファイル、centos7-custom-image.qcow2はディスクイメージファイルになります。
デプロイされると、centos7-custom-image.qcow2のディスクイメージが、デプロイ先の物理サーバマシンのディスクに、ddコマンドによって書き込まれます。
centos7-custom-image.vmlinuzとcentos7-custom-image.initrdは、PXEBootによって物理サーバマシンに送り込まれて実行されます。
以上で、 Ironic用カスタムイメージファイルの生成は完了です。
生成した上記イメージファイルや、デプロイ用イメージファイルはGlanceに登録して、NovaからIronic経由でベアメタルノードのデプロイ時に、使用するイメージとして指定することになります。
4月の25~29にOpenStack Summit Austinが開催されて、次のバージョンはNeutonに決まりました。
AT&T(とMirantis)の事例が注目されていたようで、NFVへのOpenStack適用が進むようです :-)
補足事項
- 今回の手順で作成したイメージファイルでAHCIモードのサーバマシンにデプロイを行った場合、デプロイに失敗します。これは、今回の手順で作成したイメージの/boot配下のinitrd用ファイルがAHCI対応していないことが原因です。このためAHCI対応のサーバマシンに対してデプロイを行うと、ブート時のinitrdでディスクデバイスが認識できずに失敗します。これに対応するためには、Ironic用イメージファイル生成時に生成されたinitrdイメージファイルをマウントして、AHCI対応のためのカーネルドライバのインストールなどを行う必要があります。
Acroquest Technologyでは、キャリア採用を行っています。
- 日頃勉強している成果を、AWS、Hadoop、Storm、NoSQL、Elasticsearch、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
- 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
- OSSの開発に携わりたい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社の新卒・インターンシップ - Wantedlywww.wantedly.com