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