OpenStack Kolla について
Kolla - Dockerized OpenStack

openstack-cloud-software-vertical-web

こんにちは。クラウドイノベーションセンターでOpenStackを転がしている後藤と申します。

今回から2-3回の連載で、最近話題のDockerized OpenStack で最も有名?な「OpenStack Kolla」について共有させていただければと思います。

Kolla概要 – What’s 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)をベースにお話していきます。

 

Kollaの動作 – How it works.

Kollaが提供する機能は、Dockerイメージの作成(kolla-build)とデプロイ(kolla-ansible)に分かれます。

1. Kollaイメージのビルド

イメージをビルドするDockerfileはKollaが提供しています。
kolla-build コマンドを使って自分用のイメージを作成し、DockerHubか自前のRegistryにアップロードします。
もちろん、自分でコンテナを作成せずともDockerHubのKollaページに公開されているイメージを利用することも可能です。

kolla_build1

2. イメージの配布

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

kolla_pull1

 

3. コンテナ起動

最後に、コンテナを起動させOpenStackを展開します。
コンテナをdocker runした後、DB作成、エンドポイント設定などをkolla_toolbox経由で行い、OpenStackを展開します。
kolla_deploy1

 

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

docker_ps

 

Kollaのすごいところ

① コンポーネントのインストール、アップグレード、再インストールが楽

基本、Dockerコンテナのデプロイ+Ansibleでの設定ファイルコピーのため、インストール、アップグレードが非常に楽です。
あらかじめDockerイメージをビルドしておけば、デプロイにはほとんど時間がかからず、以前の環境に戻すのも簡単です(DB内のデータは注意)。
イメージもdockerが差分管理してくれるので、1回目以降のビルド、プルは短時間で終わるのも特徴です。

1回目のビルド(3時間)
1回目のプル(12分)
1回目のデプロイ(18分)

2回目のビルド(10分)
2回目のプル(3分)
2回目のデプロイ(6分)


またdockerならではの長所ゆえ、ホストが汚れません。
かつて従来方式でOpenStackを展開してた時は、テスト環境用途に再セットアップを頻繁に行っていました。rpmやライブラリを完璧に削除はできないので、毎回ホストプロビジョニングから行っていましたが、その手順も不要です。

 

② 本番環境==開発環境

Dockerのすばらしいところとして、同じDockerイメージを異なる環境でも使いまわせるところがあげられます。
本番環境でもラップトップの開発環境でも、同じイメージを使いまわせるため、テストがはかどります。
環境の差異は設定ファイルで吸収が可能なため、複数の環境があっても以前よりも簡単に管理ができるようになります。

 

③ 差分ファイルでのテンプレートコピーに対応

Kollaには設定ファイルの必要部分だけをマージしてOpenStack設定ファイルとして使用する機能が作られています。(Kolla’s Phylosophy参照)
Kollaが提供する”merge_configs”は、差分だけ置いておけば自動的にマージしてくれます。

 

(例)swiftを使用できるユーザロールを変更したい

  • Kolla Clientに差分ファイルを配置(/etc/kolla/config/proxy-server.conf )
  • kolla-ansibleが展開時に自動的にマージ
  • swift-proxy-serverコンテナに、マージ済み設定ファイルが配布される

図4

OpenStackの設定はかなりの量があるのですが実際にはほとんどがdefaultでよく、一部の変更で充分なことが多いです。
この方式により、より簡単にフレキシブルに設定を変更することができるようになっています。

 

 

まとめ

最近のOpenStackデストリビューションは簡単に高機能なものを展開できるようになってきています。
その中で、Dockerを使った方式は大きなアドバンテージを持っており、game changerとしての潜在力に秘めているといえるでしょう。
次回からは実際にKollaを使ってOpenStackをデプロイし、さらに詳細を見ていこうと思います。

 

リソース情報

Kolla Developer Documentation: http://docs.openstack.org/developer/kolla/
Kolla source on Github: https://github.com/openstack/kolla
Kolla’s Docker Hub: https://hub.docker.com/u/kolla/

 

Pocket

コメント

「OpenCloud」のイベント・セミナー

開催
エンタープライズ向けDevOpsセミナー