Skip to content
Keruru edited this page Feb 23, 2017 · 22 revisions

Devstackについて

DevstackはOpenStackを簡単にデプロイするためのツールです。
Bashで書かれており、対応OSはUbuntu、Fedora、RHELなどがあります。

なぜDevstackか?

以前はOpenStackをデプロイするならDevstackを使うのがデファクトでしたが、現在は様々なデプロイツールをOpenStackに対応させようとしている人たちがいるため、必ずしもDevstackを使う必要はありません。例えば、puppet、chef、ansible、jujuなどがあります。それらのツールと大きく違う点はDevstackはOpenStackの公式デプロイツールという点です。DevstackはOpenStackのCIにも使われており、すべてのパッチは一度はDevstackでデプロイされた環境で動いていることになります。そのため、開発者も自分たちの提案したコードがDevstackでデプロイされた環境で動くことを常に意識しており、stableブランチだけでなくmasterブランチのデプロイも可能です。逆にその他のデプロイツールは、stableブランチなどには対応していますが、masterでは動かないことが多いです。また、他のデプロイツールと比べてシェルスクリプトで書かれているため可読性が高いという点も利点です。

Devstackを動かす

Devstackを動かすためのマシンスペック

  • CPU: 2コア
  • メモリ: 4GB以上
  • ストレージ:15GB以上
  • ネットワーク: 2NIC以上(内部NWと外部NW用)

Devstack実行

Devstackを動かすのは非常に簡単です。
公式ページにある通り、下記のコマンドを実行すればDevstackは動きます。

git clone https://github.com/openstack-dev/devstack.git
cd devstack; ./stack.sh

停止は下記コマンド。

$ cd devstack; ./unstack.sh

Devstackを再起動させるのに rejoin-stack.sh というスクリプトを叩くのも良いですが、だいたい思い通りには動いてくれないので使うのはやめて、後で紹介する OFFLINE=True という設定で stack.sh を再実行しましょう。

Devstackを動かす上で重要になるのが、local.confというファイルです。このファイルに基本的な情報を記述してDevstackディスレクトリ直下に配置して動かす必要がありますが、デフォルトでは存在しません。Devstackを動かす前に必ずこのファイルを作って適切な設定を書いておきましょう。以前は localrc というファイルに記述していましたが、現在はlocal.confがデフォルトです。ただし、現在の実装では同じディレクトリにlocalrcが存在する場合、localrcの設定が優先されるので気をつけましょう。

local.conf

local.confに設定する基本的な項目はそれほど多くありません。すべての設定はDevstack内でデフォルト値を持っており、極端に言えば何も設定せずとも動くことは動きます。ただ、自分の環境ややりたいことに合わせて設定を書き換える際は情報が乏しいので注意が必要です。ドキュメントも以前よりは充実してきましたが、最終的にはソースを読まなければいけません。

私が普段使っている local.conf は下記です。

[[local|localrc]]
HOST_IP=127.0.0.1
DEST=/opt/stack

ADMIN_PASSWORD=password
MYSQL_PASSWORD=password
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password

disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service ceilometer
enable_service q-fwaas
enable_service q-lbaas

LOGFILE=/opt/stack/logs/stack.sh.log
LOGDAYS=1
SCREEN_LOGDIR=$DEST/logs/screen

NOVA_BRANCH=refs/tags/2014.1.b1
GLANCE_BRANCH=refs/tags/2014.1.b1
KEYSTONE_BRANCH=refs/tags/2014.1.b1
HORIZON_BRANCH=refs/tags/2014.1.b1
CINDER_BRANCH=refs/tags/2014.1.b1
NEUTRON_BRANCH=refs/tags/2014.1.b1
CEILOMETER_BRANCH=refs/tags/2014.1.b1
HEAT_BRANCH=refs/tags/2014.1.b1

local.confの基本

