目次
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 などを用意しておく必要がありますので、必要なパッケージとともに導入します。
$ sudo apt update
$ sudo apt install python3-dev libffi-dev gcc libssl-dev
$ sudo apt install python3-pip
インストールされた pip3 が最新バージョンであるか確認します。
$ sudo pip3 install -U pip
続いて、 Ansible をインストールします。
$ sudo apt install ansible
kolla 及び kolla-ansible のインストールを行います。
なお、ここでは apt でインストールする方法と、 github から落としてくる方法の2つが選択できますが、2020/12/29時点では apt からインストールするとUbuntu 20.04 LTSは動作対象外との旨が表示され先に進むことができなくなりますので、ここでは github から落としてきて利用します。
$ git clone https://github.com/openstack/kolla
$ git clone https://github.com/openstack/kolla-ansible
$ sudo pip3 install ./kolla
$ sudo pip3 install ./kolla-ansible
必要なディレクトリを作成し、所有権の設定を行います。
$ sudo mkdir -p /etc/kolla
$ sudo chown $USER:$USER /etc/kolla
先程 github から落としたファイルのうち、必要なファイルを作成したディレクトリへコピーします。
$ cp -r kolla-ansible/etc/kolla/* /etc/kolla
$ cp kolla-ansible/ansible/inventory/* .
ここで、 /etc/ansible/ansible.cfg
の [defaults]
に以下を追記して Ansible の設定を変更します。
host_key_checking=False
pipelining=True
forks=100
ここで、 Ansible の設定とインベントリの構成が正しいかチェックしておきます。
$ ansible -i all-in-one all -m ping
OpenStack の各サービスのパスワード類を生成します。
$ cd ~/kolla-ansible/tools
$ ./generate_passwords.py
/etc/kolla/globals.yml
を編集して kolla の設定を行います。
設定はページの Kolla globals.yml
を参考にしてください。
なお、cinder などの有効化設定もこちらで行います。
必要に応じて設定をしてください。
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
デプロイを行います。
$ 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
をエディタで開き、下記を追記します。CIDR
や RANGE
, GATEWAY
などを適時変更します。
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
[libvirt]
inject_password = True
inject_partition = -1
この変更は、 /etc/kolla/nova-compute/nova.conf
に反映されますされると記述があるのですが、こちらの環境では反映を確認できませんでした。
~/kolla-ansible/ansible/roles/horizon/templates/local_settings.j2
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
をインストールしておきます。
$ sudo apt install python3-openstackclient
続いて、認証情報の入ったスクリプトファイルを生成します。
$ cd kolla-ansible/tools
$ ./kolla-ansible post-deploy
$ . /etc/kolla/admin-openrc.sh
変更した設定を適用します。
$ kolla-ansible/tools/init-runonce
$ cd kolla-ansible/tools
$ ./kolla-ansible -i ../../all-in-one reconfigure
以上が完了すると、変更した設定が適用され、ネットワークなどがいくつか作成されているはずです。
なお、 Horizon のパスワードは以下のようにして表示することができます。
$ grep keystone_admin_password /etc/kolla/passwords.yml
以上、簡単にではありますが、参考になりましたら幸いです。