OpenStack Juno & CentOS7 で packstack マルチノードインストールを試す


#概要

本記事は [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 に置き換えたい。
そこで下記を修正する。

```/etc/openstack-dashboard/local_settings
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 へ置き換える。

```/etc/nova/nova.conf
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 ユーザ会にもちょいちょい参加しているので皆様よろしくお願いします！