orenoblog

エンジニアになりたいExcel方眼紙erの物語

Openstack Diabloインストール

9/22にOpenstack Diabloが正式にリリースとなりましたので、試してみたいと思います。

構成はこのとおりです。

Hypervisor:KVM
NetworkManager:DHCPManager
ImageService:Glance
認証サービス:Keystone
Interface:Dashboard

0.OSインストール,初期設定

(1)Ubuntu 11.04(x86_64)を最小構成でインストール

Controller/Computeノード:server1
Computeノード:server2

(2)ネットワークインタフェースの設定

server1

$ sudo vi /etc/network/interfaces
auto eth0
iface eth0 static
address 192.168.33.3
netmask 255.255.255.0
gateway 192.168.33.1
dns-nameservers 192.168.33.1
$ sudo /etc/init.d/networking restart

server2

$ sudo vi /etc/network/interfaces
auto eth0
iface eth0 static
address 192.168.33.10
netmask 255.255.255.0
gateway 192.168.33.1
dns-nameservers 192.168.33.1
$ sudo /etc/init.d/networking restart

全ノード共通

$ sudo vi /etc/hosts
192.168.33.3 server1
192.168.33.10 server2

1.Cloud Controller/Computeノードの準備

server1(Controller/Computeノード)で実施します

(1)パッケージインストール

リポジトリの追加を行います。
パッケージはCactusと変わりません。

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:openstack-release/2011.3
$ sudo apt-get update
$ sudo apt-get install -y rabbitmq-server
$ sudo apt-get install -y python-greenlet python-mysqldb 
$ sudo apt-get install -y nova-volume nova-vncproxy nova-api nova-ajax-console-proxy
$ sudo apt-get install -y nova-network nova-compute
$ sudo apt-get install -y libvirt-bin
$ sudo apt-get install -y glance
$ sudo apt-get install -y euca2ools unzip
(2)MySQL Serverのインストールと管理データベースの作成

Openstackの設定や稼働状況を管理するデータベースにはMySQLを利用します。

$ vi ~/mysql.sh
#!/bin/bash
MYSQL_PASS=nova
NOVA_PASS=nova
cat << MYSQL_PRESEED |debconf-set-selections
mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
mysql-server-5.1 mysql-server/start_on_boot boolean true
MYSQL_PRESEED
$ bash ~/mysql.sh
$ sudo apt-get install -y mysql-server
$ sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
$ sudo service mysql restart
$ MYSQL_PASS=nova
$ sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;'
$ sudo mysql -u root -pnova -e "GRANT ALL PRIVILEGES ON *.* TO 'nova'@'%' WITH GRANT OPTION;"
$ sudo mysql -u root -p$MYSQL_PASS -e "SET PASSWORD FOR 'nova'@'%' = PASSWORD('$NOVA_PASS');"

2.Openstackセットアップ

server1にて実施します。

(1)nova.confのパーミッション変更

nova.confはnovaユーザが参照できるようにパーミッションを設定しておかないと、nova-apiが起動しません。

$ sudo addgroup nova
$ sudo chown -R nova:nova /etc/nova
$ sudo chmod 640 /etc/nova/nova.conf
$ sudo chown nova:nova /etc/nova/nova-compute.conf
$ sudo chmod 640 /etc/nova/nova-compute.conf
(2)nova.confの設定

NetworkManagerのデフォルト値はnova.network.manager.VlanManagerです。
今回はnova.network.managerをFlatDHCPManagerにします。
use_syslogを指定すると、nova-{api,network,compute}等のログがsyslogに出力されるようになるので地味に便利です。

$ sudo vi /etc/nova/nova.conf
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/var/lib/nova
--lock_path=/var/lock/nova
--flagfile=/etc/nova/nova-compute.conf
--force_dhcp_release=True
--use_deprecated_auth
--verbose
--rabbit_host=server1
--sql_connection=mysql://nova:nova@server1/nova
--network_manager=nova.network.manager.FlatDHCPManager
--public_interface=eth0
--flat_interface=eth0
--flat_injected=false
--bridge=eth0
--bridge_interface=br100
--network_host=192.168.33.3
--routing_source_ip=192.168.33.3
--fixed_range=10.0.0.0/8
--network_size=1024
--cc_host=server1
--ec2_url=http://server1:8773/services/Cloud
--s3_host=server1
--s3_dmz=server1
--glance_api_servers=server1:9292
--image_server=nova.image.glance.GlanceImageService
--vnc_enabled=true
--vncproxy_url=http://server1:6080
--vnc_console_proxy_url=http://server1:6080
--use_syslog
(3)nova-compute.confの設定

Cactusまでは存在しなかったこのファイル。
Diabloから増えた模様、利用するハイパーバイザを記述します。

