kolla-ansibleを使ってOpenStack環境を構築してみる all-in-one編

目次

2021/01/09 インスタンスにパスワードを設定する箇所の誤りを修正しました。

kolla-ansibleとは

公式ページ

OpenStack 環境のデプロイメントツールです。
更に、完全にカスタマイズ可能であることも大きな特徴です。
加えて、CentOS や Ubuntu などの多くの Linux ディストリビューションに対応しているのも大きな特徴と言えます。
なお、デプロイには Ansible が利用されます。

他にも devstack や microstack など数多くのデプロイメントツールが存在しますが、これらは開発環境向けで、カスタマイズが困難であったり、再起動したら壊れてしまうものなど、扱いにくいのが現状です。
また、 kolla-ansible と同様に Ansible を利用して OpenStack 環境の構築を行う openstack-ansible なども存在しますが、こちらも筆者環境での検証では再起動したら壊れてしまうものでした。

そこで、今回は kolla-ansible を利用してみることにしました。
なお、 kolla-ansible ではすべてのコンポーネントを1つのサーバ上で動作させる all-in-one 構成と、複数のサーバをクラスタリングして利用する multinode 構成を選択することができます。
今回は all-in-one 構成を構築してみます。
multinode 構成については、次回以降取り扱う予定です。

インストール準備

kolla-ansible では CentOS や Ubuntu などを利用することができますが、本記事では Ubuntu 20.04 LTS を利用しています。

事前に python3 などを用意しておく必要がありますので、必要なパッケージとともに導入します。

1
2
3
$ sudo apt update
$ sudo apt install python3-dev libffi-dev gcc libssl-dev
$ sudo apt install python3-pip

インストールされた pip3 が最新バージョンであるか確認します。

1
$ sudo pip3 install -U pip

続いて、 Ansible をインストールします。

1
$ sudo apt install ansible

kolla 及び kolla-ansible のインストールを行います。
なお、ここでは apt でインストールする方法と、 github から落としてくる方法の2つが選択できますが、2020/12/29時点では apt からインストールするとUbuntu 20.04 LTSは動作対象外との旨が表示され先に進むことができなくなりますので、ここでは github から落としてきて利用します。

1
2
3
4
$ git clone https://github.com/openstack/kolla
$ git clone https://github.com/openstack/kolla-ansible
$ sudo pip3 install ./kolla
$ sudo pip3 install ./kolla-ansible

必要なディレクトリを作成し、所有権の設定を行います。

1
2
$ sudo mkdir -p /etc/kolla
$ sudo chown $USER:$USER /etc/kolla

先程 github から落としたファイルのうち、必要なファイルを作成したディレクトリへコピーします。

1
2
$ cp -r kolla-ansible/etc/kolla/* /etc/kolla
$ cp kolla-ansible/ansible/inventory/* .

ここで、 /etc/ansible/ansible.cfg[defaults] に以下を追記して Ansible の設定を変更します。

1
2
3
host_key_checking=False
pipelining=True
forks=100

ここで、 Ansible の設定とインベントリの構成が正しいかチェックしておきます。

1
$ ansible -i all-in-one all -m ping

OpenStack の各サービスのパスワード類を生成します。

1
2
$ cd ~/kolla-ansible/tools
$ ./generate_passwords.py

/etc/kolla/globals.yml を編集して kolla の設定を行います。
設定はページKolla globals.yml を参考にしてください。
なお、cinder などの有効化設定もこちらで行います。
必要に応じて設定をしてください。

1
2
3
4
5
kolla_base_distro: "ubuntu" #ホストOSのディストリビューション
kolla_install_type: "binary" #パッケージの取得方法
kolla_internal_vip_address: "192.168.122.206" #管理IFのアドレス
network_interface: "enp1s0" #管理ネットワークのIF
neutron_external_interface: "enp6s0" #OpenStack Neutron ネットワークのIF

デプロイを行います。

1
2
3
4
$ cd ~/kolla-ansible/tools
$ ./kolla-ansible -i ../../all-in-one bootstrap-servers
$ ./kolla-ansible -i ../../all-in-one prechecks
$ ./kolla-ansible -i ../../all-in-one deploy

ここまで完了すると、 kolla_internal_vip_address で設定したIPアドレスにアクセスすると OpenStack のダッシュボードが表示されます。
しかし、外部へアクセスするためのネットワークなどが設定されていないため、それらの設定を行います。
kolla-ansible/tools/init-runonce をエディタで開き、下記を追記します。
CIDRRANGE , GATEWAY などを適時変更します。

1
2
3
4
ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}
EXT_NET_CIDR=${EXT_NET_CIDR:-'192.168.122.0/24'}
EXT_NET_RANGE=${EXT_NET_RANGE:-'start=192.168.122.15,end=192.168.122.45'}
EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'192.168.122.1'}

cloud-init を利用してインスタンスのパスワードを設定する場合は以下の変更を行います。
~/kolla-ansible/ansible/roles/nova/templates/nova.conf.j2

1
2
3
[libvirt]
inject_password = True
inject_partition = -1

この変更は、 /etc/kolla/nova-compute/nova.conf に反映されますされると記述があるのですが、こちらの環境では反映を確認できませんでした。

~/kolla-ansible/ansible/roles/horizon/templates/local_settings.j2

1
2
3
4
5
6
OPENSTACK_HYPERVISOR_FEATURES = {
'can_set_mount_point': False,
'can_set_password': True, //FalseをTrueに変更
'requires_keypair': False,
'enable_quotas': True
}

この変更は、 /etc/kolla/horizon/local_settings に反映されます。

最後に、変更した設定を OpenStack に適用します。
その前に、 python3-openstackclient をインストールしておきます。

1
$ sudo apt install python3-openstackclient

続いて、認証情報の入ったスクリプトファイルを生成します。

1
2
3
$ cd kolla-ansible/tools
$ ./kolla-ansible post-deploy
$ . /etc/kolla/admin-openrc.sh

変更した設定を適用します。

1
2
3
$ kolla-ansible/tools/init-runonce
$ cd kolla-ansible/tools
$ ./kolla-ansible -i ../../all-in-one reconfigure

以上が完了すると、変更した設定が適用され、ネットワークなどがいくつか作成されているはずです。
なお、 Horizon のパスワードは以下のようにして表示することができます。

1
$ grep keystone_admin_password /etc/kolla/passwords.yml

以上、簡単にではありますが、参考になりましたら幸いです。