Ubuntu14.04LTSへのOpenStack2014.1のインストール


Ubuntu14.04 LTSへのOpenStack2014.1のインストール記録です。基本的にはopenstack.jp解説を参考にさせて頂き、インストールしました。viで編集する箇所は手間の削減のためにsedコマンドやリダイレクトでの編集にしたので、基本的にUbuntu14.04 Serverをインストールした後にこの投稿の通りコピペしていけばOpenStack2014.1の環境が出来上がるようになっています。

※ 現状は構築記録です。このまま実行すればhorizonの管理画面を拝めるところまでは構築できます。後日クリーンインストールしたUbuntuに再度この内容で設定してみて、その時に気づいた必要な事を加筆予定です。

OpenStackインストールの為の前提条件

前もって、計画を立てる必要があります。controllerノード(ウェブ管理画面がある方)、computeノード(KVMで仮想マシンを作成する方)と言う言葉を使います。

# 項目 controller compute その他必要事項
1 OS Ubuntu14.04 LTS ssh設定済み
2 IP 固定 ホスト名、固定IP共に設定済みであること
3 CPU 仮想化サポート有
3 メモリ 2G以上
4 HDD 10G 10G(OS)+KVMのイメージ用の空きパーティション100G以上は欲しい
5 NIC 1枚以上 2枚以上 但し、タグVLANでも良い

OpenStackの管理画面

内容が長く、インストールにもかなりの時間がかかるので、先にゴールの画像を載せておきます

openstack11

OpenStackをインストールする為の前提条件の確認

sudo apt-get update
sudo apt-get upgrade

# ipv6を無効にする
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf

# IPアドレスは固定にしておくこと
sudo vi /etc/network/interfaces

/etc/network/interfacesの設定内容

auto eth0
iface eth0 inet static
address 172.20.1.240
netmask 255.255.255.0
network 172.20.1.0
broadcast 172.20.1.255
gateway 172.20.1.1
dns-nameservers 172.20.1.1

ホスト名を設定

OpenStackのインストールと設定中に、ホスト名を登録する箇所が沢山あります。一度設定してしまうと後から設定し直すのは大変(と言うかやりたくない)だと思うので、計画的にまともなホスト名を付けておいてください。host名が引けないと、連携設定が出来ない為、前もって/etc/hostsファイルに、compute、controllerの両方の管理用ネットワークのIP、ホスト名の組を追記しておきます。openstackを構成する全サーバに展開しておいてください。

sudo vi /etc/hosts

/etc/hosts

---------------------------------
127.0.0.1       localhost
172.20.1.240    horizon ★contorollerホスト名を入れる(例:ubuntu)
172.20.1.241    microserver ★KVMサーバ。余っていたmicroserverを転用しました。
# ★IPv6の箇所は消しておく。
---------------------------------

ホスト名の確認と再設定。

sudo vi /etc/hostname
# 一行でホスト名が書かれているはずなので、必要に応じて修正してください。
# 一度再起動します。
sudo reboot

再起動後にntpの設定

sudo apt-get -y install ntp
sudo vi /etc/ntp.conf

# 必要に応じてntp.confを修正。

環境変数に必要なパスワードを全登録する

セキュリティ上は好ましくないと思われますが、セットアップを楽にするために。openssl rand -hex 10でランダムなパスワードを生成して、~/.bash_profileに設定しています。再起動などをして再ログインした時に楽です。設定が全部済んだ後はパスワードは安全な場所に隔離してください。

# ★MY_NETWORKに、利用する管理ネットワーク用のアドレスを入れて下さい。192.168.11.0等が一般的ですかね。
echo "export TRUST_NETWORK=172.20.1.0" >> ~/.bash_profile
echo "export DMZ_NETWORK=172.20.2.0" >> ~/.bash_profile
echo "export KVM_NETWORK=172.20.10.0" >> ~/.bash_profile

# 管理サーバ
echo "export HORIZON_TRUST_IP=172.20.1.240" >> ~/.bash_profile
echo "export HORIZON_UNTRUST_IP=172.20.2.240" >> ~/.bash_profile
echo "export HORIZON_HOST_NAME=horizon" >> ~/.bash_profile

# compute(KVMサーバ)
echo "export COMPUTE1_TRUST_IP=172.20.1.241" >> ~/.bash_profile
echo "export COMPUTE1_UNTRUST_IP=172.20.2.241" >> ~/.bash_profile
echo "export COMPUTE1_HOST_NAME=kvm1" >> ~/.bash_profile

# ★MYSQL_ROOT_PASSはMySQLのインストール時に指定するパスワードです。普段MySQLに設定するパスワードを入れてください。
echo "export MYSQL_ROOT_PASS=mysql_root_password   # MySQLのrootパスワード" >> ~/.bash_profile
echo "export KEYSTONE_DBPASS=`openssl rand -hex 10`   # Identity Service のデータベースのパスワード " >> ~/.bash_profile
echo "export ADMIN_PASS=`openssl rand -hex 10`        # admin ユーザーのパスワード" >> ~/.bash_profile
echo "export GLANCE_DBPASS=`openssl rand -hex 10`     # Image Service のデータベースのパスワード" >> ~/.bash_profile
echo "export GLANCE_PASS=`openssl rand -hex 10`       # Image Service の glance ユーザーのパスワード" >> ~/.bash_profile
echo "export NOVA_DBPASS=`openssl rand -hex 10`       # Compute Service のデータベースのパスワード" >> ~/.bash_profile
echo "export NOVA_PASS=`openssl rand -hex 10`         # Compute Service の nova ユーザーのパスワード" >> ~/.bash_profile
echo "export DASH_DBPASS=`openssl rand -hex 10`       # Dashboard のデータベースのパスワード" >> ~/.bash_profile
echo "export CINDER_DBPASS=`openssl rand -hex 10`     # Block Storage Service のデータベースのパスワード" >> ~/.bash_profile
echo "export CINDER_PASS=`openssl rand -hex 10`       # Block Storage Service の cinder ユーザーのパスワード" >> ~/.bash_profile
echo "export NEUTRON_DBPASS=`openssl rand -hex 10`    # Networking Service のデータベースのパスワード" >> ~/.bash_profile
echo "export NEUTRON_PASS=`openssl rand -hex 10`      # Networking Service の neutron ユーザーのパスワード" >> ~/.bash_profile
echo "export HEAT_DBPASS=`openssl rand -hex 10`       # Orchestration Service のデータベースのパスワード" >> ~/.bash_profile
echo "export HEAT_PASS=`openssl rand -hex 10`         # Orchestration Service の heat ユーザーのパスワード" >> ~/.bash_profile
echo "export CEILOMETER_DBPASS=`openssl rand -hex 10` # Telemetry Service のデータベースのパスワード" >> ~/.bash_profile
echo "export CEILOMETER_PASS=`openssl rand -hex 10`   # Telemetry Service の ceilometer ユーザーのパスワード" >> ~/.bash_profile
echo "export RABBIT_PASS=`openssl rand -hex 10`       # RabbitMQ の ユーザーのパスワード" >> ~/.bash_profile

