Open Stack をやってみたの巻（編集中）

#目的
オンプレミスハードの仮想化を行い、運営コストを見直せるか使ってみる

#目標
検証端末一台の上にVertualBox で、2台のUbuntu Server を建てて、Open Stack で仮想化してみる

#前提
日本仮想化技術株式会社 OpenStack構築手順書 Newton版　(下のサイトからダウンロード可能)を参考にする
https://enterprisecloud.jp/installguide-openstack/

検証端末情報
Windows 10 Pro ver.1703 64bit
Intel(R) Core(TM) i5-6200U CPU @2.30GHz 2.40Ghz
実装RAM 16GB
238GB ストレージ

VirtualBox ver.5.1.26




#環境のセットアップ
まずは、Ubuntu Server を下のサイトからダウンロード
https://www.ubuntu.com/download/server

今回は、
Ubuntu Server 16.04.3 LTS を選択
![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/a72737b0-34bb-ba26-8062-f9eaa8d18279.jpeg)

30分程度のダウンロードで完了。


VM 間の通信を実現するため、
ダウンロードの合間にNAT ネットワークを作成する。
参考は下のサイト
http://changineer.info/server/virtualization/virtualbox.html#_8211-4

Oracle VM VirtualBox マネージャー　から、
`ファイル > 環境設定 > ネットワーク > NATネットワーク, +マークを押下 > NatNetwork という項目が追加される > NatNetwork を右クリック > 編集`

NAT ネットワーク詳細　から、
`ネットワークを有効化をチェック
ネットワークCIDR　： 10.0.1.0/24(任意)
ネットワークオプション：DHCP のサポート にチェック
OK
`
Oracle VM VirtualBox マネージャー画面で、OK




VirtualBox を下の情報で、Ubuntu Server を2台作成する
※画像では、"ubuntu_Atype" サーバがあるが無視する

・contoroller
![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/d54930e0-859e-ca73-9915-82cc46477e5f.jpeg)


・compute
![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/282d06d2-e2ad-9f4b-97d7-487cfdcc7d04.jpeg)



VM 同士の通信をしたいため、NIC を追加する
※contoroller と compute 両方で設定する
Oracle VM VirtualBox マネージャー画面にて、
該当VMを右クリック > 設定 > ネットワーク > アダプター2

アダプター2画面にて、
ネットワークアダプターを有効化へチェック
割り当て：NAT ネットワーク
OK
![WS000012.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/32c2414c-6397-9f91-27e0-eac3862ef6f8.jpeg)


VM 起動して、起動ディスク(Ubuntu Serverのiso ファイル )を指定する。


#OS の初期設定
起動後、下のパラメータで設定した。

<contoroller とcompute VM 共通 パラメータ>

| 設定項目　| 標準設定 | 今回設定 | 備考 |
|:-:|:-:|:-:|:-:|
|   |   |   |   |
| Language | English  | 同左  |  本当は日本語がいいが、文字ずれするらしく英語を選択 |
| Ubuntu top? page |  Install Ubuntu Server | 同左  |   |
| Select a language  |  English |  同左 |   |
| Select your location  |  United States | Other > Asia > Japan |   |
| Configure locales  | United States  | 同左  |   |
| Configure the keyboard  | No  | 同左  |   |
| Country of orgin for the keyboard | Japanese  | 同左  |   |
| Keyborad layout  | Japanese  | 同左  |   |
| Hostname  | ubuntu  | openstackcontroller / openstackcompute  | 任意  |
| Full name for the new user |  brank | 任意 | |
| Username for your account | 上の情報の性  | 任意  |   |
| Choose a password for the new user | blank  | 任意  |   |
| Encrypt your home directory  | No  | 同左  |   |
| Is this time zone correct Asia/Tokyo | Yes  | 同左  | Asia/Tokyo であることを確認する  |
| Partitioning method  | Guided - use entire disk and set up LVM  | 同左  |   |
| Select disk to partition  | SCSI3 (0,0,0) (sda) - 53.7 GB ATA VBOX HARDDISK  | 同左  |   |
| Write the changes to disks and configure LVM  | No  | Yes  | 設定値が上の情報であることを確認する  |
| Amount of volume group to use for guided partitioning | 53.2GB  | 同左  |   |
| Write the changes to disk  | No  | Yes  | 上の設定になっていることを確認する  |
| HTTP proxy informatin  | blank  | 任意  |   |
| manage upgrades on this system  | No automatic updates  | 任意  |   |
| Choose software to install  | standard system utilities  | OpenSSH server  | 初期値のスタンダートユーティリティはチェックを外す  |
| Install the GRUB boot loader to the master bott record  | Yes  | 同左  |   |
| Finish the Installation  | Continue  | 同左  |   |

