fbpx

OpenStack Ironicによるベアメタル・プロビジョニング 第2回 #openstack

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

Ironic導入手順(All-in-One)

1. 前提

  • OS:Ubuntu 14.10 Server
  • OpenStack Nova, Neutron, Glance, Horizonが既にインストールされている(All-in-One)
    (マルチノードでの構築も可能ですが今回はAll-in-One環境で構築していきます)
  • NIC
    eth0(Open vSwitchブリッジ用)
    eth1(内部NW:172.16.100.3/24)
    eth2(Open vSwitchブリッジ用)
    eth3(外部NW:192.168.0.30/24)

2. Keystoneへ登録

KeystoneにIronicユーザとサービス、エンドポイントを登録します。

# keystone user-create --name=ironic --pass=<任意のPassword> --email=<Email(省略可)>
# keystone user-role-add --user=ironic --tenant=service --role=admin
# keystone service-create --name=ironic --type=baremetal --description="Ironic bare metal provisioning service"
# keystone endpoint-create \
--service-id=the_service_id_above \
--publicurl=http://172.16.100.3:6385 \
--internalurl=http://172.16.100.3:6385 \
--adminurl=http://172.16.100.3:6385

3. DBへの登録

MySQLにironic用データベースを作成します。

# mysql -u root -p
mysql> CREATE DATABASE ironic CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \
IDENTIFIED BY '<任意のPassword>';
mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \
IDENTIFIED BY '<任意のPassword>';

4. Ironic パッケージなどのインストール


# apt-get install ironic-api ironic-common ironic-conductor python-ironic

Ironicのドライバとしてpxe_ipmitoolを使用する場合はIPMIToolもインストールします。


# apt-get install ipmitool

5. Ironic設定ファイルの編集

Ironic自体の設定するために/etc/ironic/ironic.confを編集します。

・デバッグメッセージの出力の有効化

[DEFAULT]
debug = True
verbose = True

・RabbitMQの設定

[DEFAULT]
// 省略
rabbit_host=localhost

・認証の設定

[DEFAULT]
// 省略
auth_strategy=keystone
// 省略
[keystone_authtoken]
auth_uri = http://172.16.100.3:5000/v2.0
identity_uri = http://172.16.100.3:35357
admin_tenant_name = service
admin_user = ironic
admin_password = <Keystoneに登録したIronicのPassword>

・DBサーバの設定

[database]
// 省略
connection = mysql://ironic:<初めに設定したDB用Password>@localhost/ironic

・Neutronの設定

[neutron]
url=http://172.16.100.3:9696

・Glanceの設定

[glance]
glance_host=172.16.100.3

6. DBテーブルの作成


# ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema

7. Ironicサービスの再起動


# service ironic-api ironic-conductor restart

8. Nova設定ファイルの編集

NovaとIronicが連携できるように変更します。これによりベアメタルノード1台1台がハイパーバイザとして扱われるようになります。
・Compute Driverの設定
/etc/nova/nova-compute.conf


[DEFAULT]
#compute_driver=libvirt.LibvirtDriver
compute_driver=nova.virt.ironic.IronicDriver

・スケジューラ、Firewallドライバ、使用RAMの設定
/etc/nova/nova.conf

firewall_driver=nova.virt.firewall.NoopFirewallDriver
scheduler_host_manager=nova.scheduler.ironic_host_manager.IronicHostManager
ram_allocation_ratio=1.0
reserved_host_memory_mb=0

・Ironic APIの設定
/etc/nova/nova.conf

[ironic]
admin_username=ironic
admin_password=<Keystoneに登録したIronicのPassword>
admin_url=http://172.16.100.3:35357/v2.0
admin_tenant_name=service
api_endpoint=http://172.16.100.3:6385/v1

最後にNovaの再起動をします。

# service nova-scheduler nova-compute restart

9. フラットネットワークの構築

ベアメタルノードとのフラットネットワークを構築するための設定をします。

1. Neutron ML2プラグインの設定

/etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
type_drivers = flat
tenant_network_types = flat
mechanism_drivers = openvswitch

[ml2_type_flat]
flat_networks = *