source ~/.bash_profile

MySQLのインストールと設定

MySQLは他の用途でも利用するので、デフォルトでUTF8にしておきます。

sudo apt-get install python-mysqldb mysql-server python-mysqldb

# これはコントローラノード以外からMYSQLにつなげる事が出来る様にやっている。
# 接続の際にhostnameで接続するようになっているので、0.0.0.0で設定しないとDB接続エラーが出る。
sudo sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/my.cnf
sudo sed -i "s/[client]/[client]ndefault-character-set=utf8/g" /etc/mysql/my.cnf
sudo sed -i "s/[mysqld]/[mysqld]ncharacter-set-server=utf8/g" /etc/mysql/my.cnf
sudo service mysql restart

# 設定の確認。0.0.0.0:3306 となっていればOK。
netstat -an | grep 3306

memcached,rabbitmqのセットアップ

sudo apt-get install ntp git memcached tgt rabbitmq-server
sudo rabbitmqctl change_password guest $RABBIT_PASS

統合認証サービス keystone のインストール

keystoneでopenstackを構成する各サービスに認証サービスを提供できるようにします。openstackを構成するサービス間で処理を行う際の統合認証サービスを提供します。

keystoneについて
名称 説明
ユーザー ユーザーとパスワードの組み合わせ
プロジェクト(テナント) グループと同じイメージを持っていれば問題ないようです。
sudo apt-get install keystone

# keystone.confのsqlconnectionの設定値がデフォルトだとsqliteなので、MySQL用にする
sudo cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
sudo cat /etc/keystone/keystone.conf | grep 'connection = '
sudo sed -i "s/connection = .*/nconnection = mysql://keystone:$KEYSTONE_DBPASS@`hostname`/keystone/g&" /etc/keystone/keystone.conf
sudo cat /etc/keystone/keystone.conf | grep 'connection = '

mysql -uroot -p$MYSQL_ROOT_PASS -e "drop database if exists keystone;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "CREATE DATABASE keystone character set utf8;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on keystone.* to 'keystone'@'%' identified by '$KEYSTONE_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on keystone.* to 'keystone'@'localhost' identified by '$KEYSTONE_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on keystone.* to 'keystone'@'`hostname`' identified by '$KEYSTONE_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "flush privileges;"

# MySQLへの接続確認
mysql -h `hostname` -ukeystone -p$KEYSTONE_DBPASS keystone
# ユーザー名/パスワードでログイン確認が出来たらquitで抜ける。

# keystone用のテーブル作成
sudo keystone-manage db_sync

# テーブルが出来た事の確認
mysql -h `hostname` -ukeystone -p$KEYSTONE_DBPASS keystone -e "show tables;"

# +------------------------+
# | Tables_in_keystone     |
# +------------------------+
# | credential             |
# | domain                 |
# | endpoint               |
# | group                  |
# | group_domain_metadata  |
# | group_project_metadata |
# | migrate_version        |
# | policy                 |
# | project                |
# | role                   |
# | service                |
# | token                  |
# | trust                  |
# | trust_role             |
# | user                   |
# | user_domain_metadata   |
# | user_group_membership  |
# | user_project_metadata  |
# +------------------------+

# /etc/keystone/keystone.confのadmin_tokenにshared secretを設定する。
export OS_SERVICE_TOKEN=`openssl rand -hex 10`

sudo cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
sudo sed -i "s/^[DEFAULT]/[DEFAULT]nadmin_token = $OS_SERVICE_TOKEN/g"
    /etc/keystone/keystone.conf
sudo diff /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak

# keystoneの再起動
sudo service keystone restart

export OS_SERVICE_ENDPOINT=http://`hostname`:35357/v2.0
# OS_SERVICE_TOKENは上で設定しているが、再ログインなどで消えてしまうため、
# コピペで操作できるようにわざと設定ファイルから読み込むようにしている。
export OS_SERVICE_TOKEN=`sudo cat /etc/keystone/keystone.conf |
    grep ^admin_token | tr -d 'n' | awk '{print $3}'`
echo $OS_SERVICE_TOKEN

Adminテナントとサービステナントを作成して、ロールを設定してプロジェクトにくくりつけます。
・・・と言われてもピンとこないと思うので、セットアップ完了後にはプロジェクト(テナント)として下記のように見えます。
openstack20

手順としては、次の通りです。

  1. テナントを作る
  2. ユーザーを作る
  3. ロールを作る
  4. ロールにユーザーとテナントをくくりつける

keystone tenant-create --name=admin --description="Admin Tenant"
# +-------------+----------------------------------+
# |   Property  |              Value               |
# +-------------+----------------------------------+
# | description |           Admin Tenant           |
# |   enabled   |               True               |
# |      id     | 0af38c7121c34ec6bc0926b7216d1bc7 |
# |     name    |              admin               |
# +-------------+----------------------------------+

keystone tenant-create --name=service --description="Service Tenant"
# +-------------+----------------------------------+
# |   Property  |              Value               |
# +-------------+----------------------------------+
# | description |          Service Tenant          |
# |   enabled   |               True               |
# |      id     | 5bb58752333c40f5a8e1135e95bc329c |
# |     name    |             service              |
# +-------------+----------------------------------+

keystone user-create --name=admin --pass=$ADMIN_PASS --email=admin@example.com
# +----------+----------------------------------+
# | Property |              Value               |
# +----------+----------------------------------+
# |  email   |        admin@example.com         |
# | enabled  |               True               |
# |    id    | 9a8ece67bc5a4cd18ab9a3e1e81d689c |
# |   name   |              admin               |
# | username |              admin               |
# +----------+----------------------------------+

keystone role-create --name=admin
# +----------+----------------------------------+
# | Property |              Value               |
# +----------+----------------------------------+
# |    id    | e6ec378936d147278cce1bdf3768b525 |
# |   name   |              admin               |
# +----------+----------------------------------+

