3784 Words

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=...が見えたら何もしなくて OK

  • InitiatorName=...がなくGenerateName=yesなどのみの場合、追加操作が必要になる

    1. iscsidを起動してみる

      #root user

      systemctl start iscsid
      
      • 再度/etc/iscsi/initiatorname.iscsiを確認してInitiatorName=...が見えたら OK
      • このやり方でどうしてもうまくいかない場合のみ次の手動設定を試してみてください
    2. 手動で設定

      1. InitiatorName手動生成

        #root user

        /sbin/iscsi-iname
        
        iqn.yyyy-mm.naming-authority:unique-name
        
      2. /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

  1. Cinder をインストールする前にデータベースを作成する必要がある
    #root user

    mysql
    
    # 以下は`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データベースの作成とアクセス権限の付与
  2. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  3. サービス資格情報

    • 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                         |
      +-------------+----------------------------------+
      
      • よくわからないけどv2v3の両方作るらしい
  4. 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 |
      +--------------+------------------------------------------+
      
      • publicinternaladminにそれぞれ作成
    • 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 |
      +--------------+------------------------------------------+
      
      • publicinternaladminにそれぞれ作成

ストレージプレーン

OpenStack Docs: Install and configure a storage node - Prerequisites

  • OpenStack Ussuriをマニュアルインストールしてみたメモに書いたコントローラノードの Disk2 (for cinder)を使用する
  • ドキュメントでは Cinder 用のストレージデバイスを/dev/sdbとする
  • もし違っていたら環境に適切な/dev/sdx/dev/vdxに書き換えること
    • fdisk -lで確認してください
  1. サポートユーティリティパッケージインストール

    #root user

    apt install lvm2 thin-provisioning-tools
    
    • 最初から入ってることが多い
  2. LVM 物理ボリューム作成

    #root user

    pvcreate /dev/sdb
    
    Physical volume "/dev/sdb" successfully created
    
    • /dev/sdbでない場合は環境に適切な/dev/sdx/dev/vdxに書き換える
    • pvdisplayコマンドで確認できる
  3. LVM ボリュームグループ作成

    #root user

    vgcreate cinder-volumes /dev/sdb
    
    Volume group "cinder-volumes" successfully created
    
    • /dev/sdbでない場合は環境に適切な/dev/sdx/dev/vdxに書き換える
    • vgdisplayコマンドで確認できる
  4. /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

  1. パッケージインストール

    #root user

    apt install cinder-api cinder-scheduler cinder-volume
    
  2. /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]セクションのいくつかの項目は最初から書かれていたりするので重複しないように適宜削除してください
  3. 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

  1. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  2. 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 |
    +------------------+------------+------+---------+-------+----------------------------+
    
  3. Horizon ダッシュボードの左側のメニューにボリュームが表示されているはず

    • 表示されていなかったらコントローラノードを再起動してみよう

おわり

以上で Cinder 編終了です
お疲れ様でした

関連記事一覧