OpenStack Kolla(Ocata)環境の構築


はじめに

最近にわかに注目を集めているコンテナ版のOpenStack(OpenStack Kolla)をインストールしてみました。
基本的には公式のインストール手順で行けるのですが、ハマる要素もいくつかあったのでメモとしてまとめました。

2017-11-18追記
Pike版だとデプロイ中にエラーが発生します。こちらの手順の方が成功率が高いです。

OpenStack Kollaとは

NovaやNeutronといったOpenStackの各コンポーネントをDockerコンテナの形態でデプロイするプロジェクトです。
通常のデプロイ手順だと、OpenStackのバージョンアップ等で再インストールする場合にホストのOS再インストールから必要になりますが、Dockerコンテナの形態だとホストOSの再イントールを必要とせず、コンテナのイメージを入れ替えるだけでバージョンアップができる点で便利と言えます(試したことはありませんが)。

・参考にしたURL:
  公式ドキュメント(Quick Start)
  https://docs.openstack.org/developer/kolla-ansible/quickstart.html

  OpenStack Kolla を Macbook Air にインストールしてみた
  http://qiita.com/radedance/items/ba656f69fad407097efc

環境構成

MACのVirtualBox上に作成したCentOS7.3のVMに、AllInOne構成で構築しました。
VMは以下の条件で作成しました。
 ・VM名:Kolla_Ocata
 ・CPU数:2CPU
 ・メモリ:8GB(最低条件として8GB必要)
 ・仮想ハードディスク:100GB(最低条件として40GB必要)
 ・ネットワーク:以下の2つを作成(最低条件として2つ必要)
   (1)「ブリッジアダプター」・・・ダッシュボードアクセス用
   (2)「内部ネットワーク」・・・Publicネットワーク用

ちょっとわかりにくいですが、OpenStackのダッシュボードへは自宅LANの192.168.0.159へ、OpenStack Novaが生成するインスタンスにはPublicネットワーク上のFloating IPへ接続するようにします。

構築メモ

1. VMにCentOS7.3をインストール

余計なものは入れず、最小限のインストールを行う。
インストーラ上では主に以下の設定を行った。
 ・SECURITY POLICY:Apply security policyをオフ
 ・ソフトウェアの選択は「最小限のインストール」(何もチェックを付けない)
 ・ネットワークとホスト名
   ・イーサネット(enp0s3)をオン、方式=手動、192.168.0.159を設定(ダッシュボードアクセス用)
   ・イーサネット(enp0s8)をオン、方式=手動、IPアドレス設定なし(Publicネットワーク用)
 ・ホスト名:kolla

インストール完了後、ファイアウォールの無効化と英語ロケール設定を行う。

$ sudo systemctl disable firewalld
$ sudo systemctl stop firewalld

$ sudo echo "LANG=en_US.utf-8" > /etc/environment
$ sudo echo "LC_ALL=en_US.utf-8" >> /etc/environment
$ sudo reboot

2. インストール前準備

以降はVirtualBoxのVMにSSHログインし、rootアカウントで実施する。

2.1 gitのインストール

# cd /root
# yum install -y git

2.2 EPELとPIPのインストール

# yum install -y epel-release
# yum install -y python-pip
# pip install -U pip
# yum install -y python-devel libffi-devel gcc openssl-devel

2.3 Ansibleのインストールとアップグレード

# yum install -y ansible
# pip install -U ansible

バージョンが2.0以上であることを確認する。

# ansible --version
ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

2.4 Dockerのインストール

# curl -sSL https://get.docker.io | bash
# docker --version
Docker version 17.04.0-ce, build 4845c56

2.5 Dockerをsystemdに登録

# mkdir -p /etc/systemd/system/docker.service.d
# tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF'
[Service]
MountFlags=shared
EOF

Dockerを再起動する。

# systemctl daemon-reload
# systemctl enable docker
# systemctl restart docker

2.6 Docker Pythonのインストールとアップグレード

# yum install -y python-docker-py
# pip install -U docker-py

2.7 NTPのインストール

# yum install -y ntp
# systemctl enable ntpd.service
# systemctl start ntpd.service
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*sv01.azsx.net   10.84.87.146     2 u    2   64    1    6.992   -0.183   1.114
 chobi.paina.net 131.113.192.40   2 u    1   64    1    5.951    0.167   0.791
 mmm21.wni.co.jp 172.16.20.210    3 u    2   64    1    6.948   -1.208   0.422
 x.ns.gin.ntt.ne 249.224.99.213   2 u    1   64    1   16.135    2.059   1.075

2.8 libvirtdが動いていたら止める

# systemctl stop libvirtd.service
# systemctl disable libvirtd.service