keystone user-role-add --user=admin --tenant=admin --role=admin
# このコマンド、結果が返ってきません。下記はuser-role-listを表示させた結果で、ご参考程度です。
# +----------------------------------+----------+
# |                id                |   name   |
# +----------------------------------+----------+
# | 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
# | e6ec378936d147278cce1bdf3768b525 |  admin   |
# +----------------------------------+----------+

keystoneサービスとエンドポイントを作成する。

keystoneサービスとkeystoneサービスのエンドポイントを作成します。エンドポイントはREST APIでパラメータを渡してくるアクセス先情報です。endpoint-create実行時にはservice-idにkeystoneのサービスIDを渡して、publicurl、internalurl、adminurlを定義していますね。


keystone service-create --name=keystone --type=identity --description="Keystone Identity Service"
# +-------------+----------------------------------+
# |   Property  |              Value               |
# +-------------+----------------------------------+
# | description |    Keystone Identity Service     |
# |   enabled   |               True               |
# |      id     | 7ed5fa68a84648e9af08ea04e4ada907 |
# |     name    |             keystone             |
# |     type    |             identity             |
# +-------------+----------------------------------+

keystone endpoint-create
--service-id=`keystone service-list | grep keystone | awk '{print $2}'`
--publicurl=http://`hostname`:5000/v2.0
--internalurl=http://`hostname`:5000/v2.0
--adminurl=http://`hostname`:35357/v2.0
# +-------------+----------------------------------+
# |   Property  |              Value               |
# +-------------+----------------------------------+
# |   adminurl  |    http://horizon:35357/v2.0     |
# |      id     | 14fc7f1291ca41249ff4d525a28be6e3 |
# | internalurl |     http://horizon:5000/v2.0     |
# |  publicurl  |     http://horizon:5000/v2.0     |
# |    region   |            regionOne             |
# |  service_id | 7ed5fa68a84648e9af08ea04e4ada907 |
# +-------------+----------------------------------+

Identity Service(keystone)のインストール後動作確認

動作確認でエラー等が出たりした場合、無視して進んではいけません。必ず修正して、問題ない状態にしてから次に進んでください。エラーを無視するとはまります(はまりました)。


# OS_SERVICE_TOKENとOS_SERVICE_ENDPOINT環境変数を削除してから
# Identity Serviceが正常にインストールされたかを確認する。
# unsetし忘れると、『WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).』が出ます。
unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
keystone --os-username=admin --os-password=$ADMIN_PASS
--os-auth-url=http://`hostname`:35357/v2.0 token-get

# keystoneコマンド実行時に一々--os-*を入力したくない場合には、
# 下記を設定しておくことで入力を省略できる
export OS_USERNAME=admin
export OS_PASSWORD=$ADMIN_PASS
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://`hostname`:35357/v2.0

# 面倒だったら.bash_profileに登録しておく(セキュリティ上は好ましくないので注意)
echo $ADMIN_PASS
echo "export OS_USERNAME=admin" >> ~/.bash_profile
echo "export OS_PASSWORD=$ADMIN_PASS" >> ~/.bash_profile
echo "export OS_TENANT_NAME=admin" >> ~/.bash_profile
echo "export OS_AUTH_URL=http://`hostname`:35357/v2.0" >> ~/.bash_profile
source ~/.bash_profile

# 環境変数設定後、さきほど実行したtoken-getがオプションなしで実行できることを確認しておく
keystone token-get
keystone user-list

# 先ほど作成したadminアカウントを表示しててkeystoneの動作確認をしています。
# +----------------------------------+-------+---------+-------------------+
# |                id                |  name | enabled |      email        |
# +----------------------------------+-------+---------+-------------------+
# | bf252206c9eb459c96166839cb113cf1 | admin |   True  | admin@example.com |
# +----------------------------------+-------+---------+-------------------+

keystone -h
で、他にも実行可能なコマンドが確認できます。*-listと言うコマンドは情報のリスト表示を行うコマンドなので、上記までで設定した情報を再確認したい場合には、それらの情報を見ておくといいと思います。*-listを確認するコマンドは下記のとおりです。

# エンドポイント一覧の表示
keystone endpoint-list

# ロール一覧の表示
keystone role-list

# サービス一覧の表示
keystone service-list

# テナント一覧の表示
keystone tenant-list

# ユーザー一覧の表示
keystone user-list

# ユーザーロール一覧の表示
keystone user-role-list

OpenStack Image Serviceの設定

ユーザーが仮想マシンイメージを検索、登録、取得できるようにする。


sudo apt-get install glance python-glanceclient

sudo cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
sudo cp /etc/glance/glance-registry.conf /etc/glance/glance-registry.conf.bak
sudo cat /etc/glance/glance-api.conf | grep sql_connection
sudo cat /etc/glance/glance-registry.conf | grep sql_connection

# 上記でsql_connectionが設定されていた場合にはコメントアウトする。(無ければ別にいい)
sudo sed -i "s/^sql_connection = /#sql_connection = /g" /etc/glance/glance-api.conf
sudo sed -i "s/^sql_connection = /#sql_connection = /g" /etc/glance/glance-registry.conf

sudo sed -i "s/^[DEFAULT]/[DEFAULT]nsql_connection = mysql://glance:$GLANCE_DBPASS@`hostname`/glance/g" /etc/glance/glance-api.conf
sudo sed -i "s/^[DEFAULT]/[DEFAULT]nsql_connection = mysql://glance:$GLANCE_DBPASS@`hostname`/glance/g" /etc/glance/glance-registry.conf

mysql -uroot -p$MYSQL_ROOT_PASS -e "drop database if exists glance;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "CREATE DATABASE glance character set utf8;"
mysql -uroot -p$MYSQL_ROOT_PASS -e
    "grant all privileges on glance.* to 'glance'@'%' identified by '$GLANCE_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e
    "grant all privileges on glance.* to 'glance'@'localhost' identified by '$GLANCE_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e
    "grant all privileges on glance.* to 'glance'@'`hostname`' identified by '$GLANCE_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "flush privileges;"

# MySQLへの接続確認
mysql -h `hostname` -uglance -p$GLANCE_DBPASS glance

# keystone用のテーブル作成
sudo glance-manage db_sync

# テーブルが出来た事の確認
mysql -h `hostname` -uglance -p$GLANCE_DBPASS glance -e "show tables;"

