fbpx

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でログインします。左メニューより「管理」→「システム」→「ハイパーバイザー」と進むと先ほど追加したノードが登録されているのが確認出来ます。

openstack-ironic01

インスタンス起動・停止

手順としては仮想インスタンスを起動するときと同じです。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 power off”コマンドが発行されます(pxe_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回

新規CTA