CentOS8にAll-in-One構成のRDOをインストールする

# 環境

* RDOのホスト
    * ベアメタル
    * CentOS 8.5
    * プロキシ環境
* RDO
    * PackStack 17.0.0
    * OpenStack Victoria

# ネットワーク構成

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350260/86ccdaf9-ba7c-d73a-c4ef-022f31fe4330.png" width=100%>

# 作業ログ

以下の公式手順を参考にインストールする。
https://www.rdoproject.org/install/packstack/

## 事前準備

言語設定が`en_US.utf-8`であることを確認。

```
[centos@rdo ~]$ localectl status
   System Locale: LANG=en_US.utf-8
       VC Keymap: jp
      X11 Layout: jp
```

SELnuxの無効化
公式手順にはないが、設定が面倒なので無効化する。

```
[centos@rdo ~]$ sudo setenforce 0
[centos@rdo ~]$ getenforce 
Permissive
[centos@rdo ~]$ sudo vim /etc/selinux/config 
[centos@rdo ~]$ cat /etc/selinux/config 

...

SELINUX=disabled

...

```

NTPの設定

```
[centos@rdo ~]$ sudo dnf install chrony

...

Complete!
[centos@rdo ~]$ sudo vim /etc/chrony.conf 
[centos@rdo ~]$ cat /etc/chrony.conf 

...

pool <ntp-host> iburst

...

allow 0.0.0.0/16

...

```

dnfのプロキシ設定

```
[centos@rdo ~]$ sudo vim /etc/dnf/dnf.conf
[centos@rdo ~]$ cat /etc/dnf/dnf.conf 
[main]

...

proxy=http://<proxy-host>:<proxy-port>/
```

インストール済みパッケージのアップデート

```
[centos@rdo ~]$ sudo dnf update -y

...

Complete!
```

fairewalldの無効化

```
[centos@rdo ~]$ sudo systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[centos@rdo ~]$ sudo systemctl stop firewalld
```

NetworkManagerを無効化して、network-scriptを有効化

```
[centos@rdo ~]$ sudo systemctl stop firewalld
[centos@rdo ~]$ sudo systemctl disable NetworkManager
Removed /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
Removed /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service.
[centos@rdo ~]$ sudo systemctl enable network
Failed to enable unit: Unit file network.service does not exist.
[centos@rdo ~]$ sudo dnf install network-scripts

...

Complete!
[centos@rdo ~]$ sudo systemctl enable network
network.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable network
[centos@rdo ~]$ sudo systemctl start network
```

bond, VLAN, IPアドレスの設定

```
[centos@rdo ~]$ cat <<EOF |sudo tee /etc/sysconfig/network-scripts/ifcfg-bond0 > /dev/null
> BONDING_OPTS=mode=802.3ad
> TYPE=Bond
> BONDING_MASTER=yes
> BOOTPROTO=static
> NAME=bond0
> DEVICE=bond0
> ONBOOT=yes
> EOF
[centos@rdo ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-enp94s0f0
[centos@rdo ~]$ diff ifcfg-enp94s0f0 /etc/sysconfig/network-scripts/ifcfg-enp94s0f0
4c4
< BOOTPROTO=dhcp
---
> BOOTPROTO=static
14c14,16
< ONBOOT=no
---
> ONBOOT=yes
> MASTER=bond0
> SLAVE=yes
[centos@rdo ~]$ diff ifcfg-enp94s0f1 /etc/sysconfig/network-scripts/ifcfg-enp94s0f1
4c4
< BOOTPROTO=dhcp
---
> BOOTPROTO=static
14c14,16
< ONBOOT=no
---
> ONBOOT=yes
> MASTER=bond0
> SLAVE=yes
[centos@rdo ~]$ cat <<EOF |sudo tee /etc/sysconfig/network-scripts/ifcfg-bond0.183 > /dev/null
> VLAN=yes
> TYPE=Vlan
> PHYSDEV=bond0
> VLAN_ID=183
> BOOTPROTO=static
> NAME=bond0.183
> DEVICE=bond0.183
> ONBOOT=yes
> PREFIX=24
> IPADDR=172.16.93.2
> EOF
> EOF
[centos@rdo ~]$ cat <<EOF |sudo tee /etc/sysconfig/network-scripts/ifcfg-bond0.184 > /dev/null
> VLAN=yes
> TYPE=Vlan
> PHYSDEV=bond0
> VLAN_ID=184
> BOOTPROTO=static
> NAME=bond0.184
> DEVICE=bond0.184
> ONBOOT=yes
> EOF
[centos@rdo ~]$ sudo reboot
```