# +------------------+
# | Tables_in_glance |
# +------------------+
# | image_locations  |
# | image_members    |
# | image_properties |
# | image_tags       |
# | images           |
# | migrate_version  |
# +------------------+

# 先に状態を確認する
keystone user-list
keystone user-role-list

# Image Service が Identity Service(keystone)で
# 認証するために使用するglance ユーザーを作成します。
keystone user-create --name=glance --pass=$GLANCE_PASS
    --email=glance@example.com

# glanceユーザーに serviceテナントのadmin ロールを与えます。
keystone user-role-add --user=glance
    --tenant=service --role=admin

keystone user-list

glance-api.conf、glance-registry.confの設定内容

先にviでの編集例を書いています。下にsedの置換方法を書いているのでこちらはご参考程度です。

# 下記の2ファイルの[keystone_authtoken]を下記のように修正する。
# 編集結果の下にsedコマンドでの置換コマンドを載せておきました。
# 置換が上手くいかない場合にはviで編集してください。
sudo vi /etc/glance/glance-api.conf
sudo vi /etc/glance/glance-registry.conf

# controllerとなっている個所はhostnameコマンドの実行結果を記載。
auth_uri = http://`hostname`:5000
auth_host = ★hostnameで置換
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = GLANCE_PASS ★ echo $GLANCE_PASSの内容で置換

glance-api.conf、glance-registry.confをsedで置き換える(上記のコマンドライン版)


sudo sed -i "s/%SERVICE_PASSWORD%/$GLANCE_PASS/g" /etc/glance/glance-api.conf
sudo sed -i "s/127.0.0.1/`hostname`/g" /etc/glance/glance-api.conf
sudo sed -i "s/%SERVICE_TENANT_NAME%/service/g" /etc/glance/glance-api.conf
sudo sed -i "s/%SERVICE_USER%/glance/g" /etc/glance/glance-api.conf
sudo sed -i "s/[keystone_authtoken]/[keystone_authtoken]nauth_uri =
    http://`hostname`:5000/g" /etc/glance/glance-api.conf
sudo sed -i "s/[paste_deploy]/[paste_deploy]nflavor =
    keystone/g" /etc/glance/glance-api.conf

sudo sed -i "s/%SERVICE_PASSWORD%/$GLANCE_PASS/g" /etc/glance/glance-registry.conf
sudo sed -i "s/127.0.0.1/`hostname`/g" /etc/glance/glance-registry.conf
sudo sed -i "s/%SERVICE_TENANT_NAME%/service/g" /etc/glance/glance-registry.conf
sudo sed -i "s/%SERVICE_USER%/glance/g" /etc/glance/glance-registry.conf
sudo sed -i "s/[keystone_authtoken]/[keystone_authtoken]nauth_uri =
    http://`hostname`:5000/g" /etc/glance/glance-registry.conf
sudo sed -i "s/[paste_deploy]/[paste_deploy]nflavor =
    keystone/g" /etc/glance/glance-registry.conf

[filter:authtoken]セクションを修正する。

もともとあった[filter:authtoken]セクションを下記のように修正します。
echoでhostnameやパスを出しているのは、単純に.bash_profileに設定している値を表示させているだけです。編集時にコピペしてください。

sudo vi /etc/glance/glance-api-paste.ini
sudo vi /etc/glance/glance-registry-paste.ini

glance-api-paste.ini、glance-registry-paste.iniの[filter:authtoken]セクションを下記のように編集する。

[filter:authtoken]
paste.filter_factory=keystoneclient.middleware.auth_token:filter_factory
auth_host=CONTROLLER
admin_user=glance
admin_tenant_name=service
admin_password=GLANCE_PASS

OpenStack サービスから使用できるように、Image Service を Identity Service に登録して、endpointを作成する。

keystone service-create --name=glance --type=image
    --description="Glance Image Service"
keystone endpoint-create
    --service-id=`keystone service-list | grep glance | awk '{print $2}'`
    --publicurl=http://`hostname`:9292
    --internalurl=http://`hostname`:9292
    --adminurl=http://`hostname`:9292

# glance-registryとglance-apiサービスの再起動
sudo service glance-registry restart
sudo service glance-api restart

Image Serviceの動作確認

CirrOSと言う仮想マシンイメージをダウンロードして動作確認を行います。CirrOSはOpenStackでのテストに良くつかわれる小容量のイメージとの事です。OpenStackのインストールが終わったらウェブ画面で、このイメージが登録されているのが確認できるはず。インストール完了後には、登録したイメージを下記のようにウェブ画面で確認できます。

openstack21

mkdir ~/images
cd ~/images
wget http://cdn.download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img

# 一度ログアウトして再ログインしてから操作を実施する。
# ※ 一度ログアウトする事は必須です。しない場合、環境変数が残っていて、はまり所に・・・
logout

再度ログインしてから操作する

cd ~/images
keystone --os-username=admin --os-password=$ADMIN_PASS
  --os-auth-url=http://`hostname`:35357/v2.0 token-get

glance image-create --name="CirrOS 0.3.1" --disk-format=qcow2
  --container-format=bare --is-public=true  < cirros-0.3.1-x86_64-disk.img

glance image-list
# +--------------------------------------+--------------+-------------+------------------+----------+--------+
# | ID                                   | Name         | Disk Format | Container Format | Size     | Status |
# +--------------------------------------+--------------+-------------+------------------+----------+--------+
# | ee4f8f11-c438-4aad-b3a2-0d2a27780dc7 | CirrOS 0.3.1 | qcow2       | bare             | 13147648 | active |
# +--------------------------------------+--------------+-------------+------------------+----------+--------+

novaのインストールと設定


sudo apt-get install nova-api nova-cert nova-conductor nova-consoleauth
  nova-novncproxy nova-scheduler python-novaclient

sudo cp /etc/nova/nova.conf /etc/nova/nova.conf.bak

# [DEFAULT]の下に書き込む
echo "rpc_backend = rabbit" | sudo tee -a /etc/nova/nova.conf
echo "rabbit_host = `hostname`" | sudo tee -a /etc/nova/nova.conf
echo "rabbit_password = $RABBIT_PASS" | sudo tee -a /etc/nova/nova.conf
echo "my_ip = `hostname -i`" | sudo tee -a /etc/nova/nova.conf
echo "vncserver_listen = `hostname -i`" | sudo tee -a /etc/nova/nova.conf
echo "vncserver_proxyclient_address = `hostname -i`" | sudo tee -a /etc/nova/nova.conf

