OpenStack Ironicによるベアメタル・プロビジョニング 第3回 #openstack
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
ディスクイメージの作成
イメージの作成にはDiskimage-Builderを使用します。
Diskimage-builderのインストール
# pip install diskimage-builder
ディスクイメージの作成
ここではFedoraイメージ(x86_64)を作成してみます。disk-image-createでKernel(aki),Ramdisk(ari),ディスクイメージ(qcow2)を作成します。
# disk-image-create -u -o fedora-image -a amd64 fedora baremetal local-conf dhcp-all-interfaces
上の引数について、
-u オプション:無圧縮(uncompressed)
-o オプション:アウトプット時の名前(上の場合はfedora-image.qcow2が作成される)
-a オプション:アーキテクチャ (i386|amd64|armhf)
ELEMENT(上でいうfedora, baremetal,...): 指定した要素に適したイメージを作成(https://github.com/openstack/diskimage-builder/tree/master/elements 参照)
Glanceへ登録
KernelとRamdiskを登録する際に得られるUUIDはディスクイメージ登録の場面で使用します。
Kernel
# MY_VMLINUZ_UUID=$(glance image-create --name fedora-kernel --public \
--disk-format aki < fedora-image.vmlinuz | awk '/id/ {print $4}')
Ramdisk
# MY_INITRD_UUID=$(glance image-create --name fedora-ramdisk --public \
--disk-format ari < fedora-image.initrd | awk '/id/ {print $4}')
ディスクイメージ(KernelとRamdiskを結びづけて登録)
# glance image-create --name desora-image --public \
--disk-format qcow2 --container-format bare --property \
kernel_id=$MY_VMLINUZ_UUID --property \
ramdisk_id=$MY_INITRD_UUID < fedora-image.qcow2
デプロイ用ミニOSのイメージの作成
ramdisk-image-createコマンドでKernelとRamdiskのみを作成します。OSはFedoraで作成しますがUbuntuや他のOSでも問題はありません。Elementに”deploy-ironic”を指定します。
# ramdisk-image-create -o deploy-ramdisk fedora deploy-ironic
Glanceへ登録
Kernel
# glance image-create --name deploy-kernel --public \
--disk-format aki < deploy-ramdisk.kernel
Ramdisk
# glance image-create --name deploy-ramdisk --public \
--disk-format ari < deploy-ramdisk.initramfs
これらを登録した際に表示されるUUIDはベアメタルノード登録時に使用します。
ここでGlanceに登録されているイメージを一度確認してみます。
# glance image-list
+--------------------------------------+-----------------------+-------------+------------------+-------------+-----------+
| ID | Name | Disk Format | Container Format | Size | Status |
+--------------------------------------+-----------------------+-------------+------------------+-------------+-----------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | deploy-ramdisk | ari | ari | 95200542 | active |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | deploy-kernel | aki | aki | 5808544 | active |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | fedora-image | qcow2 | bare | 1300824064 | active |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | fedora-kernel | aki | aki | 5699176 | active |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | fedora-ramdisk | ari | ari | 16066172 | active |
+--------------------------------------+-----------------------+-------------+------------------+-------------+-----------+
ベアメタルノードの登録
他のコンポーネントと同様に”ironic”コマンドが用意されています。主に使用するのは、
- ノードの作成:ironic node-create
- ノード情報の更新:ironic node-update
- ノードリストの表示:ironic node-list
- 登録されているDriverの確認:ironic driver-list
です。事前に用意しておくものとして、
- IPMIのIP address, Username, Password
- 通信用NICのMACアドレス(IPMIインターフェースのMACアドレスではない)
が必要です。
1. ノードの作成
# NODE_UUID=$(ironic node-create -d pxe_ipmitool | awk ‘/uuid/ {print $4}’)
このコマンドではノードのUUIDがNODE_UUID変数に格納されます。
2. IPMI情報の登録
# ironic node-update $NODE_UUID add \
driver_info/ipmi_username=$USER \
driver_info/ipmi_password=$PASS \
driver_info/ipmi_address=$ADDRESS
ここでは、
USER=admin
PASS=password
ADDRESS=172.16.100.254
としています。各自の環境に合わせて設定してください。
3. ノードスペックの登録
# ironic node-update $NODE_UUID add \
properties/cpus=$CPU \
properties/memory_mb=$RAM_MB \
properties/local_gb=$DISK_GB \
properties/cpu_arch=$ARCH
ここでは、
CPU=4(論理コア数)
RAM_MB=4096(搭載RAMの容量)
DISK_GB=500(搭載HDDの容量)
ARCH=x86_64(アーキテクチャ。i386など)
としています。
4. デプロイ用ミニOSイメージの紐づけ
Glanceにデプロイ用ミニOSイメージを登録した際に表示されたUUIDを使用します。
# ironic node-update $NODE_UUID add \
driver_info/pxe_deploy_kernel=$DEPLOY_VMLINUZ_UUID \
driver_info/pxe_deploy_ramdisk=$DEPLOY_INITRD_UUID
以上の手順でノードの登録は完了です。
5. ノード登録の確認
ここではironicコマンドとOpenStackのWebUIであるHorizonから、それぞれ確認してみます。
ironicコマンド
# ironic node-list
+--------------------------------------+-----------------------+-------------+------------------+-------------+
| uuid | instance_uuid | power_state | provision_state | maintenance |
+--------------------------------------+-----------------------+-------------+------------------+-------------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | None | power off | None | False |
+--------------------------------------+-----------------------+-------------+------------------+-------------+
IPMIで疎通が取れれば“power_state”が反映されます。登録したスペックの確認やIPMI情報は、
ironic node-show
で確認出来ます。
Horizon
adminでログインします。左メニューより「管理」→「システム」→「ハイパーバイザー」と進むと先ほど追加したノードが登録されているのが確認出来ます。
インスタンス起動・停止
手順としては仮想インスタンスを起動するときと同じです。Horizon上から起動する方法とNova CLIから起動する方法があります。
Horizon上からは、左メニューより「プロジェクト」→「コンピュート」→「インスタンス」から「インスタンスの起動」をクリックします。このときイメージには手順5で作成したディスクイメージを、ネットワークには用意したフラットネットワークを選択します。Cloud-initが動くのでキーペアも指定しましょう。
Nova CLIからは、以下のコマンドで起動できます。
nova boot --flavor $flavor_id --image $image --nic net-id=$netid $instance_name
$flavor_idは”nova flavor-list”, $imageは”nova image-list”, $netidは”neutron net-list”より該当するIDを使用します。最後の引数$instance_nameはインスタンス名となります。
またインスタンスを停止(シャットダウン)することもできます。停止する場合、Ironicから”ipmitool
ネットワーク隔離プラグイン
第2回の投稿ではネットワークの構成にフラットネットワークを採用しました。しかしこれでは他のマシンとも疎通が取れてしまいます。マルチテナントでベアメタル・プロビジョニングを考えている場合、これでは致命的です。
現在、Rackspace社が試験的にシスコ製スイッチ用のネットワーク隔離のML2プラグインを公開しています( https://github.com/rackerlabs/ironic-neutron-plugin )。
あらかじめスイッチの情報やベアメタルノードが接続されているポートの情報を登録することで、プロビジョニング時に自動でVLANタグを切ってくれます。
これに関しては現在検証中です。
まとめ
3回にわたって下記6点についての検証内容を紹介しました。
- ベアメタル・プロビジョニングとは
- OpenStack Ironicとは
- 構築手順
- 各種設定
- インスタンスの作成と起動・停止
- ネットワーク隔離プラグイン
Ironicは、まだ発展途上なコンポーネントですが、動作するようにはなっています。
第1回の OpenStack Ironicとは の中で、触れていた Ironic Python Agent を使用することで、より実用的に動作するようです。次回以降、こちらについても検証していきます。
関連記事
OpenStack Ironicによるベアメタル・プロビジョニング 第1回
OpenStack Ironicによるベアメタル・プロビジョニング 第2回
OpenStack Ironicによるベアメタル・プロビジョニング 第3回