```
[centos@rdo ~]$ ip a

...

10: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

...

11: bond0.183@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

...

    inet 172.16.183.2/24 brd 172.16.183.255 scope global bond0.183
       valid_lft forever preferred_lft forever
    inet6 fe80::42a6:b7ff:fe0e:56a4/64 scope link 
       valid_lft forever preferred_lft forever
12: bond0.184@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

...

```

## パッケージのインストール

```
[centos@rdo ~]$ sudo dnf config-manager --enable powertools
[centos@rdo ~]$ sudo dnf install -y centos-release-openstack-victoria

...

Complete!
[centos@rdo ~]$ sudo dnf update -y

...

Complete!
```

## packstackのインストール

```
[centos@rdo ~]$ sudo dnf install -y openstack-packstack

...

Complete!
[centos@rdo ~]$ packstack --version
packstack 17.0.0
```

## OpenStackのインストール

answer-fileの出力

```
[centos@rdo ~]$ packstack --gen-answer-file packstack-answer.txt
Additional information:
 * Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note that this backend does not support the VPNaaS plugin. Geneve will be used as the encapsulation method for tenant networks
[centos@rdo ~]$ ll packstack-answer.txt 
-rw------- 1 centos centos 51374 Jan 24 18:26 packstack-answer.txt
[centos@rdo ~]$ cp packstack-answer.txt packstack-answer.txt.bk
```

packstackの処理でデモ用イメージのダウンロードが実施されるが、プロキシに対応していないため、別途ダウンロードしてanswerフィルにパスを指定する必要がある。

https://www.rdoproject.org/testday/workarounds/

* Run packstack behind a proxy

```
[centos@rdo ~]$ http_proxy=http://172.16.183.1:63128/ curl -O http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   273  100   273    0     0    530      0 --:--:-- --:--:-- --:--:--   529
```

answer-fileの出力
ネットワークプラグインのデフォルトはOVNだが、今回はOVSを使用する。

```
[centos@rdo ~]$ packstack --gen-answer-file packstack-answer.txt --allinone --os-neutron-l2-agent=openvswitch --os-neutron-ml2-mechanism-drivers=openvswitch 
--os-neutron-ml2-tenant-network-types=vxlan --os-neutron-ml2-type-drivers=vxlan,flat --os-neutron-ovs-bridge-mappings=extnet:br-ex --os-neutron-ovs-bridge-interfaces=br-ex:bond0.184 --provision-image-url=/home/centos/cirros-0.3.5-x86_64-disk.img
[centos@rdo ~]$ cp packstack-answer.txt packstack-answer.txt.bk
```

作成したanswerファイルのIPアドレスの指定を修正する、