3. Kollaのインストール

ここから、Kolla関連の構築を行います。今回はイメージのビルドは行わず、公開されているイメージを利用する方法で実施します。

3.1 kolla-ansibleのインストール

2017年5月時点におけるkolla-ansibleの最新版は4.0.1だが、4.0.1に対応するkolla-toolboxが存在しないため(後述のdocker pullでエラーになる)、4.0.0を指定した。

# pip install kolla-ansible\==4.0.0
# cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/
# cp /usr/share/kolla-ansible/ansible/inventory/* .

3.2 コンフィグ編集

# vi /etc/kolla/globals.yml

・「Kolla options」のすぐ下に、HA設定を無効化する設定を追加する。
 (デフォルトではHA設定が有効になっているが、追加のIPアドレスを必要とするためHA設定を無効化する)

enable_haproxy: "no"

・「kolla_internal_vip_address」に、ダッシュボードアクセス用のIPアドレスを指定する。

kolla_internal_vip_address: "192.168.0.159"

・「network_interface」のコメントアウトを外し、ダッシュボードアクセス用のインターフェース名を指定する。

network_interface: "enp0s3"

・「neutron_external_interface」にはPublicネットワーク用のインターフェース名を指定する。

neutron_external_interface: "enp0s8"

・一緒に入れたいコンポーネントのコメントアウトを外し、yesを設定する。
 今回はMagnumとMistralを一緒に入れてみました(お好みで)。

enable_magnum: "yes"
enable_mistral: "yes"

3.3 パスワードファイル作成

# kolla-genpwd

/etc/kolla/passwords.ymlが作成される。

3.4 kolla.confの編集

# vi /etc/systemd/system/docker.service.d/kolla.conf

以下のように編集して保存する。

[Service]
MountFlags=shared
ExecStart=
ExecStart=/usr/bin/docker daemon

Dockerを再起動する。

# systemctl daemon-reload
# systemctl restart docker

3.5 DockerイメージのPull

# kolla-ansible pull

以下のコマンドで、ダウンロードしたイメージの一覧を確認できる。

# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
kolla/centos-binary-neutron-server              4.0.0               8dedaf87d819        7 weeks ago         727MB
kolla/centos-binary-nova-compute                4.0.0               35da27fc5586        7 weeks ago         1.23GB
kolla/centos-binary-neutron-openvswitch-agent   4.0.0               d276dcdfcbb6        7 weeks ago         727MB
kolla/centos-binary-neutron-metadata-agent      4.0.0               e1c0bf5f7745        7 weeks ago         703MB
kolla/centos-binary-heat-api                    4.0.0               66332a0e6ad4        7 weeks ago         644MB
kolla/centos-binary-neutron-dhcp-agent          4.0.0               445442cd0f01        7 weeks ago         703MB
kolla/centos-binary-neutron-l3-agent            4.0.0               445442cd0f01        7 weeks ago         703MB
kolla/centos-binary-heat-api-cfn                4.0.0               ce92766d3ff1        7 weeks ago         644MB
kolla/centos-binary-nova-ssh                    4.0.0               3b0f5591ecc8        7 weeks ago         723MB
kolla/centos-binary-nova-placement-api          4.0.0               8a16c227e835        7 weeks ago         755MB
kolla/centos-binary-nova-conductor              4.0.0               65a844b9889e        7 weeks ago         703MB
kolla/centos-binary-nova-api                    4.0.0               d90b06229654        7 weeks ago         755MB
kolla/centos-binary-nova-consoleauth            4.0.0               487d0b6926d3        7 weeks ago         704MB
kolla/centos-binary-nova-scheduler              4.0.0               92bdcfc854ac        7 weeks ago         703MB
kolla/centos-binary-nova-novncproxy             4.0.0               7f246ab0d8f5        7 weeks ago         704MB
kolla/centos-binary-mistral-api                 4.0.0               dea0beefd398        7 weeks ago         747MB
kolla/centos-binary-kolla-toolbox               4.0.0               d771b993a59b        7 weeks ago         730MB
kolla/centos-binary-keystone                    4.0.0               9b0c48681973        7 weeks ago         677MB
kolla/centos-binary-magnum-conductor            4.0.0               013fa86c2b71        7 weeks ago         804MB
kolla/centos-binary-glance-registry             4.0.0               68da81d330c4        7 weeks ago         757MB
kolla/centos-binary-horizon                     4.0.0               dc5a666631eb        7 weeks ago         863MB
kolla/centos-binary-cron                        4.0.0               74a89fe112f0        7 weeks ago         418MB
kolla/centos-binary-openvswitch-db-server       4.0.0               37f21379cad8        7 weeks ago         440MB
kolla/centos-binary-heat-engine                 4.0.0               ab9138c4719c        7 weeks ago         644MB
kolla/centos-binary-glance-api                  4.0.0               bc61de7fba03        7 weeks ago         816MB
kolla/centos-binary-mistral-executor            4.0.0               692e80061a81        7 weeks ago         747MB
kolla/centos-binary-mistral-engine              4.0.0               b958be6864c7        7 weeks ago         747MB
kolla/centos-binary-magnum-api                  4.0.0               3ab836582293        7 weeks ago         762MB
kolla/centos-binary-fluentd                     4.0.0               5b98e39f1285        7 weeks ago         720MB
kolla/centos-binary-nova-libvirt                4.0.0               b21c5bacfbcf        7 weeks ago         966MB
kolla/centos-binary-openvswitch-vswitchd        4.0.0               b047dd6e83cd        7 weeks ago         440MB
kolla/centos-binary-memcached                   4.0.0               927246be7bd2        7 weeks ago         418MB
kolla/centos-binary-rabbitmq                    4.0.0               c9e9af5a39b9        7 weeks ago         477MB
kolla/centos-binary-mariadb                     4.0.0               7c9305397257        7 weeks ago         808MB