5分程度で、Ubuntu Server が立ち上がる。
登録したユーザ情報で、ログインする。


#Ubuntu Server のネットワークデバイス設定
両サーバで設定を実施すること
まずは、interfaces ファイルのバックアップ。バックアップ先は任意で

オリジナルファイルのバックアップ先フォルダを作成
`mkdir /tmp/orgfiles`

interfaces のバックアップ
`cp -p /etc/network/interfaces /tmp/orgfiles/interfacesORG`

controller のIP設定（例）

```ruby:/etc/network/interfaces
auto enp0s3
iface enp0s3 inet dhcp

auto enp0s8
iface enp0s8 inet dhcp

```
※上の作業を両方のVM で実施


設定の反映のため、サーバの再起動
`sudo reboot`

サーバ再起動後、両サーバのインターフェース情報を確認する。
`ifconfig`

![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/184724/e78ec7b4-6548-86ec-9807-78e81a355f94.png)

確認点
１．インターフェースが3つ(enp0s3,enp0s8,lo等)出ていること
２．それぞれのインターフェースのIP をメモ
※controller と compute で実施する

インターネットに抜けていることと他のサーバへping が失敗しないことを確認する。
１．NAT 経由で、公開サーバへ抜けていることを確認する
　　(例) `ping 8.8.8.8`
２．NAT ネットワーク経由で、隣接サーバのIF (恐らく、enp0s8 に設定しているはず)へ抜けていることを確認する
　　(例) `ping 10.0.1.4`


OpenStack 向けにIF のIP を固定する。
それぞれ下のようにIP を固定する。
`sudo vi /etc/network/interfaces`

■Controller(例)
![WS000020.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/a4da91b5-c189-02a0-3084-027920f4e867.jpeg)



■Compute(例)
![WS000019.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/9c170458-6909-7656-365f-eb0378f85e1f.jpeg)



設定の反映のため、それぞれ、サーバを再起動する
 `sudo reboot`

疎通を確認する。
■Controller 側
`ping 8.8.8.8`
`ping 10.0.2.102`

■Compute 側
`ping 8.8.8.8`
`ping 10.0.2.101`


#静的ホスト名の解決設定
hosts 情報を下のように修正する
`sudo vi /etc/hosts`

■例 Compute 側
![WS000018.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/f9381493-a1a1-987a-cc1f-89d215ea5fad.jpeg)