$ sudo vi /etc/nova/nova-compute.conf
--libvirt_type=kvm
(4)データベースにテーブル作成とサービス再起動
$ sudo nova-manage db sync
$ sudo restart nova-network
$ sudo restart nova-api
$ sudo restart nova-compute
$ sudo restart nova-scheduler
$ sudo restart glance
(5)ユーザーとプロジェクトの作成
$ sudo nova-manage user admin nova-admin
export EC2_ACCESS_KEY=4a17871e-75c6-4372-8994-aa92b0e922a7
export EC2_SECRET_KEY=c2ead9a3-768f-4bd2-8e6f-f1f1ade9a8d5
$ sudo nova-manage project create nova-project nova-admin
(6)ネットワークの作成

仮想インスタンスに割り当てる内部ネットワークと、外部からアクセスするためのFloating IPを定義します。

内部ネットワークの作成
Cactusから引数が大幅に変更されています(多分)
bridgeデバイス名をbr100,bridgeデバイスとなるinterfaceをeth0として定義します。
また、nova-networkを将来マルチノードで冗長化するので、--multi_hostフラグをT(恐らくTrue)に設定しておきます。

$ sudo nova-manage network create public --bridge=br100 --bridge_interface=eth0 \
   --fixed_range_v4=10.0.1.0/24 --num_network=1 --network_size=256 --multi_host=T

Floating IPの作成
外部アドレスとして割当てるIPのレンジを指定します。
いまさらCIDR先生を利用すると楽です。

$ sudo nova-manage float create  --ip_range=192.168.33.128/28

3.プロジェクトのセットアップ

server1にて実施します。

(1)プロジェクトとユーザの紐付け

実OSユーザが、作成したプロジェクトを管理できるように環境変数を設定します。

$ sudo -i
# mkdir /root/creds
# nova-manage project zipfile nova-project nova-admin /root/creds/novacreds.zip
# cd ~/creds
# unzip novacreds.zip
# vi ~/.bashrc
--以下を記述
source ~/creds/novarc
# source ~/.bashrc
(2)仮想インスタンスのポートを通過設定
# euca-authorize -P icmp -t -1:-1 default
# euca-authorize -P tcp -p 22 default

以上でserver1のセットアップが完了です。

4.Computeノード追加

2台目のノードをCompute専用ノードとして設定します。
setver2にて実施します。

(1)パッケージインストール

nova-computeパッケージを追加します

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:openstack-release/2011.3
$ sudo apt-get update
$ sudo apt-get install nova-compute
(2)nova.confの設定

nova.confの内容はserver1の/etc/nova/nova.confと同じ内容でOKです。

$ sudo chown nova:nova /etc/nova/nova.conf
$ sudo chown -R nova. /etc/nova
$ sudo vi /etc/nova/nova.conf
***省略***
(3)computeサービス再起動と確認
$ sudo restart nova-compute
$ sudo nova-manage service list
Binary           Host                                 Zone             Status     State Updated_At
nova-network     server1                               nova             enabled    :-)   2011-10-04 10:28:51
nova-compute     server1                               nova             enabled    :-)   2011-10-04 10:28:46
nova-scheduler   server1                              nova             enabled    :-)   2011-10-04 10:28:51
nova-compute     server2                               nova             enabled    :-)   2011-10-04 10:28:44

以上でComputeノードの設定が完了です。

4.イメージの登録と起動

euca2oolsをインストールしたserver1にて実施します。

(1)イメージの登録

サンプルイメージを登録します。
仮想インスタンスの起動確認なら、小さいイメージを利用すると作業が捗るので、
今回はココで利用しているイメージを取得して、起動確認を行います。

$ sudo -i
# mkdir ~/images
# wget -c http://images.ansolabs.com/tty.tgz
# mkdir tty
# tar zxf tty.tgz
# mv a* tty
# nova-manage image convert /root/images/tty
(2)インスタンスの起動

インスタンスは1プロジェクトにつき、デフォルト10インスタンスまで起動できます。

# euca-add-keypair tty_key > tty_key.pem
# euca-run-instances -k tty_key ami-tty
RESERVATION     r-7e1u8p9e      nova-project    default
INSTANCE        i-00000001      ami-00000003                    pending tty_key (nova-project, None)    0               m1.small        2011-10-04T08:24:32Z    unknown zone    aki-00000001    ari-00000002
# euca-describe-instances
RESERVATION     r-7e1u8p9e      nova-project    default
INSTANCE        i-00000001      ami-00000003    10.0.1.2     10.0.1.2     pending tty_key (nova-project, server2)  0               m1.small        2011-10-04T08:24:32Z    nova    aki-00000001    ari-00000002

以上でインスタンスの登録と起動が完了です。

5 Openstack Identity(Keystone)のインストール&セットアップ

server1にて実施します。

(1) Openstack Identity(Keystone)のインストール

以前はgitで取得していましたが、ついにaptでインストールすることができるようになりました。
データベースにはMySQLを利用します

$ sudo add-apt-repository ppa:keystone-core/trunk
$ sudo apt-get update
$ sudo apt-get install keystone
$ mysql -u nova -pnova 
mysql> CREATE DATABASE keystone;
mysql> exit;
(2)keystone設定ファイルの作成

aptでkeystoneをインストールしても、設定ファイルはインストールされません・・・
自身で作成する必要があります。

