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

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

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

6.2.5.1. Cinderのダウンロード

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

6.2.5.1.1. Cinderのソースをダウンロード

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

6.2.5.1.2. CinderのバージョンをFolsomに固定

$ cd /opt/cinder ; sudo git checkout -b folsom origin/stable/folsom

6.2.5.2. Cinderのインストール

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

6.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

6.2.5.4. Cinderのコンフィグ

cinderのコンフィグを行います。
cinder.confの設定
Cinderのデフォルト値はcinder-volumesですがここではnova-volumesとしています。
$ 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
auth_strategy = keystone
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.openstack.volume.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 = nova-volumes

#iscsi
iscsi_helper = tgtadm
cinder-paste.iniの設定
Cinderの箇所だけ変更しています。
$ sudo vi /etc/cinder/api-paste.ini

[filter:authtoken]
paste.filter_factory = keystone.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 = cinder
admin_password = password

6.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

6.2.5.6. SUDOの設定

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

$ cat << 'CINDER_SUDO' | sudo tee /etc/sudoers.d/cinder-rootwrap > /dev/null
cinder ALL=(root) NOPASSWD: /usr/local/bin/cinder-rootwrap /etc/cinder/rootwrap.conf *
CINDER_SUDO
$ sudo chmod 440 /etc/sudoers.d/*

6.2.5.7. プロセスの起動

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

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

$ cat << 'CINDER_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 [016]

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 su -s /bin/sh -c "exec cinder-api --config-file=/etc/cinder/cinder.conf --log-file=/var/log/cinder/cinder-api.log" cinder
CINDER_INIT

$ cat << 'CINDER_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 [016]

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 su -s /bin/sh -c "exec cinder-volume --config-file=/etc/cinder/cinder.conf --log-file=/var/log/cinder/cinder-volume.log" cinder
CINDER_INIT

$ cat << 'CINDER_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 [016]

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 su -s /bin/sh -c "exec cinder-scheduler --config-file=/etc/cinder/cinder.conf --log-file=/var/log/cinder/cinder-scheduler.log" cinder
CINDER_INIT

6.2.5.8. Keystoneの設定

先にnova-volumeのEndpointとServiceを削除してからCinderの設定を追加します。
環境変数を読み込ませていない場合は先に読こませておきます。
$ CONTROLLER_HOST=stack01
$ export ADMIN_TOKEN=ADMIN
$ export SERVICE_TOKEN=$ADMIN_TOKEN
$ export OS_USERNAME=admin
$ export OS_PASSWORD=password
$ export OS_TENANT_NAME=admin
$ export OS_AUTH_URL=http://$CONTROLLER_HOST:35357/v2.0/
$ export SERVICE_ENDPOINT=http://$CONTROLLER_HOST:35357/v2.0/
サンプルシェルを利用した場合や既存でNovaのnova-volumeを利用する設定になっている場合に行います。
nova-volume用のEndpointとServiceを削除します。
ポートが同じなので削除しておかないとややこしくなります。
endpointは8776のものを削除します。
$ keystone endpoint-delete $(keystone endpoint-list | grep 8776 | awk '{print $2}')
Endpoint has been deleted.
$ keystone service-delete $(keystone service-list | grep volume | awk '{print $2}')

Cinder用のUser、Servvice、Endpointを追加

SERVICE_PASSWORD=password
SERVICE_HOST=stack01

function get_id () {
    echo `"$@" | awk '/ id / { print $4 }'`
}
ADMIN_ROLE=$(keystone role-list | grep " admin" | awk '{print $2}')
SERVICE_TENANT=$(keystone tenant-list | grep service | awk '{print $2}')

CINDER_USER=$(get_id keystone user-create --name=cinder \
                                          --pass="$SERVICE_PASSWORD" \
                                          --tenant_id $SERVICE_TENANT \
                                          --email=cinder@example.com)
keystone user-role-add --tenant_id $SERVICE_TENANT \
                       --user_id $CINDER_USER \
                       --role_id $ADMIN_ROLE
CINDER_SERVICE=$(get_id keystone service-create \
    --name=cinder \
    --type=volume \
    --description="Cinder Service")
keystone endpoint-create \
    --region RegionOne \
    --service_id $CINDER_SERVICE \
    --publicurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \
    --adminurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \
    --internalurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s"

6.2.5.9. tgtの設定

tgtのボリュームパスの設定を行います。

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

tgtの再起動

$ sudo restart tgt

6.2.5.9.1. プロセスの起動*

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

$ for i in volume api scheduler
do
  sudo start cinder-$i ; sudo restart cinder-$i
done
Cinderのインストール、設定はここで終了です。
念のためボリュームの作成、削除が出来ることを確認しておきましょう。

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

ここで、作成追加出来たとしても安心せずインスタンスにボリュームをアタッチできるとこまでは確認しておいたほうがよいでしょう。
一度ログアウトしてログインしなおしてみてから確認しましょう。
環境変数の読み込みを行ってから確認します。
$ export OS_USERNAME=admin
$ export OS_PASSWORD=password
$ export OS_TENANT_NAME=admin
$ export OS_AUTH_URL=http://stack01:35357/v2.0/

$ 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