# [database]セクションを作って書き込む
echo '[database]' | sudo tee -a /etc/nova/nova.conf
echo "connection = mysql://nova:$NOVA_DBPASS@`hostname`/nova" |
    sudo tee -a /etc/nova/nova.conf

# SqliteのDBは使わないので削除する
sudo rm /var/lib/nova/nova.sqlite

mysql -uroot -p$MYSQL_ROOT_PASS -e "drop database if exists nova;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "CREATE DATABASE nova character set utf8;"
mysql -uroot -p$MYSQL_ROOT_PASS -e
    "grant all privileges on nova.* to 'nova'@'%' identified by '$NOVA_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e
    "grant all privileges on nova.* to 'nova'@'localhost' identified by '$NOVA_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e
    "grant all privileges on nova.* to 'nova'@'`hostname`' identified by '$NOVA_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "flush privileges;"

# MySQLへの接続確認
mysql -h `hostname` -unova -p$NOVA_DBPASS nova

# keystone用のテーブル作成
sudo su -s /bin/sh -c "nova-manage db sync" nova

keystone user-role-list

keystone user-create --name=nova --pass=$NOVA_PASS --email=nova@example.com
keystone user-role-add --user=nova --tenant=service --role=admin

# /etc/nova/nova.confの[keystone_authtoken]に認証設定を追記
sudo sed -i "s/[database]/auth_strategy = keystonen[database]/g"
    /etc/nova/nova.conf

echo "[keystone_authtoken]" | sudo tee -a /etc/nova/nova.conf
echo "auth_uri = http://`hostname`:5000" | sudo tee -a /etc/nova/nova.conf
echo "auth_host = `hostname`" | sudo tee -a /etc/nova/nova.conf
echo "auth_port = 35357" | sudo tee -a /etc/nova/nova.conf
echo "auth_protocol = http" | sudo tee -a /etc/nova/nova.conf
echo "admin_tenant_name = service" | sudo tee -a /etc/nova/nova.conf
echo "admin_user = nova" | sudo tee -a /etc/nova/nova.conf
echo "admin_password = $NOVA_PASS" | sudo tee -a /etc/nova/nova.conf

keystone service-create --name=nova --type=compute
    --description="OpenStack Compute"
keystone endpoint-create
    --service-id=$(keystone service-list | awk '/ compute / {print $2}')
    --publicurl=http://`hostname`:8774/v2/%(tenant_id)s
    --internalurl=http://`hostname`:8774/v2/%(tenant_id)s
    --adminurl=http://`hostname`:8774/v2/%(tenant_id)s

# novaサービスの再起動
sudo service nova-api restart
sudo service nova-cert restart
sudo service nova-consoleauth restart
sudo service nova-scheduler restart
sudo service nova-conductor restart
sudo service nova-novncproxy restart

# 動作確認しておく
nova image-list
# +--------------------------------------+--------------+--------+--------+
# | ID                                   | Name         | Status | Server |
# +--------------------------------------+--------------+--------+--------+
# | 779aa6c3-a96d-45f1-baf4-0a2ce829b274 | CirrOS 0.3.1 | ACTIVE |        |
# +--------------------------------------+--------------+--------+--------+

cinder用のDBを事前にセットアップしておく

cinderはローカルのLVMで切り出したパーティションを利用し、computeノードで動かす事にします。DBのセットアップを事前に済ませておいた方が効率が良い為、cinderのセットアップに先だってDBだけ作っておきます。


mysql -uroot -p$MYSQL_ROOT_PASS -e "drop database if exists cinder;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "CREATE DATABASE cinder character set utf8;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on cinder.* to 'cinder'@'%' identified by '$CINDER_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on cinder.* to 'cinder'@'localhost' identified by '$CINDER_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on cinder.* to 'cinder'@'`hostname`' identified by '$CINDER_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on cinder.* to 'cinder'@'$COMPUTE1_HOST_NAME' identified by '$CINDER_DBPASS';"

mysql -uroot -p$MYSQL_ROOT_PASS -e "drop database if exists neutron;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "CREATE DATABASE neutron character set utf8;"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on neutron.* to 'neutron'@'%' identified by '$NEUTRON_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on neutron.* to 'neutron'@'localhost' identified by '$NEUTRON_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on neutron.* to 'neutron'@'`hostname`' identified by '$NEUTRON_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on neutron.* to 'neutron'@'$COMPUTE1_HOST_NAME' identified by '$NEUTRON_DBPASS';"
mysql -uroot -p$MYSQL_ROOT_PASS -e "flush privileges;"

nova-compute(KVMでゲストマシンを作成するサーバ)の設定

KVMノードには(余っていた)MicroServerを利用します。

下記はnovaノードで行う

再確認です。hostsファイルには、controllerと、computeの両方のホスト名が記載済みである事を確認してください。念の為にテストしておきましょう。

※この投稿の手順通りだと、前提条件に『computeノードは固定IPであること』と書いているだけなので、まだ固定IPにしていないようでしたら、固定IPにしておいてください。


ping $HORIZON_HOST_NAME

ping $COMPUTE1_HOST_NAME

管理ノードで.bash_profileにパスワードを書き込んでいるので、それをKVMノード側のセットアップ時に利用できるようにscpしておく。userの所はログインに利用しているユーザー名に書き換えてください。

scp ~/.bash_profile user@$COMPUTE1_HOST_NAME:

# sshする。ここから下はlogoutするまで、KVMサーバでの作業。
ssh user@$COMPUTE1_HOST_NAME

下記はKVMをインストールするcomputeノードで行う

ここからは、実際にゲストOSを作成するKVMサーバでの作業です。今回は、microserverを利用するので、オンボードNICが一枚しかなく、しかもNICの認識がeth0ではなくem1となっていますが、biosdevnameが有効の場合には、内臓NICはem、カードとして追加したNICはp1p1等となります。特にeth0としたいわけではないので、そのまま進めます。気になる場合にはこちらを参照して下さい。

hostsファイルは、controllerと同様にしてください。

---------------------------------
127.0.0.1       localhost
172.20.1.240    horizon ★contorollerホスト名を入れる(例:ubuntu)
172.20.1.241    microserver ★KVMサーバ。余っていたmicroserverを転用しました。
# ★IPv6の箇所は消しておく。
---------------------------------

タグVLANの設定