$ sudo vi /etc/keystone.conf
[DEFAULT]
verbose = True
debug = False
default_store = mysql
log_file = keystone.log
backends = keystone.backends.sqlalchemy
service-header-mappings = {
	'nova' : 'X-Server-Management-Url',
	'swift' : 'X-Storage-Url',
	'cdn' : 'X-CDN-Management-Url'}
service_host = 0.0.0.0
service_port = 5000
admin_host = 0.0.0.0
admin_port = 35357
keystone-admin-role = Admin
keystone-service-admin-role = KeystoneServiceAdmin
hash-password = True
[keystone.backends.sqlalchemy]
sql_connection = mysql://nova:nova@server1/keystone
backend_entities = ['UserRoleAssociation', 'Endpoints', 'Role', 'Tenant',
                    'User', 'Credentials', 'EndpointTemplates', 'Token',
                    'Service']
sql_idle_timeout = 30

[pipeline:admin]
pipeline =
	urlrewritefilter
	admin_api

[pipeline:keystone-legacy-auth]
pipeline =
	urlrewritefilter
	legacy_auth
	RAX-KEY-extension
	service_api

[app:service_api]
paste.app_factory = keystone.server:service_app_factory

[app:admin_api]
paste.app_factory = keystone.server:admin_app_factory

[filter:urlrewritefilter]
paste.filter_factory = keystone.middleware.url:filter_factory

[filter:legacy_auth]
paste.filter_factory = keystone.frontends.legacy_token_auth:filter_factory

[filter:RAX-KEY-extension]
paste.filter_factory = keystone.contrib.extensions.service.raxkey.frontend:filter_factory
(3)/etc/init/keystone.confの修正

keystone起動時の引数を変更します。

$ sudo vi /etc/init/keystone.conf
exec su -c "keystone --log-dir=/var/log/keystone --log-file=api.log" keystone
↓
exec su -c "keystone --debug --verbose --config-file=/etc/keystone.conf --log-dir=/var/log/keystone --log-file=api.log" keystone
(4)keystone起動
$ sudo start keystone
(5)トークンの作成

keystoneに、テナントと認証ユーザを作成します

$ sudo keystone-manage -c /etc/keystone.conf tenant add admin
$ sudo keystone-manage -c /etc/keystone.conf user add admin password
$ sudo keystone-manage -c /etc/keystone.conf role add Admin
$ sudo keystone-manage -c /etc/keystone.conf role add Member
$ sudo keystone-manage -c /etc/keystone.conf grant
$ sudo keystone-manage -c /etc/keystone.conf role grant Admin admin
$ sudo keystone-manage -c /etc/keystone.conf token add 12345678  admin admin 2015-02-05T00:00

以上でkeystoneの設定は完了です(たぶn)

6.DashBoardのインストール&セットアップ

OpenstackをG・U・I!で管理するためのインタフェース Dashboardをインストールします。
server1にて実施します。

(1)Dashboardのインストール&セットアップ
$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/4P/openstack-dashboard
$ cd openstack-dashboard/openstack-dashboard/local
$ cp local_settings.py.example local_settings.py
$ vi local_settings.py.example local_settings.py
**追記
OPENSTACK_ADMIN_TOKEN = "12345678"
$ cd ~/src/openstack-dashboard/openstack-dashboard/
$ apt-get install -y python-setuptools 
$ sudo easy_install virtualenv 
$ python tools/install_venv.py
$ source .dashboard-venv/bin/activate
$ tools/with_venv.sh dashboard/manage.py runserver 0.0.0.0:8000

と、ドキュメント通りにDashboardをインストールするとこのように失敗してしまいます。
なぜだうーん。


そこで、ここのサイトを参考に手順を変更します

ソースコードの取得などは一部省略

(2)local_settings.pyの設定
$ vi local_settings.py
NOVA_DEFAULT_ENDPOINT = 'http://localhost:8773/services/Cloud'
NOVA_DEFAULT_REGION = 'nova'
NOVA_ACCESS_KEY = 'admin:nova-project'
NOVA_SECRET_KEY = '08973639-16fa-44a9-9005-d44ed705bbfb'
NOVA_ADMIN_USER = 'nova-admin'
NOVA_PROJECT = 'nova-project'
(3)起動
$ tools/with_venv.sh  dashboard/manage.py syncdb
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'root'): admin
E-mail address: admin@localhost.local
Password: <パスワード入力>
Password (again): <パスワード再入力>
No fixtures found.
(4)Dashboardへアクセス

ログイン画面

ログイン後

ログインしたアカウントと、プロジェクトが関連付けていませんが、とりあえず完了です。

7.次のステップ

・自作イメージで(・∀・)ニヤニヤする
・Dashboardの設定をミスったと思われるので、修正する。
・Nova Volume,Swiftを試す
・ユーザ管理/プロジェクト管理,課金について学習
・複数のノードでNova-networkを稼働させる。
・NetworkManagerに替わると言われているNetwork管理方式Quantumを学習
等々試すことは沢山ありますねえ。


そうそう、CloudStackも試してみないと。