OpenStack Newton環境の構築(Packstack使用)

#はじめに
PackstackによるOpenStackのお手軽インストールを試したらいろいろハマりました。ようやく成功率の高い手順を編み出せたので、ハマった部分も補足しつつメモとしてまとめます。

2017.1.11 説明を少々追加

#目指すOpenStack構成
- VirtualBoxで作成したCentOS7.2のVMにOpenStackを構築
- OpenStackはPackstackでAllInOneインストール
- VirtualBoxのVMは自宅LANにブリッジ接続
- 自宅LAN＝OpenStackのPublicネットワーク（OpenStack上で作成するインスタンスにFloating IPを設定すれば、PublicネットワークからSSH接続可能）

![構成.png](https://qiita-image-store.s3.amazonaws.com/0/94561/bc3510e1-1976-d883-2f59-5cb5cf660f6d.png)


#使用したPC
- 本体：Mac Mini(2014年モデル)
- CPU：2.8GHz Intel Core i5
- メモリ：16GB
- OS：macOS Sierra 10.12.2
- VirtualBox：バージョン5.1.12

#構築メモ
##1. VirtualBoxでVM作成
以下のVMを作成し起動させる。

- 名前：PackStack_Newton
- メモリ：8192MB
- 仮想ハードディスク：100GB（可変サイズ）
- CPU数：2CPU
- CDROM：CentOS-7-x86_64-DVD-1511.iso
- ネットワーク：ブリッジアダプターを選択、**プロミスキャスモードは「すべて許可」を選択すること**
  ![VirtualBox.png](https://qiita-image-store.s3.amazonaws.com/0/94561/774a9c6b-d8d6-6420-ea94-e01133675bfc.png)
 
##2. CentOS7.2のインストール
インストーラ上で以下のようにしてインストールを行う。**開発ツール等を入れてしまうとPackstackの構築が失敗する可能性大のため最小限のインストールを行う。**

- SECURITY POLICY：Apply security policyをオフ
- ソフトウェアの選択は「最小限のインストール」（何もチェックを付けない）
- ネットワークとホスト名
    - イーサネット(enp0s3)をオンにする
    - ホスト名：packstack
    - 設定をクリック
        - 全般の「この接続が利用可能になったときは自動的に接続する」にチェック
        - IPv4のセッティングでは下図の手動設定を行う
        ![CentOS_2.png](https://qiita-image-store.s3.amazonaws.com/0/94561/1a9a1d50-7c90-a785-5244-e4ccc29937ff.png)

インストール中にROOTパスワードとユーザー作成（管理者設定）も行う。 

##3. Packstackインストール
以降はVirtualBoxのVMにSSHログインし、rootアカウントで実施する。
###3.1 事前準備
####3.1.1 NTP設定
```
# yum -y install ntp
# systemctl start ntpd
# systemctl enable ntpd
```

####3.1.2 ファイアウォールやNetworkManagerの無効化
```
# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager
# systemctl enable network
# systemctl start network
# setenforce 0
```

####3.1.3 英語ロケール設定
```
# echo "LANG=en_US.utf-8" > /etc/environment
# echo "LC_ALL=en_US.utf-8" >> /etc/environment
```

リブートで反映させる。

```
# reboot
```

###3.2 Packstackインストール
```
# yum install -y centos-release-openstack-newton
# yum update -y
# yum install -y openstack-packstack
```

Packstackのコンフィグとなるanswerファイルを事前作成する。
自宅LANがPublicネットワークとなるよう、--os-neutron-ovs-bridge-interfacesオにVMのインターフェース名（ここではenp0s3）を指定しておく。
その他にもさまざまな設定が可能だが、**--provision-demo-floatrangeでPublicネットワークのアドレスを指定するとPackstackのインストールが途中で失敗するため指定しないこと。**

```
# packstack --gen-answer-file=/root/answer.txt \
 --default-password=password \
 --os-heat-install=y \
 --ntp-servers=ntp.nict.jp \
 --os-neutron-ovs-bridge-mappings=external:br-ex \
 --os-neutron-ovs-bridge-interfaces=br-ex:enp0s3
```

answerファイルを指定してPackstackのインストールを開始する（完了するまで１時間以上かかる）。

```
# packstack --answer-file=/root/answer.txt
```

以下が出力されればインストール成功。

```
 **** Installation completed successfully ******

Additional information:
 * File /root/keystonerc_admin has been created on OpenStack client host 192.168.0.159. To use the command line tools you need to source the file.
 * To access the OpenStack Dashboard browse to http://192.168.0.159/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
 * To use Nagios, browse to http://192.168.0.159/nagios username: nagiosadmin, password: password
 * Because of the kernel update the host 192.168.0.159 requires reboot.
 * The installation log file is available at: /var/tmp/packstack/20170109-183736-RgumXF/openstack-setup.log
 * The generated manifests are available at: /var/tmp/packstack/20170109-183736-RgumXF/manifests
```

##4. OpenStackネットワークの再構築
###4.1 既存設定を削除
ネットワークを作り直すため、adminアカウントでデフォルトのネットワーク設定を削除する。

```
# source /root/keystonerc_admin
# neutron router-gateway-clear router1
# neutron router-interface-delete router1 private_subnet
# openstack router delete router1
# openstack network delete private
# openstack network delete public
```

###4.2 Publicネットワークの再作成
adminアカウントでPublicネットワークとサブネットを再作成する。

```
# openstack network create public --external
# openstack subnet create public_subnet \
 --subnet-range 192.168.0.0/24 \
 --allocation-pool start=192.168.0.162,end=192.168.0.180 \
 --gateway 192.168.0.1 \
 --no-dhcp \
 --network public
```

###4.3 Privateネットワークの再作成
demoアカウントでPrivateネットワークとサブネットを再作成する。

```
# source /root/keystonerc_demo
# openstack network create private
# openstack subnet create private_subnet \
 --subnet-range 10.0.0.0/24 \
 --allocation-pool start=10.0.0.2,end=10.0.0.254 \
 --gateway 10.0.0.1 \
 --network private
```

###4.4 ルーターの再作成
demoアカウントでルーターを再作成し、ゲートウェイとPrivateネットワークのサブネットをルーターに関連付ける。

```
# openstack router create router1
# neutron router-gateway-set router1 public
# neutron router-interface-add router1 private_subnet
```

##5. インスタンスを生成して疎通確認
###5.1 セキュリティグループの編集
インスタンスへのpingとsshが通るよう、セキュリティグループに許可ルールを追加する。

- ダッシュボードにdemoアカウント（パスワードはpassword）でログイン
- プロジェクト→コンピュート→アクセスとセキュリティーを選択
- セキュリティグループタブを選択→defaultのルールの管理
- ルールの追加より以下４つのルールを追加
    - ルール=ALL ICMP、方向=受信
    - ルール=ALL ICMP、方向=送信
    - ルール=ALL TCP、方向=受信
    - ルール=ALL TCP、方向=送信

ルール追加後、セキュリティグループは以下となる。
![dashboard_1.png](https://qiita-image-store.s3.amazonaws.com/0/94561/3a0c5513-bc3e-9623-cad8-9f1aaeed285d.png)

###5.2 インスタンスの生成

- ダッシュボードにdemoアカウント（パスワードはpassword）でログイン
- プロジェクト→コンピュート→インスタンスを選択
- インスタンスの起動をクリックし、以下を設定してインスタンスの起動ボタンをクリック
    - 詳細タブ：インスタンス名にServer1
    - ソースタブ：ブートソースからイメージを選び、cirrosを選択
    - フレーバータブ：m1.tinyを選択
    - ネットワークタブ：privateが選択されていることを確認

以下のようにインスタンスが生成、起動される。
![dashboard_2.png](https://qiita-image-store.s3.amazonaws.com/0/94561/184811e9-f9f3-c01a-2cf7-0fbd8f9fa35d.png)

インスタンスのステータスが稼働中になったら、Floating IPの割り当てを行う。
![dashboard_3.png](https://qiita-image-store.s3.amazonaws.com/0/94561/aced884a-c46e-6430-b358-45dccc735d21.png)

###5.3 ping疎通確認
FloatingIPに対してpingを実施し、レスポンスが正常に返ってくることを確認する。

```
# ping 192.168.0.169
PING 192.168.0.169 (192.168.0.169) 56(84) bytes of data.
64 bytes from 192.168.0.169: icmp_seq=1 ttl=63 time=2.83 ms
64 bytes from 192.168.0.169: icmp_seq=2 ttl=63 time=1.89 ms
64 bytes from 192.168.0.169: icmp_seq=3 ttl=63 time=0.717 ms
```