```
[centos@rdo ~]$ vim packstack-answer.txt
[centos@rdo ~]$ diff packstack-answer.txt.bk packstack-answer.txt
94c94
< CONFIG_CONTROLLER_HOST=<メンテナンス用IP>
---
> CONFIG_CONTROLLER_HOST=172.16.183.2
97c97
< CONFIG_COMPUTE_HOSTS=<メンテナンス用IP>
---
> CONFIG_COMPUTE_HOSTS=172.16.183.2
101c101
< CONFIG_NETWORK_HOSTS=<メンテナンス用IP>
---
> CONFIG_NETWORK_HOSTS=172.16.183.2
137c137
< CONFIG_STORAGE_HOST=<メンテナンス用IP>
---
> CONFIG_STORAGE_HOST=172.16.183.2
141c141
< CONFIG_SAHARA_HOST=<メンテナンス用IP>
---
> CONFIG_SAHARA_HOST=172.16.183.2
274c274
< CONFIG_AMQP_HOST=<メンテナンス用IP>
---
> CONFIG_AMQP_HOST=172.16.183.2
296c296
< CONFIG_MARIADB_HOST=<メンテナンス用IP>
---
> CONFIG_MARIADB_HOST=172.16.183.2
339c339
< CONFIG_KEYSTONE_LDAP_URL=ldap://<メンテナンス用IP>
---
> CONFIG_KEYSTONE_LDAP_URL=ldap://172.16.183.2
1177c1177
< CONFIG_PROVISION_DEMO_FLOATRANGE=172.24.4.0/24
---
> CONFIG_PROVISION_DEMO_FLOATRANGE=172.16.184.0/24
1226c1226
< CONFIG_PROVISION_TEMPEST_FLOATRANGE=172.24.4.0/24
---
> CONFIG_PROVISION_TEMPEST_FLOATRANGE=172.16.184.0/24
1294c1294
< CONFIG_REDIS_HOST=<メンテナンス用IP>
---
> CONFIG_REDIS_HOST=172.16.183.2
```

packstackを実行

```
[centos@rdo ~]$ sudo packstack --answer-file=./packstack-answer.txt
Welcome to the Packstack setup utility

The installation log file is available at: /var/tmp/packstack/20220125-095030-h47zrb1a/openstack-setup.log

...

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

Additional information:
 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
 * File /root/keystonerc_admin has been created on OpenStack client host 172.16.183.2. To use the command line tools you need to source the file.
 * To access the OpenStack Dashboard browse to http://172.16.183.2/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
 * The installation log file is available at: /var/tmp/packstack/20220125-095030-h47zrb1a/openstack-setup.log
 * The generated manifests are available at: /var/tmp/packstack/20220125-095030-h47zrb1a/manifests
```

RDOの構築に成功！
**packstackの処理では、sshでroot@172.16.183.2に接続するため、あらかじめキーペアの設定をしておく必要がある。**

## 構築後のトラブル対応

Horizonをしばらく使っていると、だんだん動きが遅くなってきて、ゲートウェイタイムアウトしてしまった。
ログを確認すると、`/var/log/mariadb/mariadb.log`で以下のエラーメッセージを見つけた。

```
2022-01-25 10:16:09 0 [ERROR] Error in accept: Too many open files
```

ググったところ、以下の記事を見つけた。
https://qiita.com/smallpalace/items/dff0eb8cb65497b02800

ファイルディスクリプタが枯渇してしまっているようである。
なので、ファイルディスクリプタの上限を大きくする。

MariaDBのファイルディスクリプタの上限を無限にする。

```
[centos@rdo ~]$ sudo vim /etc/systemd/system/mysql.service
[centos@rdo ~]$ cat /etc/systemd/system/mysql.service

...

[Service]

...

LimitNOFILE=infinity
[centos@rdo ~]$ sudo systemctl daemon-reload
[centos@rdo ~]$ sudo systemctl restart mysql
```

上記に加えて、システム全体を制御する設定？の方のファイルディスクリプタの上限も変更する必要がある。

```
[centos@rdo ~]$ sudo vim /etc/security/limits.conf
[centos@rdo ~]$ cat /etc/security/limits.conf

...

mysql soft nofile 65535
mysql hard nofile 65535

...

[centos@rdo ~]$ sudo reboot
```

参考：https://gist.github.com/fedir/a02d87a2f4ea53a961fe25256961bfdf

結果、サクサク動くようになった！