はじめに
最近にわかに注目を集めているコンテナ版の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
これで一通り使える環境が整いました。
別の機会に、イメージビルドして構築する手順も試してみたいと思います。