OpenStack Kolla(stable/train) all-in-one環境構築(Host OS: CentOS8)


# はじめに

本記事は、CentOS8の仮想マシンにOpenStack kolla(stable/train)によるall-in-one環境を構築した際の手順の記録です。手順は「[kolla-ansible Quick Start](https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html)」で紹介されている手順（バイナリパッケージをインストールする方法とソースコードを基にインストールする方法の２つ）のうちソースコードをインストールするに沿っています。pipコマンドの実行方法など、警告を回避するコマンドを使っています。また、Quick Startに記載されていても正しくないと思われる手順は変更しています。



#目標
OpenStack Kolla(stable/train) All-in-oneノードでopenstack server listコマンドを実行し、cirrosイメージのVMがACTIVEであることが確認できることまでが本手順の目標です。

# Host OS/ VMの準備
all-in-oneノードを構築するVMは、以下の環境・条件で作成しました。
NICは制御用に１つ、テナント用に１つの計2NIC作成しています。
その他、パッケージ・ソースコードを取得するためにインターネット回線が必要です。

VM環境：VirtualBox6.1 (2CPUs, 4G Mem, 32G Disk, 2NICs)
Installメディア：CentOS-8.2.2004-x86_64-minimal.iso
VM Host OS : CentOS Linux release 8.2.2004 (Core)を最小構成(Minimal)
システム管理用ユーザ：sysadm

# 手順

kolla/kolla-ansibleのインストール作業用にユーザkoladmを追加します。
※私の運用方針上で追加しているだけで、構築には必須ではないのでスキップしてください。


## 1.作業用ユーザ追加

### kolla作業用にユーザkoladmを作成

```
sudo useradd -s /bin/bash -d /opt/openstack-kolla -m koladm -U
sudo passwd koladm
```

### /etc/sudoersの編集
sudo時のコマンドパスの追加とパスワードなしでコマンドを実行するために/etc/sudoersを編集します。
この手順でインストールを実行するとkolla関連のコマンドは/usr/local/binに配置されるため、secure_pathに/usr/local/binを追加します。これを追加しないとAnsibleでsudoで/usr/local/binのコマンドを実行しようとしてもPATHがないというエラーになります。
これは、ログインシェルが/bin/shであるためbashrcに/usr/local/binを追加しても、PATHに追加されません。そのため、secure_pathにパスを追加します。
また、ユーザ名koladmに対してALL=NOPASSWD: ALLを設定し、パスワードなしでsudoによるコマンドを実行をできるようにします。

```
date_now="$(date +%Y%m%d%H%M%S)"
sudo cp -v /etc/sudoers /etc/sudoers.bak${date_now}
sudo visudo
sudo diff -up /etc/sudoers.bak${date_now} /etc/sudoers
```


```
sysadm@suse152-kolla:~> diff -up /etc/sudoers.bak20201103005947 /etc/sudoers
diff: /etc/sudoers.bak20201103005947: Permission denied
diff: /etc/sudoers: Permission denied
sysadm@suse152-kolla:~> sudo diff -up /etc/sudoers.bak20201103005947 /etc/sudoers
--- /etc/sudoers.bak20201103005947      2020-11-03 00:59:58.259309248 +0900
+++ /etc/sudoers        2020-11-03 01:01:14.090458412 +0900
@@ -36,7 +36,7 @@
 ## unexpected or harmful way (CVE-2005-2959, CVE-2005-4158, CVE-2006-0151)
 Defaults always_set_home
 ## Path that will be used for every command run from sudo
-Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin"
+Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin"
 Defaults env_reset
 ## Change env_reset to !env_reset in previous line to keep all environment variables
 ## Following list will no longer be nevessary after this change
@@ -82,6 +82,7 @@ root ALL=(ALL) ALL

 ## Same thing without a password
 # %wheel ALL=(ALL) NOPASSWD: ALL
+koladm ALL=NOPASSWD: ALL

 ## Read drop-in files from /etc/sudoers.d
 ## (the '#' here does not indicate a comment)
sysadm@suse152-kolla:~>
```


## 2. パッケージ更新

```
sudo dnf update -y
```

