OpenStackの新機能、Cinderを使う 3ページ

LVMおよびtgtの設定

 続いて、LVMでCinderが使用する論理ボリュームが有効化されるよう、/etc/lvm/lvm.confの「volume_list」項目に使用する論理ボリュームを追加しておく。たとえば「cinder-volumes」という論理ボリュームを使用する場合、下記の太字の部分を追加しておく。

    # If volume_list is defined, each LV is only activated if there is a
    # match against the list.
    #   "vgname" and "vgname/lvname" are matched exactly.
    #   "@tag" matches any tag set in the LV or VG.
    #   "@*" matches if any tag defined on the host is also set in the LV or VG
    #
    # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
    volume_list = [ "cinder-volumes" ]

 また、Cinderが使用するtgtdの設定ファイルについても変更が必要だ。まず、メインの設定ファイルである/etc/tgt/targets.confの先頭部分に「include /etc/tgt/conf.d/*.conf」という記述を追加しておく。

# This one includes other config files:

#include /etc/tgt/temp/*.conf
include /etc/tgt/conf.d/*.conf

 続いて、/etc/tgt/conf.dディレクトリ内のcinder.confというファイル内でコメントアウトされている「include /etc/cinder/volumes/*」という行を有効化しておく。

# Note this config mode is not supported by scsi-target-utils in RHEL <= 6.4
# include /etc/cinder/volumes/
# So instead please add the following line (without the leading comment char)
# to the top of /etc/tgt/targets.conf
include /etc/cinder/volumes/*  ←コメントアウトされているので「#」を削除して有効にする

ファイアウォールの設定

 Cinderでは、サービスを提供するためにTCPの8776番ポートを使用する。また、Cinderが内部で使用するtgtdサービスはTCPおよびUDPの3260番ポートを利用する。ファイアウォールの設定を適宜変更し、これらのポートにほかのOpenStackノードからアクセスできるよう設定しておこう。

sudoersの設定

 Cinderの各種サービスは、パッケージのインストール時に作成された「cinder」というユーザーの権限で実行される。ただし、ストレージ関連の操作など一部の操作はsudoを利用してroot権限で実行される。そのため、cinderユーザーがsudoを使ってroot権限でのコマンド実行を行えるよう、/etc/sudoersファイルに下記の記述を追加しておく。

cinder  ALL=(ALL)       NOPASSWD:ALL

サービスの起動

 最後にCinder関連サービスおよびtgtdサービスを再起動しておく。

service openstack-cinder-api restart
service openstack-cinder-volume restart
service openstack-cinder-scheduler restart
service tgtd restart

keystoneの設定

 以上でCinderサービス側の設定は完了だが、そのほかに認証サービスであるkeystoneにCinder用のユーザーおよびサービスの作成とエンドポイントの登録を行っておくく必要がある。ここではkeystoneを実行しているサーバー上で以下のようなスクリプトを実行して設定を追加している。太字の部分は環境に応じて適宜変更してほしい。

CINDER_HOST=<Cinderサービスを実行しているホスト名/IPアドレス>
TENANT_NAME=<サービスを登録するテナント名>
REGION=<サービスを登録するリージョン名>
CINDER_USER=<使用するユーザー名>
PASSWORD=<ユーザー名に対応するパスワード>

export SERVICE_TOKEN=<Keystoneの設定用サービストークン文字列>
export SERVICE_ENDPOINT=http://localhost:35357/v2.0/

# ユーザーの作成
ADMIN_ROLE=$(keystone role-list | awk '/admin/ {print $2}')
TENANT_ID=$(keystone tenant-list | awk "/$TENANT_NAME/ {print \$2}")
keystone user-create --tenant_id $TENANT_ID --name cinder --pass cinder
CINDER_USER_ID=`keystone user-list | grep cinder | awk '{print $2}'`
keystone user-role-add --user_id $CINDER_USER_ID --tenant_id $TENANT_ID --role_id $ADMIN_ROLE

# サービスの作成
keystone service-create --name=cinder --type=volume --description="Cinder Volume Service"

# エンドポイントの登録
CINDER_ID=$(keystone service-list | awk '/cinder/ {print $2}')
keystone endpoint-create --region $REGION --service_id $CINDER_ID --publicurl "http://$CINDER_HOST:8776/v1/%(tenant_id)s" --adminurl "http://$CINDER_HOST:8776/v1/%(tenant_id)s" --internalurl "http://$CINDER_HOST:8776/v1/%(tenant_id)s"

 たとえばCinderを実行しているホストのIPアドレスが192.168.100.21、テナント名が「service」、リージョン名が「RegionOne」、Cinderのユーザー名およびパスワードがともに「cinder」だった場合、スクリプトの先頭部分は以下のようになる。

CINDER_HOST=192.168.100.21
TENANT_NAME=service
REGION=RegionOne
CINDER_USER=cinder
PASSWORD=cinder

nova.confの設定

 NovaからCinderを利用するには、Novaの設定ファイルであるnova.confの設定を一部変更しておく必要がある。まず、有効化するAPIを指定するenabled_apis項目について下記のように設定しておく。

enabled_apis = ec2,osapi_compute,metadata

 もしここで「osapi_volume」という記述があった場合、ボリューム関連のAPIも有効化されてしまう。その場合、その記述を削除しておく。また、使用するボリュームAPIを指定するvolume_api_class項目も追加しておく。ここでは、以下のように「nova.volume.cinder.API」を指定しておけばよい。

volume_api_class = nova.volume.cinder.API