OpenStack Ussuri マニュアルインストールその8―Cinder 編
- Cinder はブロックストレージサービス
- インスタンスに永続ボリュームを提供する
- ドキュメントではコントローラノードとストレージノードを分離して書いてあるが、ここではコントローラノードに一体化させる
iSCSI 下準備
Controller Compute
- IP ネットワークでストレージ専用ネットワーク"SAN"を構築するためのプロトコル
- Cinder は iSCSI を用いてインスタンスに永続ボリュームを提供するみたい
- この手順はドキュメントには書かれておらず、手探りで対応した過程のメモなので操作が正しいかどうかわかりません
/etc/iscsi/initiatorname.iscsi
確認
root user
cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.yyyy-mm.naming-authority:unique-name
上の出力のように
InitiatorName=...
が見えたら何もしなくて OKInitiatorName=...
がなくGenerateName=yes
などのみの場合、追加操作が必要になるiscsid
を起動してみるroot user
systemctl start iscsid
- 再度
/etc/iscsi/initiatorname.iscsi
を確認してInitiatorName=...
が見えたら OK - このやり方でどうしてもうまくいかない場合のみ次の手動設定を試してみてください
- 再度
手動で設定
InitiatorName
手動生成root user
/sbin/iscsi-iname
iqn.yyyy-mm.naming-authority:unique-name
/etc/iscsi/initiatorname.iscsi
編集root user
# 一応バックアップ取っとく mv /etc/iscsi/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi.bak vim /etc/iscsi/initiatorname.iscsi
# `/sbin/iscsi-iname`コマンドで生成されたInitiatorNameを書く InitiatorName=iqn.yyyy-mm.naming-authority:unique-name
- もしかしたら再起動する必要があるかもしれない?
InitiatorName
がないと Cinder が提供する永続ボリュームを利用するインスタンスを建てようとした際にボリューム作成までうまくいくが、インスタンスにボリュームをアタッチできずインスタンス起動には失敗することになる(地味にハマった)
前提条件
Controller
- ドキュメントではコントローラノードとストレージノードは分離しているが、ここでの構成は分離せずにコントローラノードにストレージ機能をまとめてしまいます
- 分離したい場合は公式ドキュメントOpenStack Docs: Cinder Installation Guide for Ubuntuに沿ってインストールしてください
コントロールプレーン
OpenStack Docs: Install and configure controller node - Prerequisites
Cinder をインストールする前にデータベースを作成する必要がある
root usermysql
# 以下は`MariaDB [(none)]>`のプロンプトに入力する CREATE DATABASE cinder; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS'; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
-
Caution
CINDER_DBPASS
は適切なパスワードに書き換える cinder
データベースの作成とアクセス権限の付与
-
Caution
admin
環境スクリプトの読み込みany user
. admin-openrc
サービス資格情報
cinder
ユーザ作成any user
openstack user create --domain default --password-prompt cinder # 対話形式のパスワードプロンプトがでる User Password: Repeat User Password:
+---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 9d7e33de3e1a498390353819bc7d245d | | name | cinder | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
パスワードプロンプトでは Caution
CINDER_PASS
を入力service
プロジェクト、cinder
ユーザにadmin
の役割を割り当てるany user
openstack role add --project service --user cinder admin
volumev2
サービス (name: cinderv2
) 、volumev3
サービス (name: cinderv3
) を作成any user
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | eb9fd245bdbc414695952e93f29fe3ac | | name | cinderv2 | | type | volumev2 | +-------------+----------------------------------+
any user
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | ab3bbbef780845a1a283490d281e7fda | | name | cinderv3 | | type | volumev3 | +-------------+----------------------------------+
- よくわからないけど
v2
とv3
の両方作るらしい
- よくわからないけど
volumev2
サービス、volumev3
サービスに API エンドポイント作成volumev2
サービスany user
openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 513e73819e14460fb904163f41ef3759 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | eb9fd245bdbc414695952e93f29fe3ac | | service_name | cinderv2 | | service_type | volumev2 | | url | http://controller:8776/v2/%(project_id)s | +--------------+------------------------------------------+
any user
openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 6436a8a23d014cfdb69c586eff146a32 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | eb9fd245bdbc414695952e93f29fe3ac | | service_name | cinderv2 | | service_type | volumev2 | | url | http://controller:8776/v2/%(project_id)s | +--------------+------------------------------------------+
any user
openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | e652cf84dd334f359ae9b045a2c91d96 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | eb9fd245bdbc414695952e93f29fe3ac | | service_name | cinderv2 | | service_type | volumev2 | | url | http://controller:8776/v2/%(project_id)s | +--------------+------------------------------------------+
public
、internal
、admin
にそれぞれ作成
volumev3
サービスany user
openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 03fa2c90153546c295bf30ca86b1344b | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | ab3bbbef780845a1a283490d281e7fda | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s | +--------------+------------------------------------------+
any user
openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 94f684395d1b41068c70e4ecb11364b2 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | ab3bbbef780845a1a283490d281e7fda | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s | +--------------+------------------------------------------+
any user
openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 4511c28a0f9840c78bacb25f10f62c98 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | ab3bbbef780845a1a283490d281e7fda | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s | +--------------+------------------------------------------+
public
、internal
、admin
にそれぞれ作成
ストレージプレーン
OpenStack Docs: Install and configure a storage node - Prerequisites
- OpenStack Ussuriをマニュアルインストールしてみたメモに書いたコントローラノードの Disk2 (for cinder)を使用する
- ドキュメントでは Cinder 用のストレージデバイスを
/dev/sdb
とする - もし違っていたら環境に適切な
/dev/sdx
や/dev/vdx
に書き換えることfdisk -l
で確認してください
サポートユーティリティパッケージインストール
root user
apt install lvm2 thin-provisioning-tools
- 最初から入ってることが多い
LVM 物理ボリューム作成
root user
pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
/dev/sdb
でない場合は環境に適切な/dev/sdx
や/dev/vdx
に書き換えるpvdisplay
コマンドで確認できる
LVM ボリュームグループ作成
root user
vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created
/dev/sdb
でない場合は環境に適切な/dev/sdx
や/dev/vdx
に書き換えるvgdisplay
コマンドで確認できる
/etc/lvm/lvm.conf
編集# ... devices { # ... # `/dev/sdb`のみを受け付けて、他は排除する # 複数受け付ける場合は # filter = [ "a/sdb/", "a/sdc/", "r/.*/"] # と列挙すればよい filter = [ "a/sdb/", "r/.*/"] # ...
/dev/sdb
でない場合は環境に適切な/dev/sdx
や/dev/vdx
に書き換えるcinder-volumes
の LVM ボリュームグループを含むデバイスのみをスキャンするための設定(あまりよくわかっていない…)
インストール
Controller
OpenStack Docs: Install and configure controller node - Install and configure components
OpenStack Docs: Install and configure a storage node - Install and configure components
パッケージインストール
root user
apt install cinder-api cinder-scheduler cinder-volume
/etc/cinder/cinder.conf
編集[DEFAULT] # ... # `RABBIT_PASS`は適切なパスワードに書き換える transport_url = rabbit://openstack:RABBIT_PASS@controller # `keystone`を利用することを指定 auth_strategy = keystone # コントローラノードの管理ネットワークIPアドレス # ex) my_ip = 192.168.0.11 my_ip = CONTROLLER_MANAGEMENT_IP # LVMバックエンドの有効化 enabled_backends = lvm # Glance API指定 glance_api_servers = http://controller:9292 # ... [database] # ... # `CINDER_DBPASS`は適切なパスワードに書き換える connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder [keystone_authtoken] # 他のオプションはすべて削除またはコメントアウトする # `CINDER_PASS`は適切なパスワードに書き換える www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS [oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp [lvm] # ... # `cinder-volumes`のLVMボリュームグループを使用したり # iSCSIプロトコルを使用したりの設定 volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes target_protocol = iscsi target_helper = tgtadm # ...
-
Caution
RABBIT_PASS
は適切なパスワードに書き換える -
Caution
CINDER_DBPASS
は適切なパスワードに書き換える -
Caution
CINDER_PASS
は適切なパスワードに書き換える [DEFAULT]
セクションのいくつかの項目は最初から書かれていたりするので重複しないように適宜削除してください
-
Caution
Cinder データベース同期
root user
su -s /bin/sh -c "cinder-manage db sync" cinder
ブロックストレージ使用設定
Controller
OpenStack Docs: Install and configure controller node - Configure Compute to use Block Storage
/etc/nova/nova.conf
編集
# ...
[cinder]
os_region_name = RegionOne
# ...
サービス再起動
Controller
OpenStack Docs: Install and configure controller node - Finalize installation
OpenStack Docs: Install and configure a storage node - Finalize installation
root user
systemctl restart nova-api
systemctl restart cinder-scheduler
systemctl restart tgt
systemctl restart cinder-volume
systemctl restart apache2
バックアップ
OpenStack Docs: Install and configure the backup service
- Swift(オブジェクトストレージサービス)を用意していないのでバックアップサービスは構築しない
動作確認
Controller
OpenStack Docs: Verify Cinder operation
admin
環境スクリプトの読み込みany user
. admin-openrc
Cinder サービス一覧表示
any user
openstack volume service list
+------------------+------------+------+---------+-------+----------------------------+ | Binary | Host | Zone | Status | State | Updated_at | +------------------+------------+------+---------+-------+----------------------------+ | cinder-scheduler | controller | nova | enabled | up | 2016-09-30T02:27:41.000000 | | cinder-volume | block@lvm | nova | enabled | up | 2016-09-30T02:27:46.000000 | +------------------+------------+------+---------+-------+----------------------------+
Horizon ダッシュボードの左側のメニューにボリュームが表示されているはず
- 表示されていなかったらコントローラノードを再起動してみよう
おわり
以上で Cinder 編終了です
お疲れ様でした
関連記事一覧
- OpenStack Ussuriをマニュアルインストールしてみたメモ
- OpenStack Ussuriマニュアルインストールその1―環境構築編
- OpenStack Ussuriマニュアルインストールその2―Keystone編
- OpenStack Ussuriマニュアルインストールその3―Glance編
- OpenStack Ussuriマニュアルインストールその4―Placement編
- OpenStack Ussuriマニュアルインストールその5―Nova編
- OpenStack Ussuriマニュアルインストールその6―Neutron編
- OpenStack Ussuriマニュアルインストールその7―Horizon編
- OpenStack Ussuriマニュアルインストールその8―Cinder編(当記事)
- OpenStack Ussuriマニュアルインストールその9―起動編
- OpenStack Ussuri 追加インストールその1―Octavia編
- OpenStack Victoriaをマニュアルインストールしてみたメモ
- OpenStack Tips
- Issues