## 3. パッケージのインストール
```
sudo dnf install -y vim bind-utils
sudo dnf install -y git
sudo dnf install -y python3-devel libffi-devel gcc openssl-devel python3-libselinux
```

```
sudo dnf install -y python3-pip
sudo python3 -m pip install --upgrade pip
```

## 4. Ansibleのインストール

```
sudo python3 -m pip install 'ansible<2.10'
```

## 5. kollaレポジトリをcloneする（ブランチstable/trainを指定）
コミットログを減らすためにブランチ指定していますが、指定なしでcloneしてブランチを切り替えてもOK

```
su - koladm
mkdir -p /opt/openstack-kolla/src
cd /opt/openstack-kolla/src
git clone https://github.com/openstack/kolla -b stable/train
cd kolla
git branch
```

クローン後に、ブランチがstable/trainになっていることを確認します。

```
[koladm@centos8-kolla ~]$ cd kolla
[koladm@centos8-kolla kolla]$ git branch
* stable/train
[koladm@centos8-kolla kolla]$ 
```

## 7. kolla-ansibleレポジトリをcloneする（ブランチstable/trainを指定）

```
cd /opt/openstack-kolla/src
git clone https://github.com/openstack/kolla-ansible -b stable/train
cd kolla-ansible/
git branch
```

クローン後に、ブランチがstable/trainになっていることを確認します。

```
~]$ cd kolla-ansible/
kolla-ansible]$ git branch
* stable/train
kolla-ansible]$
```

## 8. kolla/kolla-ansibleのインストール

```
cd /opt/openstack-kolla/src
sudo python3 -m pip install wheel
sudo python3 -m pip install ./kolla
sudo python3 -m pip install ./kolla-ansible
```

```
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
```

```
cp -rv /usr/local/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp -v /usr/local/share/kolla-ansible/ansible/inventory/* /opt/openstack-kolla/
```

```
sudo mkdir -p /etc/ansible
sudo vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100

cd /opt/openstack-kolla
ansible -i ./all-in-one all -m ping
```

## password.ymlの生成

```
cp -v /etc/kolla/passwords.yml /etc/kolla/passwords.yml.old
kolla-genpwd
```

```
cp -v /etc/kolla/passwords.yml /etc/kolla/passwords.yml.bak$(date +%Y%m%d%H%M%S)
vim /etc/kolla/passwords.yml
```

```
[koladm@centos8-kolla ~]$ diff -up /etc/kolla/passwords.yml.bak20201101205904 /etc/kolla/passwords.yml
--- /etc/kolla/passwords.yml.bak20201101205904  2020-11-01 20:59:04.638174318 +0900
+++ /etc/kolla/passwords.yml    2020-11-01 20:59:58.799179327 +0900
@@ -160,7 +160,7 @@ karbor_database_password: Ypl5JUGRFLVmUY
 karbor_keystone_password: YvBbnN5SlMqEQKdsQXiFoQAEF3jmpJx9xvmNVDYV
 karbor_openstack_infra_id: 73be339b-662c-4b26-bbfc-9d8271ee65a6
 keepalived_password: OureNAvouiJ1UIOirE7Vs6fTREnjnA1LEqQ73Jvm
-keystone_admin_password: 4MPMuss9hMbfdO7T9bZtLZfJI49o0d8nWLh1OujL
+keystone_admin_password: Admin1234
 keystone_database_password: Z1K3323VYAC04P5p293wKu61V0nm4m8WyX00TqQm
 keystone_ssh_key:
   private_key: '-----BEGIN PRIVATE KEY-----
[koladm@centos8-kolla ~]$
```

## edit globals.yml

```
cp -v /etc/kolla/globals.yml /etc/kolla/globals.yml.bak$(date +%Y%m%d%H%M%S)
```

```
vim /etc/kolla/globals.yml
```