local.conf は <phase> という記述の後に必要な設定値を記述します。<config-file-name>が設定値を代入するコンフィグファイルの名前、<phase>が設定を記述するタイミングで下記の5パターンがあります。

  • local: stackrcが読まれる前
  • pre-install: システムパッケージがインストールされた後、OpenStackのソースレポジトリがインストールされる前
  • install: OpenStackレポジトリがインストールされた後
  • post-config: L2NWサービスの設定後、そのL2NWサービスを提供するプロセスを起動する前
  • extra: サービスが起動した後、extra.dに配置しているスクリプトが実行される前

下記のように記述します。

[[post-config|$NOVA_CONF]]
[DEFAULT]
use_syslog = True
[osapi_v3]
enabled = False

[[local|localrc]]
FIXED_RANGE=10.254.1.0/24
ADMIN_PASSWORD=speciale
LOGFILE=$DEST/logs/stack.sh.log

この記述を見て分かる通り、local.confは従来のDevstackの設定ファイルであるlocalrc(実際には.localrc.auto)を生成します。

localへの設定値

すべての設定にデフォルトで値が入りますが、環境や組みたい構成によって変更します。

HOST_IP=192.168.1.1
DEST=/opt/stack

ADMIN_PASSWORD=password
MYSQL_PASSWORD=password
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password
  • HOST_IP : Devstackを動かしているマシンのIPアドレスを指定します
  • DEST : OpenStackのソースをダウンロードする場所を指定します。デフォルト値で/opt/stackが指定されます
  • ADMIN_PASSWORD : OpenStackでは"ADMINユーザ"と"ADMINではないユーザ"の二通りに別れるのですが、DevstackがOpenStackの資源を作る際に利用するADMINユーザのパスワードを指定します
  • MYSQL_PASSWORD, RABBIT_PASSWORD : Mysql, Rabbitmqにログインするためのパスワードを指定します
  • SERVICE_PASSWORD : 各サービスはKeystoneによる認証を利用するために、サービス自体をKeystoneに登録します。その際に用いるパスワードを指定します
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service ceilometer
enable_service q-fwaas
enable_service q-lbaas
  • disable_service : 利用しないサービスを指定します。ここではNW周りはNeutronを使うのでnova-networkは使わないという指定をしています
  • enable_service : 利用するサービスを指定します。ただし、デフォルトで基本的なサービスはenableとなっています。現状でデフォルトで利用する設定になっているサービスは下記になります。
ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,n-sch,n-novnc,n-xvnc,n-cauth,c-sch,c-api,c-vol,h-eng,h-api,h-api-cfn,h-api-cw,horizon,rabbit,tempest,mysql

上記を見てわかるとおり、ENABLED_SERVICES=*というような書き方でもサービスを指定できます。

LOGFILE=/opt/stack/logs/stack.sh.log
LOGDAYS=1
SCREEN_LOGDIR=$DEST/logs/screen
LOG_COLOR=False
  • LOGFILE : Devstack実行時に吐出されるログを保存するファイルを指定します
  • LOGDAYS : ログを保存する期間を指定します。指定した期間を超えたログは削除されます
  • SCREEN_LOGDIR : 各サービスはscreen上で実行されますが、各サービスが実行中に出力した内容をログとして保存するディレクトリを指定します。これを指定しないとログを容易に見ることが難しくなりますので、必ず指定しましょう
  • LOG_COLOR : デフォルトはTrueで、ログに色をつける指定ができます
NOVA_BRANCH=refs/tags/2014.2.b3
GLANCE_BRANCH=refs/tags/2014.2.b3
KEYSTONE_BRANCH=refs/tags/2014.2.b3
HORIZON_BRANCH=refs/tags/2014.2.b3
CINDER_BRANCH=refs/tags/2014.2.b3
NEUTRON_BRANCH=refs/tags/2014.2.b3
CEILOMETER_BRANCH=refs/tags/2014.2.b3
HEAT_BRANCH=refs/tags/2014.2.b3

基本的には上記のように*_BRANCHにブランチ名を指定します。 ブランチをstable/junoにしたければ、

