はじめに
本記事は、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]#