OpenStack kolla-ansibe(pike)でマルチノード構築

* はじめに

openstack kollaの説明はしません（キリっ
マニアックなので、興味ある人はQiita記事を探していください。
雑に説明すれば、OpenStackのコンポをDockerで包んでいろんな問題を解決しようとしているやつです。

本記事ではopenstack kollaのうち、kolla-ansibe(pike版)でマルチノードデプロイするために必要な情報を記載しています。
all-in-oneの成功記事はありましたが、マルチノードデプロイの記事がなかったのでチャレンジしてみた次第です。

結果として成功して動作していますが、なかなか大変でした。

* 環境情報

CentOS7.4
controller(ASROCK NUC): CPU:n3150 メモリ16GB ストレージ:SSD 128GB
node1(FMV P771/D): CPU:Corei5 2520M メモリ16GB ストレージ:SSD 256GB
node2(FMV P771/E): CPU:Corei5 3320M メモリ16GB ストレージ:SSD 256GB
Cinderボリューム: NASからのNFSマウント!

* ネットワーク構成

![memo.png](https://qiita-image-store.s3.amazonaws.com/0/28157/6e4c653d-4a19-6563-83cb-7aea8a883c04.png)

controllerを含むすべてのノードが異なるヘテロな環境となります。


1. 準備


[kolla-ansibleでOpenStack(stable/pike)を構築する](|https://qiita.com/raichi/items/71869442e8101fd38230)を参考に、
3.3 コンフィグ編集まで進める。

1.1. network_interfaceの編集

```/etc/kolla/globals.yml
network_interface: "ens2p0"
```

ここのは、全ノード共通のI/F名しかかけないため、ヘテロ環境でkolla-ansibleが出来ない。
このため、各ノードのI/Fを書き換える。

[この記事](https://orebibou.com/2015/03/centos-7%E3%81%A7nic%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/)を連行に、インタフェース名を変更。

今回は、Controllerに合わせ、すべてを```ens2p0```とする。

それ以外の設定は特に問題ない。

1.2. マルチノードコンフィグ

全ノードで名前解決出来るように設定

```/etc/hosts
192.168.2.11 n3150
192.168.2.12 p771d
192.168.2.13 p771e
```

multinodeコンフィグは最初のほうだけ修正すればOK

```multinode
[control]
# These hostname must be resolvable from your deployment host
n3150

# The above can also be specified as follows:
#control[01:03]     ansible_user=kolla

# The network nodes are where your l3-agent and loadbalancers will run
# This can be the same as a host in the control group
[network]
n3150

[compute]
p771d
p771e

[monitoring]
n3150

# When compute nodes and control nodes use different interfaces,
# you can specify "api_interface" and other interfaces like below:
#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1

[storage]
n3150

[deployment]
n3150       ansible_connection=local
```

diffは以下の通り

```diff

5c5,7
< n3150
---
> control01
> control02
> control03
13c15,16
< n3150
---
> network01
> network02
16,17c19
< p771d
< p771e
---
> compute01
20c22
< n3150
---
> monitoring01
27c29
< n3150
---
> storage01
30c32
< n3150       ansible_connection=local
---
> localhost       ansible_connection=local

```

2.デプロイ準備

2.1. computeノードにDockerをインストール

          先に立てたDockerレジストリを利用するので、controllerとcomputeのDockerデーモンにinsecureの設定を追加
          CentOSに最近のDockerをインストールすると、dockerdになっているので、以下の設定を入れる

```/usr/lib/systemd/system/docker.service
 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.2.11:4000
```

2.2. ansible2.2のインストール
参考記事の通り、2.2を明示して再インストール

[QuickStart](https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html)には、stable/ocataならansibe2.0、pikeならansible2.2と書いてあるのに、yum installするとansible2.4になるという。

contollerだけではく、computeノード側でも実施

2.3. Docker SDKの再インストール

```
kolla-ansible prechecks -i multinode
```

上記コマンドによるチェックで、compute側のDockerのバージョン不整合というエラーが出ます。
pipで管理されているDockerSDKのDocker対応バージョンが古いために起こります。
このため、対応するDockerSDKをインストールします。

https://pypi.python.org/pypi/docker/

```
wget https://pypi.python.org/packages/20/73/3bb05004dcc734182d57a1c8a802732e05788678a71bfa12348a614d5d73/docker-2.6.1.tar.gz#md5=be4c90ee936ad0af4c45532616bf8b52
tar zxvf docker-2.6.1.tar.gz
cd docker-2.6.1
python setup.py install
```

これだけだとうまく依存関係を解決してくれない。
一応、入ってないはずだけど、docker-pyを抜いておく。

```
pip uninstall docker-py
```

しかし、これでもおかしいのでライブラリをいくつか入れ直す
 
```
pip install requests -U
pip install urllib3 -U
pip uninstall requests urllib3 pyOpenSSL
pip install requests urllib3 pyOpenSSL
pip install requests urllib3 pyOpenSSL -U
```

pythonよく分かってないけど、2回叩かないと綺麗に消えなかったので叩いておく（おまじない）

2.4. Cinder用NFSの設定
デフォルトLVMが辛いのでNFSを使う

[ガイド](https://docs.openstack.org/kolla-ansible/pike/cinder-guide.html)のNFSを参考に設定。
設定ファイルの置き場に困ったが、以下の置けば設定を読んでくれる様子

```
vi /etc/kolla/config/nfs_shares

192.168.1.xxx:/openstack
```

contoller自身はNFSサーバにはならないので、exportsの設定は不要

fstabでNFSマウントを書いて置けば良い

```
vi /etc/fstab

192.168.1.xxx:/openstack  /kolla_nfs                   nfs     defaults        0 0
```

3.デプロイ

```
kolla-ansible deploy -i multinode
```

4.ポストデプロイ
これを実施しなくても利用可能だが、flavorとか作ってくれるので便利

```
kolla-ansible post-deploy
```

5.再デプロイ
kollaの最大のメリットは、ホストOSを汚さないこと。
packstackだと、再インストールはほぼ不可能に近いけど、kollaはDockerなので比較的簡単に可能。

しかし、先日のおぷすた勉強会でも話題にあがったもので、再デプロイするとhorizonのCSSが消失するという問題がある
[kollaをインストしてみた](https://www.slideshare.net/tkkd/openstack-kolla-20171025-josug-v3)のP22

5.1. Stylesheetの読み直し
いろいろ試した結果
horizonコンテナに入ってStylesheet周りのクリーンナップと再コンパイルをすることでひとまず対処可能な様子

controllerノードにて、

```
docker exec -it horizon bash
/var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/manage.py collectstatic --noinput --clear
/var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/manage.py compress --force
exit
docker restart horizon
```

通常は、コンテナ作成時に実施しているようで、再デプロイだと再起動なので処理が走ってないように見える。
horizonの再起動がわからなかったけど、コンテナの再起動で良い様子


ひとまず、これでうまく行けば動くと思われる

controllerはこんな感じ

```
[root@n3150 pike]# docker ps
CONTAINER ID        IMAGE                                                                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
63af78323604        192.168.2.11:4000/lokolla/centos-source-horizon:5.0.1                     "kolla_start"            2 weeks ago         Up 2 weeks                                   horizon
bba4f50c87d1        192.168.2.11:4000/lokolla/centos-source-heat-engine:5.0.1                 "kolla_start"            2 weeks ago         Up 2 weeks                                   heat_engine
2cbcd75a15b9        192.168.2.11:4000/lokolla/centos-source-heat-api-cfn:5.0.1                "kolla_start"            2 weeks ago         Up 2 weeks                                   heat_api_cfn
e9db0b2268d1        192.168.2.11:4000/lokolla/centos-source-heat-api:5.0.1                    "kolla_start"            2 weeks ago         Up 2 weeks                                   heat_api
7c88547f2c7b        192.168.2.11:4000/lokolla/centos-source-neutron-metadata-agent:5.0.1      "kolla_start"            2 weeks ago         Up 2 weeks                                   neutron_metadata_agent
2850b49a2130        192.168.2.11:4000/lokolla/centos-source-neutron-l3-agent:5.0.1            "kolla_start"            2 weeks ago         Up 2 weeks                                   neutron_l3_agent
c4fa5e60aaf9        192.168.2.11:4000/lokolla/centos-source-neutron-dhcp-agent:5.0.1          "kolla_start"            2 weeks ago         Up 2 weeks                                   neutron_dhcp_agent
b0a4c5570587        192.168.2.11:4000/lokolla/centos-source-neutron-openvswitch-agent:5.0.1   "kolla_start"            2 weeks ago         Up 2 weeks                                   neutron_openvswitch_agent
6a6d12f77ee0        192.168.2.11:4000/lokolla/centos-source-neutron-server:5.0.1              "kolla_start"            2 weeks ago         Up 2 weeks                                   neutron_server
6cbd66a64873        192.168.2.11:4000/lokolla/centos-source-openvswitch-vswitchd:5.0.1        "kolla_start"            2 weeks ago         Up 2 weeks                                   openvswitch_vswitchd
c6c191c463e9        192.168.2.11:4000/lokolla/centos-source-openvswitch-db-server:5.0.1       "kolla_start"            2 weeks ago         Up 2 weeks                                   openvswitch_db
5fc949d20956        192.168.2.11:4000/lokolla/centos-source-nova-novncproxy:5.0.1             "kolla_start"            2 weeks ago         Up 2 weeks                                   nova_novncproxy
2c6d467a3d2e        192.168.2.11:4000/lokolla/centos-source-nova-consoleauth:5.0.1            "kolla_start"            2 weeks ago         Up 2 weeks                                   nova_consoleauth
a5f87545ad6f        192.168.2.11:4000/lokolla/centos-source-nova-conductor:5.0.1              "kolla_start"            2 weeks ago         Up 2 weeks                                   nova_conductor
d5d22ed99fdb        192.168.2.11:4000/lokolla/centos-source-nova-scheduler:5.0.1              "kolla_start"            2 weeks ago         Up 2 weeks                                   nova_scheduler
305b87208a14        192.168.2.11:4000/lokolla/centos-source-nova-api:5.0.1                    "kolla_start"            2 weeks ago         Up 2 weeks                                   nova_api
ad5ea72cd910        192.168.2.11:4000/lokolla/centos-source-nova-placement-api:5.0.1          "kolla_start"            2 weeks ago         Up 2 weeks                                   placement_api
10dfed44ab12        192.168.2.11:4000/lokolla/centos-source-cinder-backup:5.0.1               "kolla_start"            2 weeks ago         Up 2 weeks                                   cinder_backup
2a3cc8a96f53        192.168.2.11:4000/lokolla/centos-source-cinder-scheduler:5.0.1            "kolla_start"            2 weeks ago         Up 2 weeks                                   cinder_scheduler
fdd5db209f86        192.168.2.11:4000/lokolla/centos-source-cinder-api:5.0.1                  "kolla_start"            2 weeks ago         Up 2 weeks                                   cinder_api
d482b2544fff        192.168.2.11:4000/lokolla/centos-source-glance-registry:5.0.1             "kolla_start"            2 weeks ago         Up 2 weeks                                   glance_registry
95632b5e758f        192.168.2.11:4000/lokolla/centos-source-glance-api:5.0.1                  "kolla_start"            2 weeks ago         Up 2 weeks                                   glance_api
a24cf224077f        192.168.2.11:4000/lokolla/centos-source-keystone:5.0.1                    "kolla_start"            2 weeks ago         Up 2 weeks                                   keystone
bce1fd14038a        192.168.2.11:4000/lokolla/centos-source-rabbitmq:5.0.1                    "kolla_start"            2 weeks ago         Up 2 weeks                                   rabbitmq
5ef43e173fbf        192.168.2.11:4000/lokolla/centos-source-mariadb:5.0.1                     "kolla_start"            2 weeks ago         Up 2 weeks                                   mariadb
a66ad69cd0e3        192.168.2.11:4000/lokolla/centos-source-cron:5.0.1                        "kolla_start"            2 weeks ago         Up 2 weeks                                   cron
48cee62ca250        192.168.2.11:4000/lokolla/centos-source-kolla-toolbox:5.0.1               "kolla_start"            2 weeks ago         Up 2 weeks                                   kolla_toolbox
9178e686966f        192.168.2.11:4000/lokolla/centos-source-fluentd:5.0.1                     "kolla_start"            2 weeks ago         Up 2 weeks                                   fluentd
b4080590aaad        192.168.2.11:4000/lokolla/centos-source-memcached:5.0.1                   "kolla_start"            2 weeks ago         Up 2 weeks                                   memcached
599e7994e28d        192.168.2.11:4000/lokolla/centos-source-cinder-volume:5.0.1               "kolla_start"            2 weeks ago         Up 2 weeks                                   cinder_volume
f1c9b12fe301        registry                                                                    "/entrypoint.sh /etc…"   3 weeks ago         Up 2 weeks          0.0.0.0:4000->5000/tcp   registry
```

compute側はこんな感じ

```
[root@p771e ~]# docker ps
CONTAINER ID        IMAGE                                                                       COMMAND             CREATED             STATUS              PORTS               NAMES
be2c625aef4d        192.168.2.11:4000/lokolla/centos-source-neutron-openvswitch-agent:5.0.1   "kolla_start"       2 weeks ago         Up 2 weeks                              neutron_openvswitch_agent
b2a62d530490        192.168.2.11:4000/lokolla/centos-source-openvswitch-vswitchd:5.0.1        "kolla_start"       2 weeks ago         Up 2 weeks                              openvswitch_vswitchd
e1e47141c7c2        192.168.2.11:4000/lokolla/centos-source-openvswitch-db-server:5.0.1       "kolla_start"       2 weeks ago         Up 2 weeks                              openvswitch_db
d576259eb6ae        192.168.2.11:4000/lokolla/centos-source-nova-libvirt:5.0.1                "kolla_start"       2 weeks ago         Up 2 weeks                              nova_libvirt
7740912da8b4        192.168.2.11:4000/lokolla/centos-source-nova-ssh:5.0.1                    "kolla_start"       2 weeks ago         Up 2 weeks                              nova_ssh
d250349707de        192.168.2.11:4000/lokolla/centos-source-kolla-toolbox:5.0.1               "kolla_start"       2 weeks ago         Up 2 weeks                              kolla_toolbox
a42b2b1a1cb7        192.168.2.11:4000/lokolla/centos-source-fluentd:5.0.1                     "kolla_start"       2 weeks ago         Up 2 weeks                              fluentd
504c4304ed6c        192.168.2.11:4000/lokolla/centos-source-nova-compute:5.0.1                "kolla_start"       2 weeks ago         Up 2 weeks                              nova_compute
```