```
[root@centos8-kolla ~]# diff -up /etc/kolla/globals.yml.bak20201101210032  /etc/kolla/globals.yml
--- /etc/kolla/globals.yml.bak20201101210032    2020-11-01 21:00:32.423182436 +0900
+++ /etc/kolla/globals.yml      2020-11-01 22:49:23.424222245 +0900
@@ -12,10 +12,10 @@
 #config_strategy: "COPY_ALWAYS"

 # Valid options are ['centos', 'debian', 'rhel', 'ubuntu']
-#kolla_base_distro: "centos"
+kolla_base_distro: "centos"

 # Valid options are [ binary, source ]
-#kolla_install_type: "binary"
+kolla_install_type: "source"

 # Do not override this unless you know what you are doing.
 #openstack_release: "train"
@@ -34,7 +34,7 @@
 # All-In-One without haproxy and keepalived, you can set enable_haproxy to no
 # in "OpenStack options" section, and set this value to the IP of your
 # 'network_interface' as set in the Networking section below.
-#kolla_internal_vip_address: "10.10.10.254"
+kolla_internal_vip_address: "192.168.10.130"

 # This is the DNS name that maps to the kolla_internal_vip_address VIP. By
 # default it is the same as kolla_internal_vip_address.
@@ -95,7 +95,7 @@
 # Yet another way to workaround the naming problem is to create a bond for the
 # interface on all hosts and give the bond name here. Similar strategy can be
 # followed for other types of interfaces.
-#network_interface: "eth0"
+network_interface: "enp0s3"

 # These can be adjusted for even more customization. The default is the same as
 # the 'network_interface'. These interfaces must contain an IP address.
@@ -127,7 +127,7 @@
 # though an IP address can exist on this interface, it will be unusable in most
 # configurations. It is recommended this interface not be configured with any IP
 # addresses for that reason.
-#neutron_external_interface: "eth1"
+neutron_external_interface: "enp0s8"

 # Valid options are [ openvswitch, linuxbridge, vmware_nsxv, vmware_nsxv3, vmware_dvs, opendaylight ]
 # if vmware_nsxv3 is selected, enable_openvswitch MUST be set to "no" (default is yes)
@@ -246,7 +246,7 @@
 #enable_ceph_dashboard: "{{ enable_ceph | bool }}"
 #enable_chrony: "yes"
 #enable_cinder: "no"
-#enable_cinder_backup: "yes"
+enable_cinder_backup: "no"
 #enable_cinder_backend_hnas_nfs: "no"
 #enable_cinder_backend_iscsi: "{{ enable_cinder_backend_lvm | bool or enable_cinder_backend_zfssa_iscsi | bool }}"
 #enable_cinder_backend_lvm: "no"
@@ -510,7 +510,7 @@
 #nova_backend_ceph: "{{ enable_ceph }}"

 # Valid options are [ qemu, kvm, vmware, xenapi ]
-#nova_compute_virt_type: "kvm"
+nova_compute_virt_type: "qemu"

 # The number of fake driver per compute node
 #num_nova_fake_per_node: 5
[root@centos8-kolla ~]#
```

```
cd /opt/openstack-kolla
kolla-ansible -i ./all-in-one bootstrap-servers
kolla-ansible -i ./all-in-one prechecks
kolla-ansible -i ./all-in-one deploy
```

```
sudo python3 -m pip install python-openstackclient
kolla-ansible post-deploy
```



## デモ用ネットワーク、イメージ、フレーバの作成
init-runonceを実行することで、デモ用ネットワーク・cirrosイメージ・フレーバが作成されます。

```
source /etc/kolla/admin-openrc.sh
/usr/local/share/kolla-ansible/init-runonce
```

## デモ用VMの起動

```
openstack server create \
    --image cirros \
    --flavor m1.tiny \
    --key-name mykey \
    --network demo-net \
    demo1
```


```
[root@centos8-kolla openstack-kolla]# openstack server list
+--------------------------------------+-------+--------+---------------------+--------+---------+
| ID                                   | Name  | Status | Networks            | Image  | Flavor  |
+--------------------------------------+-------+--------+---------------------+--------+---------+
| 97821b4e-7f4d-4f77-9df5-74d0b2eae7f3 | demo1 | ACTIVE | demo-net=10.0.0.208 | cirros | m1.tiny |
+--------------------------------------+-------+--------+---------------------+--------+---------+
[root@centos8-kolla openstack-kolla]#
```