#概要
本記事は [OpenStack (2枚目) Advent Calendar 2014] (http://www.adventar.org/calendars/602) 23日目の記事です。
今まで公式手順に沿っての手動インストールしかマルチノードは試したことがなかったのですが、
ようやく手動インストールで動かせるようになったので自動化の機運が高まってきました。
今回は packstack でのマルチノードインストールに挑戦してみたいと思います。
#前提となる環境
- 物理マシン4台(Controller, Network, Compute, BlockStorage)
- NIC は1つ
- NIC 1つで頑張っているため複数のVLAN有り
- L2SW に VLAN は作成済み
- CentOS7 を最小構成でインストール後、IP,vlan は設定済み
- インストール後の yum update も済み
- selinux は全台 permissive
- (disabled に設定していると packstack が途中でコケるので)
- ntp サーバはインストール済み
network 図
本当にテキトーな図で申し訳ないですが...一応。。
アスキーアート難しい。
----------------------------------------------- 10.26.1.0/24 (vlan1260) ext network
|
|
+-----------+ +----------+ +----------+
| controller| | network | | compute |
+-----------+ +----------+ +----------+
| | | | |
| | | | |
----------------------------------------------- 172.16.1.0/24 (vlan1300) mng network
| |
| |
----------------------------------------------- 172.16.200.0/24 (vlan1320) tunnel network
なかなかの雑っぷりだけど...仕方ない。
上記でも触れているように NIC は1つなので VLAN を使っています。
あと図は OpenStack 部分のみでこれとは別に untag で各ホストへ ssh を行うためのセグメントも存在しています。(10.29.1...というのが後ほど出てきますがそれです)
#packstack で OpenStackJuno をセットアップ
- packstack のインストール
# yum install -y https://rdo.fedorapeople.org/rdo-release.rpm
# yum install -y openstack-packstack
- answer file の作成
# packstack --gen-answer=juno_multinode
Packstack changed given value to required value /root/.ssh/id_rsa.pub
-
使用する answer file は [こちら] (https://gist.github.com/masahixixi/c3797dc6b96dd61c752a)
-
answer file を実行
# packstack --answer-file=juno_multinode
インストール後のケア
external network の設定
packstack でインストールが終わったものの network node の外向き I/F と OVS の紐付けが行われていないため設定する。
br-ex が 外側のブリッジで、今回の構成では enp0s25.1260
という I/F が外側の I/F のためこれを紐付ける。
# ovs-vsctl add-port br-ex enp0s25.1260
# ovs-vsctl show (一部抜粋)
Bridge br-ex
Port "enp0s25.1260"
Interface "enp0s25.1260"
Port br-ex
Interface br-ex
type: internal
Port "qg-335e23cc-74"
Interface "qg-335e23cc-74"
type: internal
ovs_version: "2.1.3"
external network は provider:network_type
を flat
で構築したかったのですが packstack では 両方vxlan で private, external を作成してしまうみたいなので external network を削除し再構築します。
dashboard でポチポチやってもいいですし、コマンドでやってもいいです。
結果だけ貼っておきます。
# neutron net-show 0d8cb8e1-40fc-4457-ba86-0b1813ba1a01
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 0d8cb8e1-40fc-4457-ba86-0b1813ba1a01 |
| name | public_network |
| provider:network_type | flat |
| provider:physical_network | default |
| provider:segmentation_id | |
| router:external | True |
| shared | True |
| status | ACTIVE |
| subnets | aa30b3e4-dbb6-45a0-86ac-09a9be999174 |
| tenant_id | b9743f9263b74539a490bab52793d894 |
+---------------------------+--------------------------------------+
cirros を boot して floating ip を付与し外から ssh でログインできれば OK。
Horizon のケア
今回の構成だとインストール終了後に下記の表示がされているように dashboard IPが http://172.16.1.119/dashboard
となっている。
上記アドレスは管理セグメントで使用している IP のため、外向きの IP に置き換えたい。
そこで下記を修正する。
OPENSTACK_HOST = "10.29.1.119"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
#OPENSTACK_KEYSTONE_URL = "http://172.16.1.119:5000/v2.0"
そして httpd restart しておきます。
# systemctl restart httpd.service
OPENSTACK_HOST
に設定した IP or domain でアクセスできると思います。
Nova のケア
cirros image でインスタンスを起動はできるがwebコンソールが使用できなかったので compute node の設定を変更する必要がある。
こちらも管理セグメントで使用している IP への設定となっているため外向きの IP へ置き換える。
novncproxy_base_url = http://10.29.1.119:6080/vnc_auto.html
nova-compute を再起動しておきます。
# systemctl restart openstack-nova-compute.service
触ってみて分かったこと
packstack のパラメータである CONFIG_STORAGE_HOST
を設定すれば cinder はストレージ用ホストにインストールされると思っていたがどうやらされないらしい。
packstack を使うとコントローラー用のホストに一緒にインストールされてしまうらしい。
しっかりと answer-file にこんな記述があった。
# (Unsupported!) The IP address of the server on which to install
# OpenStack services specific to storage servers such as Glance and
# Cinder.
あんさぽーてっどらしい。
cinder-volumes だけストレージホストに設定するのは手動で行うことにした。
所感
いくつか思い通りにいかず手動設定の箇所も残ってしまったが、それを差し引いても今までの作業がかなり簡略化されるのでこれからは積極的に使っていこうと思いました。
answer-file の書き方によってはいくつか効率化できそうな気もするのでもう少し触り込んでみたいですね。
さいごに
OpenStack ユーザ会にもちょいちょい参加しているので皆様よろしくお願いします!