[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True

[ovs]
network_vlan_ranges = physnet1, internal
bridge_mappings = physnet1:br-ex, internal:br-eth2

2. Open vSwitchの設定

・Integration Bridgeの追加(なければ)。

# ovs-vsctl add-br br-int

・Integration Bridgeとベアメタルノードと通信するNICの結び付け。

# ovs-vsctl add-br br-eth2
# ovs-vsctl add-port br-eth2 eth2

・サービスの再起動

service neutron-plugin-openvswitch-agent restart

設定がうまくいっているか確認します。

# ovs-vsctl show
7663023-4d6c-454f-b858-c1c70a19f880
Bridge "br-eth2"
Port "br-eth2"
Interface "br-eth2"
type: internal
Port "eth2"
Interface "eth2"
Port "phy-br-eth2"
Interface "phy-br-eth2"
type: patch
options: {peer="int-br-eth2"}
Bridge br-ex
Port "eth0"
Interface "eth0"
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port br-ex
Interface br-ex
type: internal
Bridge br-int
fail_mode: secure
Port "tapc0547d64-17"
tag: 1
Interface "tapc0547d64-17"
type: internal
Port int-br-ex
Interface int-br-ex
type: patch
options: {peer=phy-br-ex}
Port "int-br-eth2"
Interface "int-br-eth2"
type: patch
options: {peer="phy-br-eth2"}
Port br-int
Interface br-int
type: internal
ovs_version: "2.1.3"

 

3. ネットワーク&サブネットの作成

Neutronにてネットワークとサブネットを作成します。あらかじめ使用するテナントのIDを用意します。例えばadminテナントを使う場合、

# TENANTID=$(keystone tenant-list | awk ‘/admin/ {print $2}’)

とすることでテナントIDを変数に代入することができます。

・フラットネットワークの作成

# neutron net-create --tenant-id $TENANT_ID flatnet --shared \
--provider:network_type flat --provider:physical_network internal

physical_networkにはML2プラグインの設定を加えた際にマッピング指定をしたものを指定します(今回の場合はinternal)。
・サブネットの作成
ここではDHCPエージェントも有効にします。ゲートウェイに関しては省略可能です。

# neutron subnet-create flatnet \
--allocation-pool start=172.16.100.150,end=172.16.100.160 \
--dns-nameserver 8.8.8.8 --gateway=172.16.100.1 --enable_dhcp --name flat-sub \
172.16.100.0/24

4. 疎通の確認

作成したブリッジの設定が出来ているか確認するために、NeutronにてDHCPエージェントを作成した際に作られるNamespaceからホストへ疎通が取れるかどうか確認します。
・Namespaceの確認

# ip netns
qdhcp-5d9a38e0-7610-4b88-83ad-5614e126f97c

(qdhcp-以降にはDHCPエージェントのUUIDが入ります。)
・pingを打ってみる

# ip netns exec qdhcp- ping 172.16.100.3
PING 172.16.100.3 (172.16.100.3) 56(84) bytes of data.
64 bytes from 172.16.100.3: icmp_seq=1 ttl=64 time=0.203 ms
64 bytes from 172.16.100.3: icmp_seq=2 ttl=64 time=0.084 ms

10. フレーバーの作成

インスタンスを作成する(ベアメタルへのプロビジョニングを指す)際に使用するフレーバーを作成します。

# nova flavor-create baremetal auto $RAM_MB $DISK_GB $CPU

autoの部分はフレーバーIDとなります。autoにすると適当なUUIDが、任意の数字を入力するとそれが設定されます。

11. PXEの設定

インスタンスを作成する際に使用するTFTPサーバの設定を行います。
PXE用ディレクトリの作成、権限の変更

# mkdir -p /tftpboot
# chown -R ironic -p /tftpboot
# chmod -R 777 /tftpboot

パッケージのインストール

# apt-get install tftpd-hpa syslinux syslinux-common pxelinux

PXEブートに必要なファイルのコピー

# cp /usr/lib/PXELINUX/pxelinux.0 /tftpboot
# cp /usr/lib/syslinux/modules/*/ldlinux.* /tftpboot

マップファイルの作成

# echo 'r ^([^/]) /tftpboot/\1' > /tftpboot/map-file
# echo 'r ^(/tftpboot/) /tftpboot/\2' >> /tftpboot/map-file

PXEブートの設定
/etc/ironic/ironic.conf

// 省略
[pxe]
tftp_root=/tftpboot
tftp_master_path = /tftpboot/master_images
tftp_server=172.16.100.152

Ironic Conductorの再起動

# service ironic-conductor restart

12. その他

・Neutron Metadata-agentの設定
インスタンスを作成した際にcloud-initが正常に動作するようにします。
/etc/neutron/dhcp-agent.ini

//省略
“enable_isolated_metadata=True”

・一部ファイルのパーミッション変更
一部の環境にてインスタンス作成途中でiSCSI関係でエラーが出ることがありますが、その対策としてパーミッションの変更をします。

# chown root:root -R /etc/ironic/rootwrap*

関連記事


OpenStack Ironicによるベアメタル・プロビジョニング 第1回
OpenStack Ironicによるベアメタル・プロビジョニング 第2回

新規CTA