先に書いたようにmicroserverを利用するので、オンボードNICが一枚しかないので、タグVLANを利用してNICが複数枚ある環境のように見せかけます。NICを2枚用意している方はタグVLANの設定は読み飛ばしてください。


sudo apt-get install bridge-utils qemu-kvm
virt-manager virt-viewer vlan
sudo modprobe 8021q
echo "8021q" | sudo tee -a /etc/modules

# KVMをインストールすると、自動的にvirbr0が作られますが、ブリッジを使うため不要なので削除します(必要なら残してください)。
sudo virsh net-list

sudo virsh net-destroy default
sudo virsh net-autostart default --disable
sudo virsh net-list --all
#  名前               状態     自動起動  永続
# ----------------------------------------------------------
#  default              動作中  いいえ (no) はい (yes)

sudo virsh net-destroy default
sudo virsh net-autostart default --disable
sudo virsh net-list --all

sudo vi /etc/network/interfaces

/etc/network/interfacesの設定内容です。172.20.1と、172.20.2.を環境に合わせて適宜置換してください。


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto em1
iface em1 inet manual

auto br0
iface br0 inet static
address 172.20.1.243
netmask 255.255.255.0
network 172.20.1.0
broadcast 172.20.1.255
dns-nameservers 172.20.2.1
gateway 172.20.1.1
bridge_ports em1
bridge_stp off
bridge_fd 0
bridge_maxwait 0

auto em1.2
iface em1.2 inet manual
vlan-raw-device em1

auto br1.2
iface br1.2 inet static
address 172.20.2.243
netmask 255.255.255.0
network 172.20.2.0
broadcast 172.20.2.255
dns-nameservers 172.20.2.230
bridge_ports em1.2
bridge_stp off
bridge_fd 0
bridge_maxwait 0

ここまでで一旦再起動しておきます。


sudo reboot

KVMをインストールするcomputeノードで行う共通設定

NTPとMySQLクライアント用ライブラリのインストール

sudo apt-get install ntp
sudo apt-get install python-mysqldb

Compute serviceのインストール

sudo apt-get install nova-compute-kvm python-guestfs

バグ対策を行う

sudo dpkg-statoverride  --update --add root root 0644 /boot/vmlinuz-$(uname -r)
sudo vi /etc/kernel/postinst.d/statoverride

statoverrideに記載する内容

#!/bin/sh
version="$1"
# passing the kernel version is required
[ -z "${version}" ] && exit 0
dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}
sudo chmod +x /etc/kernel/postinst.d/statoverride

/etc/nova/nova.confに設定を追記

sudo cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
sudo sed -i "s/[DEFAULT]/[DEFAULT]nauth_strategy = keystone/g" /etc/nova/nova.conf
echo "[database]" | sudo tee -a /etc/nova/nova.conf
echo "connection = mysql://nova:$NOVA_DBPASS@$HORIZON_HOST_NAME/nova" | sudo tee -a  /etc/nova/nova.conf

sudo sed -i "s/[DEFAULT]/[DEFAULT]nrpc_backend = nova.rpc.impl_kombu/g" /etc/nova/nova.conf
sudo sed -i "s/[DEFAULT]/[DEFAULT]nrabbit_host = $HORIZON_HOST_NAME/g" /etc/nova/nova.conf
sudo sed -i "s/[DEFAULT]/[DEFAULT]nrabbit_password = $HORIZON_HOST_NAME/g" /etc/nova/nova.conf

sudo sed -i "s/[DEFAULT]/[DEFAULT]nmy_ip=$COMPUTE1_TRUST_IP/g" /etc/nova/nova.conf
sudo sed -i "s/[DEFAULT]/[DEFAULT]nvnc_enabled=True/g" /etc/nova/nova.conf
sudo sed -i "s/[DEFAULT]/[DEFAULT]nvncserver_listen=0.0.0.0/g" /etc/nova/nova.conf
sudo sed -i "s/[DEFAULT]/[DEFAULT]nvncserver_proxyclient_address=$COMPUTE1_TRUST_IP/g" /etc/nova/nova.conf
sudo sed -i "s/[DEFAULT]/[DEFAULT]nnovncproxy_base_url=http://$HORIZON_HOST_NAME:6080/vnc_auto.html/g" /etc/nova/nova.conf

# image service(glance)ホストを追記
sudo sed -i "s/[DEFAULT]/[DEFAULT]nglance_host=$HORIZON_HOST_NAME/g" /etc/nova/nova.conf

/etc/nova/api-paste.iniの編集

もともとあった[filter:authtoken]セクションをし下記のように修正します。echoでhostnameやパスを出しているのは、単純に.bash_profileに設定している値を表示させているだけ。編集時にコピペしてください。

echo "auth_host = $HORIZON_HOST_NAME"
echo "admin_password=$NOVA_PASS"

sudo vi /etc/nova/api-paste.ini

/etc/nova/api-paste.iniの[filter:authtoken]を下記のように編集します。

