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-inameiqn.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 adminvolumev2サービス (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/sdbPhysical volume "/dev/sdb" successfully created/dev/sdbでない場合は環境に適切な/dev/sdxや/dev/vdxに書き換えるpvdisplayコマンドで確認できる
LVM ボリュームグループ作成
root user
vgcreate cinder-volumes /dev/sdbVolume 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-openrcCinder サービス一覧表示
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