Edited at

OpenStack Kolla(Ocata)環境の構築

More than 1 year has passed since last update.


はじめに

最近にわかに注目を集めているコンテナ版の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ネットワーク用

Kolla_Network4.png

ちょっとわかりにくいですが、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でログインする。

login.PNG


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

プロジェクト→コンピュート→インスタンスを選択し、「インスタンスの起動」をクリック。

以下の設定を行い、「インスタンスの起動」をクリックしてインスタンスを作成する。

 ・詳細タブのインスタンス名:Server1

 ・ソースタブのイメージ:cirrosを選択

 ・フレーバータブ:m1.tinyを選択

 ・ネットワークタブ:demo-netを選択

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

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

instance.PNG


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

これで一通り使える環境が整いました。

別の機会に、イメージビルドして構築する手順も試してみたいと思います。