このエントリーをはてなブックマークに追加

2.2.5. Volume Service(Cinder)のインストール

OpenStack Volume Serviceのコード名はCinderです。
CinderはNovaのボリュームサービスが独立したものです。

2.2.5.1. Cinderのダウンロード

Cinderのソースをダウンロードします。
またCinderAPIを利用するためのクライアントもダウンロードしておきます。
ダウンロードしたバージョンはMasterになっているためバージョンはどちらもGrizzlyにします。

2.2.5.1.1. Keystoneのソースをダウンロード

$ sudo git clone git://github.com/openstack/cinder /opt/cinder
$ sudo git clone git://github.com/openstack/python-cinderclient /opt/python-cinderclient

2.2.5.1.2. CinderのバージョンをGrizzlyに固定

クライアントのタグは folsom-1 までしか切られていませんがMasterで問題ないのでMasterを利用します。
$ cd /opt/cinder ; sudo git checkout -b grizzly origin/stable/grizzly

2.2.5.2. Cinderのインストール

ダウンロードしたKeystoneとクライアントをインストールします。
pipでパッケージの依存関係を解決します。
$ sudo pip install -r /opt/cinder/tools/pip-requires
$ cd /opt/cinder && sudo python setup.py install
$ sudo pip install -r /opt/python-glanceclient/tools/pip-requires
$ cd /opt/python-cinderclient && sudo python setup.py install

2.2.5.3. Cinderが利用するユーザ、ディレクトリなどの作成

ソースからインストールする場合はユーザやディレクトリを作成する必要がありますので作成します。
$ sudo useradd cinder -m -d /var/lib/cinder -s /bin/false
$ sudo mkdir /etc/cinder
$ sudo mkdir /var/log/cinder
$ sudo chown cinder:cinder /var/log/cinder

2.2.5.4. Cinderのコンフィグ