[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = $HORIZON_HOST_NAME
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = $NOVA_PASS

サービスを再起動して、sqliteのDBを削除する。

sudo service nova-compute restart
sudo rm /var/lib/nova/nova.sqlite

cinderのセットアップ

sudo apt-get install cinder-api cinder-scheduler mysql-client lvm2

# 存在するHDDを確認しておく。今回は、sdaが250GのHDDです。
# sda1には30G程度しか使っていないので、残り200G程度をLVM用にします。
ls -la /dev/sd*
# brw-rw---- 1 root disk 8, 0  4月 29 10:09 /dev/sda
# brw-rw---- 1 root disk 8, 1  4月 29 09:55 /dev/sda1

sudo fdisk /dev/sda
# 余っていたパーティションを全部LVM用に転用。
# 余りが無ければリサイズするか、新しいHDDを付ける。

# 一旦再起動
reboot

# 再起動してから
sudo pvcreate -M2 /dev/sda3
sudo vgcreate cinder-volumes /dev/sda3

sudo vi /etc/lvm/lvm.conf

/etc/lvm/lvm.confには下記のように設定を追記する。

# 元々あった下記のfilterをコメントアウト。
# filter = [ "a/.*/" ]

# a=accept/r=reject
# 起動時のvgscanでリストアップされるボリュームグループの一覧に、
# 意図しないボリュームが含まれないようする。
# 今回は、sda1,2は通常パーティション、sda3がcinder-volumesと言うボリュームグループなので、
# 下記のように設定。sda1,sda2は書かなくて良さそうですが、デフォルトがALL扱いだったので。
filter = [ "a/sda1/", "a/sda2/", "a/sda3/","r/.*/" ]

sudo cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak
sudo cat /etc/cinder/cinder.conf | grep connection

echo '[database]' | sudo tee -a /etc/cinder/cinder.conf
echo "connection = mysql://cinder:$CINDER_DBPASS@$HORIZON_HOST_NAME/cinder"
| sudo tee -a /etc/cinder/cinder.conf

# ログインできるか確認しておく
mysql -ucinder -p$CINDER_DBPASS -h horizon

DBは前もって作成しておいたので、データ登録を行います。

sudo su -s /bin/sh -c "cinder-manage db sync" cinder

# cinderのユーザー作成とロールの設定
keystone user-create --name=cinder --pass=$CINDER_PASS --email=cinder@example.com
keystone user-role-add --user=cinder --tenant=service --role=admin

sudo apt-get install cinder-volume

sudo vi /etc/cinder/cinder.conf

/etc/cinder/cinder.confに追記する内容

[DEFAULT]
...
rpc_backend = cinder.openstack.common.rpc.impl_kombu
rabbit_host = CONTROLLER
rabbit_port = 5672
rabbit_userid = guest
rabbit_password = RABBIT_PASS
...
glance_host = CONTROLLER
...

[keystone_authtoken]
auth_uri = http://CONTROLLER:5000
auth_host = CONTROLLER
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = cinder
admin_password = CINDER_PASS

[database]
...
connection = mysql://cinder:CINDER_DBPASS@CONTROLLER/cinder

上記で置換用に設定しておいたキーワード(CONTROLLER、CINDER_DBPASS、RABBIT_PASS)を置換します。

sudo sed -i "s/CONTROLLER/$HORIZON_HOST_NAME/g" /etc/cinder/cinder.conf
sudo sed -i "s/CINDER_PASS/$CINDER_PASS/g" /etc/cinder/cinder.conf
sudo sed -i "s/RABBIT_PASS/$RABBIT_PASS/g" /etc/cinder/cinder.conf

keystone service-create --name=cinder --type=volume --description="OpenStack Block Storage"
keystone endpoint-create
--service-id=$(keystone service-list | awk '/ volume / {print $2}')
--publicurl=http://`hostname`:8776/v1/%(tenant_id)s
--internalurl=http://`hostname`:8776/v1/%(tenant_id)s
--adminurl=http://`hostname`:8776/v1/%(tenant_id)s

keystone service-create --name=cinderv2 --type=volumev2 --description="OpenStack Block Storage v2"
keystone endpoint-create
--service-id=$(keystone service-list | awk '/ volumev2 / {print $2}')
--publicurl=http://`hostname`:8776/v2/%(tenant_id)s
--internalurl=http://`hostname`:8776/v2/%(tenant_id)s
--adminurl=http://`hostname`:8776/v2/%(tenant_id)s

sudo service cinder-scheduler restart
sudo service cinder-api restart

ボリューム作成が可能かテストしておく。


cinder list
# +----+--------+--------------+------+-------------+----------+-------------+
# | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
# +----+--------+--------------+------+-------------+----------+-------------+
# +----+--------+--------------+------+-------------+----------+-------------+

cinder create --display-name myVolume 1
# +---------------------+--------------------------------------+
# |       Property      |                Value                 |
# +---------------------+--------------------------------------+
# |     attachments     |                  []                  |
# |  availability_zone  |                 nova                 |
# |       bootable      |                false                 |
# |      created_at     |      2014-04-29T02:10:36.820765      |
# | display_description |                 None                 |
# |     display_name    |               myVolume               |
# |      encrypted      |                False                 |
# |          id         | d816fd25-a1fb-45e1-ba8d-5a80158a8bfe |
# |       metadata      |                  {}                  |
# |         size        |                  1                   |
# |     snapshot_id     |                 None                 |
# |     source_volid    |                 None                 |
# |        status       |               creating               |
# |     volume_type     |                 None                 |
# +---------------------+--------------------------------------+

cinder list
# +--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
# |                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
# +--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
# | d816fd25-a1fb-45e1-ba8d-5a80158a8bfe | available |   myVolume   |  1   |     None    |  false   |             |
# +--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

# 上記でlvが出来ているはずなので、lvdisplayで確認しておきます。
# 念の為補足しておくと、lvdisplayはlvm用のコマンドで、cinderのインストール有無に関わらず、
# 実行可能なコマンドです。

sudo lvdisplay
#  --- Logical volume ---
#  LV Path                /dev/cinder-volumes/volume-d816fd25-a1fb-45e1-ba8d-5a80158a8bfe
#  LV Name                volume-d816fd25-a1fb-45e1-ba8d-5a80158a8bfe
#  VG Name                cinder-volumes
#  LV UUID                ND8c56-Ft6e-AZsc-IJnO-zIGN-YWYu-v1RUO3
#  LV Write Access        read/write
#  LV Creation host, time microserver, 2014-04-29 11:10:37 +0900
#  LV Status              available
#  # open                 0
#  LV Size                1.00 GiB
#  Current LE             256
#  Segments               1
#  Allocation             inherit
#  Read ahead sectors     auto
#  - currently set to     256
#  Block device           252:0

# 次にneutronの設定をcontrollerノードで実行する為
# 上記cinderの設定を行っていたcomputeノードからログアウトします。
logout

neutronのセットアップ

controllerノードでのセットアップです。

# お決まりの、ユーザー作成してロールに追加して、エンドポイントを作成する作業です
keystone user-create --name neutron --pass $NEUTRON_PASS
    --email neutron@example.com
keystone user-role-add --user neutron --tenant service --role admin
keystone service-create --name neutron --type network
    --description "OpenStack Networking"
keystone endpoint-create
    --service-id $(keystone service-list | awk '/ network / {print $2}')
    --publicurl http://`hostname`:9696
    --adminurl http://`hostname`:9696
    --internalurl http://`hostname`:9696

# neutron用のソフトウェアのインストール
sudo apt-get install neutron-server neutron-plugin-ml2

sudo cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
sudo vi /etc/neutron/neutron.conf

/etc/neutron/neutron.confの中身を下記のように修正
————————————
[DEFAULT]

auth_strategy = keystone

# rabbitMQ
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = CONTROLLER
rabbit_password = RABBIT_PASS

# nova関係
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://CONTROLLER:8774/v2
nova_admin_username = nova
nova_admin_tenant_id = SERVICE_TENANT_ID
nova_admin_password = NOVA_PASS
nova_admin_auth_url = http://CONTROLLER:35357/v2.0

# Modular Layer 2 (ML2) plug-inを使うための設定
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

[database]

connection = mysql://neutron:NEUTRON_DBPASS@CONTROLLER/neutron

[keystone_authtoken]

auth_uri = http://CONTROLLER:5000
auth_host = CONTROLLER
auth_protocol = http
auth_port = 35357
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
[/text]

export TMP_TENANT_ID=`keystone tenant-get service | awk '/ id / {print $4}'`
echo $TMP_TENANT_ID

sudo sed -i "s/CONTROLLER/$HORIZON_HOST_NAME/g" /etc/neutron/neutron.conf
sudo sed -i "s/NEUTRON_PASS/$NEUTRON_PASS/g" /etc/neutron/neutron.conf
sudo sed -i "s/RABBIT_PASS/$RABBIT_PASS/g" /etc/neutron/neutron.conf
sudo sed -i "s/SERVICE_TENANT_ID/$RABBIT_PASS/g" /etc/neutron/neutron.conf
sudo sed -i "s/NOVA_PASS/$NOVA_PASS/g" /etc/neutron/neutron.conf
# Modular Layer 2 (ML2) plug-inの設定ファイルを編集する
sudo cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini.bak

sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini

/etc/neutron/plugins/ml2/ml2_conf.iniの中身に下記を追加。

[ml2]
...
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_gre]
...
tunnel_id_ranges = 1:1000