NOVA_BRANCH=stable/juno

タグ(下記はjuno-3)で指定したければ、

NOVA_BRANCH=refs/tags/2014.2.b3

ブランチを指定する場合は下記のようにdevstackのブランチも合わせます。

$ cd devstack
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/stable/havana
  remotes/origin/stable/icehouse
  remotes/origin/stable/juno
$ git checkout -b stable/juno origin/stable/juno
$ git branch
   master
* stable/juno

下記から紹介する設定値も必要に応じて設定しましょう。

FIXED_RANGE=10.0.0.0/24
NETWORK_GATEWAY=10.0.0.1
FLOATING_RANGE=172.24.1.0/24
PUBLIC_NETWORK_GATEWAY=172.24.1.1
  • FIXED_RANGE : VM間の内部NWアドレスを指定します
  • NETWORK_GATEWAY : VM間の内部NWのゲートウェイアドレスを指定します
  • FLOATING_RANGE : 外部接続用のNWアドレスを指定します。ここで指定したセグメントでOpenStackのリソースは外部と通信します
  • PUBLIC_NETWORK_GATEWAY : 外部接続用のゲートウェイアドレスを指定します。ホストマシンに作られる外向けのブリッジ(br-ex)に指定されるアドレスになります
RECLONE=yes
OFFLINE=True
GIT_BASE=https://git.openstack.org
  • RECLONE : デフォルトは空になっており、stack.shを実行した際に指定ディレクトリにすでにOpenStackのソースが存在すると再ダウンロードはしません。これをyesにすることで最新のソースを取得するようになります
  • OFFLINE : これはオフライン環境用の設定でデフォルトはFalseです。TrueにすることでDevstackがパッケージの更新などでネット接続をすることを防ぎます
  • GIT_BASE : OpenStackソースへのアクセスはgitプロトコルを使ったURL(git://git.openstack.org)を使いますが、プロキシ等でgitポートが抜けれないという人はGIT_BASE=https://git.openstack.orgのように指定すればhttpsでソースを取得できます
  • NOVA_REPO,NEUTRON_REPO,CINDER_REPO,etc : デフォルトではOpenStack公式のレポジトリからソースをダウンロードしますが、ここに任意のレポジトリのURLを指定すれば、そのレポジトリからソースをダウンロードしてくれます

最後にマルチノードでOpenStackを構成した際の設定が下記になります。

MULTI_HOST=True
SERVICE_HOST=${マスターノードのIP}
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
  • MULTI_HOST : マルチノード構成であることを示すフラグになります
  • SERVICE_HOST : 各サービスのホストとなるマシンのIPアドレスを指定する
  • MYSQL_HOST,RABBIT_HOST : Mysql, RabbitmqのIPアドレスを指定する

例えば、サービスノードとコンピュートノードに分けたとすると下記のような設定になります。

サービスノードの設定

[[local|localrc]]
MULTI_HOST=True
.
.
(その他必要な設定)
.
.

コンピュートノードの設定

[[local|localrc]]
SERVICE_HOST=${マスターノードのIP}
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
ENABLED_SERVICES=n-cpu,rabbit,q-agt
.
.
(その他必要な設定)
.
.

その他

screen

Devstackはデフォルトでscreenを使用し、各OpenStackプロセスごとにウィンドウを作成してプロセスを起動させます。screenを使用するかどうかは設定で変更可能です。

[[local|localrc]]
USE_SCREEN=False

openrc

Devstackディレクトリ直下に存在し、OpenStackコマンド実行に必要な環境変数を自動設定します。

  • OS_USERNAME, OS_TENANT_NAME, OS_PASSWORD, OS_NO_CACHE, OS_REGION_NAME, OS_IDENTITY_API_VERSION, OS_AUTH_URL, OS_CACERT, COMPUTE_API_VERSION, CINDER_VERSION, OS_VOLUME_API_VERSION
$ source openrc [username] [tenantname]