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


はじめに

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

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

Host OS/ VMの準備

all-in-oneノードを構築するVMは、以下の環境・条件で作成しました。
NICは制御用に1つ、テナント用に1つの計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]#