cinderのコンフィグを行います。
バックアップをディレクトリごととっておきましょう。
$ sudo cp -a /opt/cinder/etc/* /etc
$ sudo mv /etc/cinder/cinder.conf.sample /etc/cinder/cinder.conf
$ sudo mv /etc/cinder/logging_sample.conf /etc/cinder/logging.conf
$ sudo vi /etc/cinder/cinder.conf
[DEFAULT]
#misc
verbose=True
auth_strategy=keystone
rootwrap_config=/etc/cinder/rootwrap.conf
api_paste_config=/etc/cinder/api-paste.ini
state_path=/var/lib/cinder
volumes_dir=/var/lib/cinder/volumes

#log
log_file=cinder.log
log_dir=/var/log/cinder

#osapi
osapi_volume_extension=cinder.api.contrib.standard_extensions

#rabbit
rabbit_host=stack01
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=password

#sql
sql_connection=mysql://cinder:password@stack01/cinder?charset=utf8
#volume
volume_name_template=volume-%s
volume_group=cinder-volumes

#iscsi
iscsi_helper=tgtadm
cinder-paste.iniの設定
Cinderの箇所だけ変更しています。
$ sudo vi /etc/cinder/api-paste.ini
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
service_protocol = http
service_host = stack01
service_port = 5000
auth_host = stack01
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = nova
signing_dir = /var/lib/cinder

2.2.5.5. データベースの作成

Cinderが利用するデータベースを作成します。
Cinderのデータベースを設定するためのユーザ、パスワードはMySQLをインストールした時のものですので注意し>て下さい。
データベース名cinder、ユーザ名cinder、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
$ MYSQL_PASS_CINDER=password
$ NOVA_CONTOLLER_HOSTNAME=stack01
$ mysql -uroot -pnova -e "drop database if exists cinder;"
$ mysql -uroot -pnova -e "create database cinder character set utf8;"
$ mysql -uroot -pnova -e "grant all privileges on cinder.* to 'cinder'@'%' identified by '$MYSQL_PASS_CINDER';"
$ mysql -uroot -pnova -e "grant all privileges on cinder.* to 'cinder'@'localhost' identified by '$MYSQL_PASS_CINDER';"
$ mysql -uroot -pnova -e "grant all privileges on cinder.* to 'cinder'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_CINDER';"
$ sudo cinder-manage db sync

2.2.5.6. プロセスの起動

Cinderを起動します。がソースからのインストールの場合は起動スクリプトがありませんので用意します。

2.2.5.6.1. 起動スクリプトの用意

$ cat << 'CINDER_API_INIT' | sudo tee /etc/init/cinder-api.conf > /dev/null
description "Cinder api server"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [!2345]

chdir /var/run

pre-start script
    mkdir -p /var/run/cinder
    chown cinder:cinder /var/run/cinder

    mkdir -p /var/lock/cinder
    chown cinder:root /var/lock/cinder
end script

exec start-stop-daemon --start --chuid cinder --exec /usr/local/bin/cinder-api \
     -- --config-file=/etc/cinder/cinder.conf --log-file=/var/log/cinder/cinder-api.log
CINDER_API_INIT

$ cat << 'CINDER_VOLUME_INIT' | sudo tee /etc/init/cinder-volume.conf > /dev/null
description "Cinder volume server"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [!2345]

chdir /var/run

pre-start script
    mkdir -p /var/run/cinder
    chown cinder:cinder /var/run/cinder

    mkdir -p /var/lock/cinder
    chown cinder:root /var/lock/cinder
end script

exec start-stop-daemon --start --chuid cinder --exec /usr/local/bin/cinder-volume \
     -- --config-file=/etc/cinder/cinder.conf --log-file=/var/log/cinder/cinder-volume.log
CINDER_VOLUME_INIT

$ cat << 'CINDER_SCHEDULER_INIT' | sudo tee /etc/init/cinder-scheduler.conf > /dev/null
description "Cinder scheduler server"
author "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [!2345]

chdir /var/run

pre-start script
    mkdir -p /var/run/cinder
    chown cinder:cinder /var/run/cinder

    mkdir -p /var/lock/cinder
    chown cinder:root /var/lock/cinder
end script

exec start-stop-daemon --start --chuid cinder --exec /usr/local/bin/cinder-scheduler \
     -- --config-file=/etc/cinder/cinder.conf --log-file=/var/log/cinder/cinder-scheduler.log
CINDER_SCHEDULER_INIT

2.2.5.7. SUDOの設定

プロセスを起動するためにcinderのsudo設定が必要ですのでおこなっておきます。

$ cat << 'CINDER_SUDO' | sudo tee /etc/sudoers.d/cinder_sudoers > /dev/null
Defaults:cinder !requiretty

cinder ALL = (root) NOPASSWD: /usr/local/bin/cinder-rootwrap
CINDER_SUDO
$ sudo chmod 440 /etc/sudoers.d/*

2.2.5.8. iscsiの設定

# echo "include /var/lib/cinder/volumes/*" | sudo tee /etc/tgt/conf.d/cinder_tgt.conf
# sudo restart tgt

2.2.5.8.1. プロセスの起動*

作成した起動スクリプトを利用してCinderを起動します。

$ sudo chown cinder:cinder /var/log/cinder/*
$ for i in volume api scheduler
do
  sudo start cinder-$i ; sudo restart cinder-$i
done
Cinderのインストール、設定はここで終了です。
念のためボリュームの作成、削除が出来ることを確認しておきましょう。
一度ログアウトしてログインしなおしてみてから確認しましょう。
環境変数の読み込みを行ってから確認します。
$ export OS_USERNAME=admin
$ export OS_PASSWORD=secrete
$ export OS_TENANT_NAME=demo
$ export OS_AUTH_URL=http://stack01:35357/v2.0/

2.2.5.9. ボリュームの作成、削除

ここで、作成追加出来たとしても安心せずインスタンスにボリュームをアタッチできるとこまでは確認しておいたほうがよいでしょう。

$ cinder list
$ cinder create --display_name cinder_test 1
+--------------------------------------+-----------+--------------+------+-------------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
| 2e97bf88-c17f-4d69-b4e4-9781620abb0a | available | cinder_test  |  1   |     None    |             |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
$ cinder delete $(cinder list | grep cinder_test | awk '{print $2}')
$ cinder list