3.6 Novaの設定

# egrep -c '(vmx|svm)' /proc/cpuinfo
0

上記で0が返った場合は以下を設定する(VirtualBoxのVMの場合は0が返るはず)。

# cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type = qemu
cpu_mode = none
EOF

3.7 デプロイ

# kolla-ansible prechecks -i all-in-one

プリチェックでエラーにならなければデプロイする。

# kolla-ansible deploy -i all-in-one

デプロイ完了後、以下を実行する。

# kolla-ansible post-deploy

3.8 OpenStack環境の初期設定

OpenStack Clientをインストールする。

# pip install python-openstackclient

続けて以下を実行する。
(途中で聞かれるパスフレーズは何も入力せずエンターキー押下しても問題ないです)

# . /etc/kolla/admin-openrc.sh
# cd /usr/share/kolla-ansible
# ./init-runonce

初期設定完了後、以下を実行してログインパスワードを確認する。

# env | grep OS_
OS_USER_DOMAIN_NAME=default
OS_PROJECT_NAME=admin
OS_IDENTITY_API_VERSION=3
OS_PASSWORD=djHvbaN8ns8gqFm4MUqHAc5X6vD6PEt8u8AZil6Z
OS_AUTH_URL=http://192.168.0.159:35357/v3
OS_USERNAME=admin
OS_TENANT_NAME=admin
OS_INTERFACE=internal
OS_PROJECT_DOMAIN_NAME=default

OS_PASSWORDの値が、ダッシュボードのログインパスワードとなる。

4. 動作確認

4.1 ダッシュボードにログイン

ブラウザでダッシュボード(http://192.168.0.159 )を開き、adminでログインする。

4.2 テスト用インスタンス生成

プロジェクト→コンピュート→インスタンスを選択し、「インスタンスの起動」をクリック。
以下の設定を行い、「インスタンスの起動」をクリックしてインスタンスを作成する。
 ・詳細タブのインスタンス名:Server1
 ・ソースタブのイメージ:cirrosを選択
 ・フレーバータブ:m1.tinyを選択
 ・ネットワークタブ:demo-netを選択

インスタンス作成後、Floating IPもインスタンスに設定する。

以下のようにテスト用にインスタンスを2個作成しました。

4.3 セキュリティーグループ設定

プロジェクト→ネットワーク→セキュリティーグループを選択し、defaultのセキュリティグループに以下のルールを追加。
 ・ルール:すべてのICMP、方向:送信

4.4 Publicネットワーク設定

構築直後はPublicネットワークへのアクセス用のブリッジが未設定のため、ホストOS上で以下を設定する。

# ip addr add 10.0.2.1/24 dev br-ex
# ip link set br-ex up
# ip route add 10.0.2.0/24 dev br-ex

しばらくすると、ホストOS上からインスタンスのFloating IPへのpingが通るようになる。

# ping 10.0.2.157
PING 10.0.2.157 (10.0.2.157) 56(84) bytes of data.
64 bytes from 10.0.2.157: icmp_seq=1 ttl=63 time=2.20 ms
64 bytes from 10.0.2.157: icmp_seq=2 ttl=63 time=0.540 ms
64 bytes from 10.0.2.157: icmp_seq=3 ttl=63 time=0.565 ms
64 bytes from 10.0.2.157: icmp_seq=4 ttl=63 time=0.583 ms

これで一通り使える環境が整いました。
別の機会に、イメージビルドして構築する手順も試してみたいと思います。