共通で、127.0.1.1 の行をコメントアウト(行の先頭に# を入力)する


#システムの更新
各VM で、
Mitaka向けUbuntu Cloud Archiveリポジトリーを登録する

`sudo add-apt-repository cloud-archive:newton`

各VM で、
システムをアップデートする。
`apt-get update && apt-get dist-upgrade`

#クライアントソフトのインストール
Controller サーバで、
`sudo apt-get install python-openstackclient python-pymysql`

上のコマンドの途中で、"do you wanto continue?" と聞かれるので、
`Yes`

#NTP の設定
Chrony を利用する。
初利用なので、下のサイトで概要を勉強。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/ch-Configuring_NTP_Using_the_chrony_Suite.html#sect-differences_between_ntpd_and_chronyd

ntpd より、
頻繁にネットワーク接続が一時停止したり、断続的に切断され再接続されるようなシステムに強い。
たとえば、モバイルや仮想システムで、導入を検討する。

各VM で、
時刻同期のため、Chrony をインストールする。
`sudo apt-get install chrony`
上のコマンドの途中で、"do you wanto continue?" と聞かれるので、
`Y`

Chrony の設定を変更する。
Controller を親として、Compue を子とする。
NTP 参照先は、ntp.nict.jp で。

■Controller 側
`sudo vi /etc/chrony/chrony.conf`
下のように修正する

１．指定のNTP サーバと同期する
下の行を追加して、pool 2.~ をコメントアウトする。
`server ntp.nict.jp iburst`
![WS000030.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/5a4a325a-3192-5eaa-9f57-8a90ef6c76a7.jpeg)


２．LAN からのアクセスを許可する
下の行を追加する
`allow 10.0.1.0/24`
![WS000029.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/acf79d56-452c-306f-4672-f275f8809979.jpeg)



chrony 再起動
`sudo service chrony restart`

同期の確認
`chronyc sources`
下のようになっていれば成功
![WS000028.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/80dd54a9-1ab8-1ad9-6706-d5ba2ab18c41.jpeg)



■Compute 側
`sudo vi /etc/chrony/chrony.conf`
下のように修正する

`server 10.0.1.101`
上の行を追加して、pool 2.~ をコメントアウトする。

同期の確認
`chronyc sources`
下のようになっていれば成功
![WS000031.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/3a5bd898-526a-4a61-51c4-7beddcf5574b.jpeg)

#DB のインストール
Controller へMaria DB をインストール
`sudo apt-get install mariadb-server python-pymysql`
上のコマンドの途中で、 Do you wanto continue? と聞かれるので
`Y`

設定ファイルの作成
`sudo vi /etc/mysql/conf.d/openstack.cnf`

下の内容を全て追記

```ruby:/etc/mysql/conf.d/openstack.cnf
[mysqld]
bind-address = 10.0.1.101
default-storage-engine = innodb innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
```

設定の反映のため、DB を再起動
`sudo service mysql restart`

#RabbitMQ のインストール
OpenStack のメッセージによる連携のため、メッセージパッケージをインストールする

■Controller 側
`sudo apt-get install rabbitmq-server`
途中で、continue 聞かれるので、
`y`

インストールには、15分程度時間がかかるので、ここで小休憩。

RabbitMQ へユーザを作成する
`sudo /usr/sbin/rabbitmqctl add_user openstack (PW任意)`

RabbitMQ のopenstack ユーザへ権限を付与する
`sudo /usr/sbin/rabbitmqctl set_permissions openstack ".*" ".*" ".*"`

サービスの再起動
`sudo /etc/init.d/rabbitmq-server restart`

正常に動作していることをログで確認する
`tailf /var/log/rabbitmq/rabbit@openstackcontroller.log`

下のようにエラーなく、待ち受けていればOK
![WS000032.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/b9731eb6-71d6-c21b-4227-d374d3f1c4c6.jpeg)


admin ユーザの環境変数設定ファイルを新規作成する
`sudo vi ~/admin-openrc`

```ruby:~/admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
export OS_AUTH_URL=http://controller:35357/v3 
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(admin)\$ '

```

demo ユーザの環境変数設定ファイルを新規作成する
`sudo vi ~/demo-openrc.sh`

```ruby:~/demo-openrc.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=password
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(demo)\$ 
 
```

# memcached のインストールと設定
`sudo apt-get install memcached python-memcache`

`sudo vi /etc/memcached.conf`
下のように変更する
![WS000033.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/c6c964c1-507d-d0df-ccc1-b3c1c5fb3d88.jpeg)

`-l 10.0.1.101`
上の行を追加する。初期は、127.0.0.1 になっているので変更する。

memcached サービスの再起動
`sudo /etc/init.d/memcached restart`


#Keystone のインストール

データベースを作成する
■Controller 側
mysql へログイン
`mysql -u root`

CLI の表記が下になっていれば、ログイン完了
`MariaDB [(none)]>`

keystone データベースの作成とユーザの作成
`CREATE DATABASE keystone; `

`GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'password'; `

`GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'password';`

`exit`

ログインでkyestone ユーザとデータベースがあることを確認する
`mysql -u keystone -p`

`show databases;`

下のように表示されれば完了