
DevOps|知る×学ぶ
OpenStack Kolla について
こんにちは。OpenStackを転がしている後藤です。最近話題のDockerized OpenStack で最も有名な「OpenStack Kolla」について共有します。
▼ ハイライト
1. OpenStack Kollaとは
2. Kollaの動作 – How it works.
3. Kollaのすごいところ
1. OpenStack Kollaとは
OpenStack Kollaとは、OpenStackの各コンポーネントをDockerコンテナとしてイメージ化・デプロイするプロジェクトです。このプロジェクトは、下記を目的としています。
- Ansibleとタイトに連携してカスタマイズ性を確保し、
- プロダクション向けに耐えうる
- OpenStackデプロイツールを作る
まもなくリリースされるNewton対応版では、30個のOpenStackコンポーネントのほか、プロダクション環境に必要なログ収集(elasticsearch,Heka)とモニタリング(InfluxDB, Grafana)などにも対応するようになっています。
少し混乱しますが、”OpenStack Kolla”はOpenStackそのものをDockerコンテナで動かす(UnderCloud用)プロジェクトです。“OpenStack Magnum”はOpenStackの上でDockerコンテナを動かすもの(OverCloud)です。
ちなみに、Kollaではコンテナイメージのtagと対応するために独自のバージョニングを行っています。OpenStackの各バージョンに合わせて以下のようなバージョンが使われています。
- 1.0.0: stable/liberty
- 2.0.0: stable/mitaka
- 3.0.0: stable/newton(未リリース. 現在はmaster)
以下、3.0.0(newton)をベースにお話していきます。
2. Kollaの動作 – How it works.
Kollaが提供する機能は、Dockerイメージの作成(kolla-build)とデプロイ(kolla-ansible)に分かれます。
2-1. Kollaイメージのビルド
イメージをビルドするDockerfileはKollaが提供しています。
kolla-build コマンドを使って自分用のイメージを作成し、DockerHubか自前のRegistryにアップロードします。
もちろん、自分でコンテナを作成せずともDockerHubのKollaページに公開されているイメージを利用することも可能です。

図 1. Kolla イメージをビルド
2-2. イメージの配布
次に、kolla-ansible pull コマンドで展開先ホストへコンテナイメージを配布します。
実際には、各ホストへAnsibleが命令を出し、Docker pullを行わせています。
この際、Ansibleのinventory設定に応じて、各展開先ホストに応じたイメージをpullします。

図 2. イメージの配布
2-3. コンテナ起動
最後に、コンテナを起動させOpenStackを展開します。
コンテナをdocker runした後、DB作成、エンドポイント設定などをkolla_toolbox経由で行い、OpenStackを展開します。

図 3. コンテナの起動
こうして、OpenStackがDockerコンテナとして展開され、使用することができるようになりました。
OpenStackで動作するコンポーネントは細かくコンテナ化されており、Controllerマシンでは以下のように大量のDockerコンテナが動作します。

図 4. Docker の動作状況
3. Kollaのすごいところ
3-1. コンポーネントのインストール、アップグレード、再インストールが楽
基本、Dockerコンテナのデプロイ+Ansibleでの設定ファイルコピーのため、インストール、アップグレードが非常に楽です。あらかじめDockerイメージをビルドしておけば、デプロイにはほとんど時間がかからず、以前の環境に戻すのも簡単です(DB内のデータは注意)。イメージもdockerが差分管理してくれるので、1回目以降のビルド、プルは短時間で終わるのも特徴です。
1回目のビルド(3時間)
1回目のプル(12分)
1回目のデプロイ(18分)
↓
2回目のビルド(10分)
2回目のプル(3分)
2回目のデプロイ(6分)
・
・
・
またdockerならではの長所ゆえ、ホストが汚れません。
かつて従来方式でOpenStackを展開してた時は、テスト環境用途に再セットアップを頻繁に行っていました。rpmやライブラリを完璧に削除はできないので、毎回ホストプロビジョニングから行っていましたが、その手順も不要です。
3-2. 本番環境==開発環境
Dockerのすばらしいところとして、同じDockerイメージを異なる環境でも使いまわせるところがあげられます。
本番環境でもラップトップの開発環境でも、同じイメージを使いまわせるため、テストがはかどります。
環境の差異は設定ファイルで吸収が可能なため、複数の環境があっても以前よりも簡単に管理ができるようになります。
3-3. 差分ファイルでのテンプレートコピーに対応
Kollaには設定ファイルの必要部分だけをマージしてOpenStack設定ファイルとして使用する機能が作られています。(Kolla’s Phylosophy参照)
Kollaが提供する”merge_configs”は、差分だけ置いておけば自動的にマージしてくれます。
(例)swiftを使用できるユーザロールを変更したい
- Kolla Clientに差分ファイルを配置(/etc/kolla/config/proxy-server.conf )
- kolla-ansibleが展開時に自動的にマージ
- swift-proxy-serverコンテナに、マージ済み設定ファイルが配布される

図 5. swift を使用できるユーザロールを変更
OpenStackの設定はかなりの量があるのですが実際にはほとんどがdefaultでよく、一部の変更で充分なことが多いです。
この方式により、より簡単にフレキシブルに設定を変更することができるようになっています。
まとめ
最近のOpenStackデストリビューションは簡単に高機能なものを展開できるようになってきています。
その中で、Dockerを使った方式は大きなアドバンテージを持っており、game changerとしての潜在力に秘めているといえるでしょう。