[securitygroup]
...
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True

/etc/nova/nova.confに下記を追加


[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
neutron_url = http://CONTROLLER:9696
neutron_auth_strategy = keystone
neutron_admin_tenant_name = service
neutron_admin_username = neutron
neutron_admin_password = NEUTRON_PASS
neutron_admin_auth_url = http://CONTROLLER:35357/v2.0
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
security_group_api = neutron

sudo sed -i "s/CONTROLLER/$HORIZON_HOST_NAME/g" /etc/nova/nova.conf
sudo sed -i "s/NEUTRON_PASS/$NEUTRON_PASS/g" /etc/nova/nova.conf

# nova再起動
sudo service nova-api restart
sudo service nova-scheduler restart
sudo service nova-conductor restart

# neutron再起動
sudo service neutron-server restart

computeノードでの作業に移る。


ssh user@$COMPUTE1_HOST_NAME

sudo sed -i "s/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g" /etc/sysctl.conf
sudo sed -i "s/^#net.ipv4.conf.default.rp_filter=1/net.ipv4.conf.default.rp_filter=0/g" /etc/sysctl.conf
sudo sed -i "s/^#net.ipv4.conf.all.rp_filter=1/net.ipv4.conf.all.rp_filter=0/g" /etc/sysctl.conf
sudo sysctl -p

sudo apt-get -y install neutron-plugin-ml2 neutron-plugin-openvswitch-agent openvswitch-datapath-dkms
neutron-l3-agent neutron-dhcp-agent

sudo cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
sudo vi /etc/neutron/neutron.conf

/etc/neutron/neutron.confに追記する内容

[DEFAULT]
auth_strategy = keystone

# rabbitMQ
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = CONTROLLER
rabbit_password = RABBIT_PASS

# ml2
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

[keystone_authtoken]
...
auth_uri = http://CONTROLLER:5000
auth_host = CONTROLLER
auth_protocol = http
auth_port = 35357
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS

[database]
# 既存のsqlite3のconnectionはコメントアウト
#connection = sqlite:////var/lib/neutron/neutron.sqlite
connection = mysql://neutron:NEUTRON_DBPASS@CONTROLLER/neutron

置換する

sudo sed -i "s/CONTROLLER/$HORIZON_HOST_NAME/g" /etc/neutron/neutron.conf
sudo sed -i "s/RABBIT_PASS/$RABBIT_PASS/g" /etc/neutron/neutron.conf
sudo sed -i "s/NEUTRON_PASS/$NEUTRON_PASS/g" /etc/neutron/neutron.conf
sudo cp  /etc/neutron/l3_agent.ini  /etc/neutron/l3_agent.ini.bak
sudo vi  /etc/neutron/l3_agent.ini


[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True


sudo cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.bak
sudo vi /etc/neutron/dhcp_agent.ini


[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True


sudo cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.bak
sudo vi /etc/neutron/metadata_agent.ini
export METADATA_SECRET=`openssl rand -hex 10`


[DEFAULT]
...
auth_url = http://controller:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET


sudo sed -i "s/CONTROLLER/$HORIZON_HOST_NAME/g" /etc/neutron/metadata_agent.ini
sudo sed -i "s/METADATA_SECRET/$METADATA_SECRET/g" /etc/neutron/metadata_agent.ini
sudo sed -i "s/NEUTRON_PASS/$NEUTRON_PASS/g" /etc/neutron/metadata_agent.ini

sudo vi  /etc/nova/nova.conf

[DEFAULT]
...
service_neutron_metadata_proxy = true
neutron_metadata_proxy_shared_secret = METADATA_SECRET


sudo sed -i "s/METADATA_SECRET/$METADATA_SECRET/g" /etc/nova/nova.conf
sudo service openvswitch-switch restart
sudo ovs-vsctl add-br br-int
sudo ovs-vsctl add-br br-ex
sudo ovs-vsctl add-port br-ex br1.3

sudo service neutron-plugin-openvswitch-agent restart
sudo service neutron-l3-agent restart
sudo service neutron-dhcp-agent restart
sudo service neutron-metadata-agent restart

ダッシュボードのインストール


sudo apt-get install apache2 memcached libapache2-mod-wsgi openstack-dashboard
# sudo vi /etc/openstack-dashboard/local_settings.py # 特に編集していません

sudo service apache2 restart
sudo service memcached restart

# 下記echoコマンドで出力したURLにアクセスしてログインしてください。ユーザー名、パスワードもechoコマンドで出しています。
echo "access to http://`hostname`/horizon"
echo "USER:admin PASS:$ADMIN_PASS"

horizonにログイン

長かった・・・。やっとログインできます。admin/環境変数に設定しておいた$ADMIN_PASSでログインしてください。

openstack10

メモ

追って内容を加筆・修正しますが、取りあえずはログイン画面までです。

タグ付けされた , , . ブックマークする へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。