永続ストレージのカスタマイズ


Red Hat OpenStack Services on OpenShift 18.0

Red Hat OpenStack Services on OpenShift ストレージサービスのカスタマイズ

概要

Red Hat OpenStack Services on OpenShift 環境で、ブロック、イメージ、オブジェクト、およびファイルストレージのサービスをカスタマイズします。

Red Hat ドキュメントへのフィードバック (英語のみ)

ご意見ありがとうございます。ドキュメントを改善するために、どのような点にご対応いただけるかお聞かせください。

Red Hat OpenStack Services on OpenShift (RHOSO) に関するドキュメントへのフィードバックを提供するには、OSPRH Jira プロジェクトに Jira 課題を作成してください。

手順

  1. Red Hat Atlassian Jira にログインしてください。
  2. 以下のリンクをクリックして、課題作成ページを開きます: 課題を作成
  3. Summary フィールドと Description フィールドに入力します。Description フィールドに、ドキュメントの URL、章またはセクション番号、および問題の詳しい説明を入力します。
  4. Create をクリックします。
  5. 作成したバグの詳細を確認してください。

第1章 Red Hat OpenStack Services on OpenShift でのストレージのカスタマイズ

デプロイメント後、パフォーマンス、セキュリティー、スケーラビリティーに関する特定のニーズに合わせてストレージサービスをカスタマイズできます。ブロックストレージサービス (Cinder)、イメージサービス (Glance)、オブジェクトストレージサービス (Swift)、および Shared File Systems サービス (manila) を設定して、リソースを最適化し、クラウドユーザーにさまざまなサービスレベルを提供します。

注記

Red Hat OpenStack Services on OpenShift (RHOSO) は、Red Hat Ceph Storage 7、8、および 9 の外部デプロイメントをサポートしています。Red Hat Ceph Storage を参照する設定例では、リリース 7 の情報を使用します。Red Hat Ceph Storage の最新バージョンを使用している場合は、設定例を適宜調整してください。

第2章 Red Hat Ceph Storage 設定のカスタマイズ

Red Hat OpenStack Services on OpenShift (RHOSO) 18.0 は、Red Hat Ceph Storage 7、8、および 9 をサポートしています。Red Hat Ceph Storage をカスタマイズおよび管理するには、バージョン固有の Red Hat Ceph Storage ドキュメントセットを参照してください。

第3章 Block Storage サービス (cinder) のカスタマイズ

ブロックストレージサービス (Cinder) を設定することで、リソース使用量を制御したり、さまざまなパフォーマンスレベルを提供したり、機密データを保護したりすることができます。多様なワークロード要件に対応し、ストレージインフラストラクチャーを最適化するために、クォータ、ボリュームタイプ、暗号化、および QoS 仕様を設定します。

Block Storage サービスのカスタマイズには以下が含まれます。

  • クォータ: Block Storage リソースの使用を制限するために、プロジェクト固有の制限を定義できます。
  • ボリュームタイプ: 各ボリュームタイプの関連する設定を定義できます。デフォルトでは、すべてのボリュームタイプはパブリックであり、すべてのプロジェクト (テナント) で利用できますが、private のボリュームタイプを作成して、そのボリュームタイプへのアクセスを制御または制限できます。

    ボリュームタイプを使用すると、さまざまなレベルのボリュームパフォーマンスをユーザーに提供できます。ボリュームタイプには、以下のカスタマイズをさらに追加できます。

    • ボリュームが使用するバックエンド: サポートされるバックエンドごとにボリュームタイプを作成できます。ただし、バックエンドを指定しないボリュームタイプの場合は Block Storage スケジューラーが最適なバックエンドを選択します。
    • Block Storage バックエンドドライバーの設定可能なプロパティー: Extra Specs と呼ばれるキーと値のペアを使用して、ボリュームタイプに複数のバックエンドプロパティーを指定できます。
    • QoS (Quality of Service) 仕様: QoS 仕様を各ボリュームタイプに関連付けることで、ユーザーが作成したボリュームにパフォーマンス制限を適用できます。
  • ボリュームの暗号化: ユーザーが暗号化されたボリュームを作成できるように、暗号化されたボリュームタイプを作成できます。
  • デフォルトのボリュームタイプ: クラウドユーザーがボリュームタイプを指定せずにボリュームを作成した場合に、使用するボリュームタイプを指定できます。
  • ブロックストレージの一部の機能では、内部ブロックストレージプロジェクトまたはテナント (サービスプロジェクトとも呼ばれ、cinder-internal と呼ばれます) を作成する必要があります。
  • ボリュームとそのスナップショットを管理または管理解除する: 他のブロックストレージボリュームサービスからボリュームとそのスナップショットをインポートしたり、このブロックストレージボリュームサービスから削除したりできます。
注記

これらのカスタマイズ手順はすべて、ダッシュボードよりも早く、必要な設定が少なく、より多くのオプションを使用できる CLI を使用します。

3.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
  • Block Storage サービスの cinder CLI コマンドを使用するには、コマンドの実行前に、$ source ./cloudrc というコマンドで cloudrc ファイルを読み込みます。cloudrc ファイルが存在しない場合は、作成する必要があります。

3.2. ボリュームタイプの作成および設定

ボリュームタイプを作成して、関連する設定を各ボリュームタイプに適用できます。たとえば、ボリュームタイプを作成して、クラウドユーザーにさまざまなレベルのパフォーマンスを提供できます。

ボリュームタイプを作成した後、ボリュームのパフォーマンスをさらに設定する QoS(サービス品質) 仕様と関連付けることができます。詳細は、ブロックストレージサービス (cinder) の QoS 仕様のカスタマイズを 参照してください。

留意事項
  • ボリュームタイプの可視性: デフォルトでは、すべてのボリュームタイプが公開されており、すべてのプロジェクトからアクセスできます。アクセス制限付きのボリュームタイプを作成する必要がある場合は、プライベートボリュームタイプを作成してください。詳細は、プライベートボリュームタイプの作成と使用 を参照してください。
  • デプロイメントストラテジー: バックエンドの数が限られている小規模なデプロイメントの場合、volume_backend_name プロパティーを使用して、各バックエンドを対象とするボリュームタイプを作成できます。その場合、これらのボリュームタイプを使用するボリュームは、指定されたバックエンドでスケジュールされます。詳細は、ボリュームタイプの編集 に記載されている例を参照してください。

    バックエンドの数が多い大規模なデプロイメントの場合、このストラテジーは実行可能ではない可能性があります。この場合、設定されたスケジューラーフィルターに基づいて、ブロックストレージスケジューラーがボリュームに最適なバックエンドを決定する方が良いでしょう。

前提条件

  • ボリュームタイプを作成および設定できるプロジェクト管理者である。
  • ボリュームタイプに追加するバックエンドドライバー機能のキーの名前と必要な値を把握している。詳細は、バックエンドドライバー機能のリスト を参照してください。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. ボリュームタイプの作成と設定

    $ openstack volume type create --property <key>=<value> <volume_type_name>

    次のように、個別の --property <key>=<value> 引数を指定して、ボリュームタイプに必要なプロパティーを追加します。

    • <key> をプロパティーキーに置き換えます。キーのスペルが正しいことを確認してください。スペルが間違えていてもキーは追加されますが、機能しません。
    • <value><key> の必要な値に置き換えます。
    • <volume_type_name> をボリュームタイプの名前に置き換えます。

      以下に例を示します。

      $ openstack volume type create \
      --property thin_provisioning=true \
      --property compression=false \
      MyVolumeType
      +-------------+-----------------------------------------------+
      | Field       | Value                                         |
      +-------------+-----------------------------------------------+
      | description | None                                          |
      | id          | c244205c-fb22-4076-9780-edebe55889bc          |
      | is_public   | True                                          |
      | name        | MyVolumeType                                  |
      | properties  | compression='false', thin_provisioning='true' |
      +-------------+-----------------------------------------------+
  3. openstackclient Pod を終了します。

    $ exit

3.2.1. プライベートボリュームタイプの作成と使用

デフォルトでは、すべてのボリュームタイプはパブリックであり、すべてのプロジェクト (テナント) で利用できます。ボリュームタイプへのアクセスを制御または制限するには、private ボリュームタイプを作成します。

注記

デフォルトでは、プライベートのボリュームタイプには作成者のみがアクセスできます。ただし、すべての管理ユーザーはプライベートボリュームタイプを表示できます。

プライベートボリュームタイプは、特定の属性を持つボリュームへのアクセスを制限します。通常、これらは特定のプロジェクトでのみ使用できる設定です。たとえば、テスト中の新しいバックエンドや超高性能設定などです。

前提条件

  • ボリュームタイプを作成および設定できるプロジェクト管理者である。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 新しいプライベートボリュームタイプを作成します。

    $ openstack volume type create --private <volume_type_name>
    • <volume_type_name> を新しいプライベートボリュームタイプの名前に置き換えます。

      is_public フィールドが False に設定されているため、これがプライベートボリュームであることを確認できます。以下に例を示します。

      $ openstack volume type create --private MyVolType2
      +-------------+--------------------------------------+
      | Field       | Value                                |
      +-------------+--------------------------------------+
      | description | None                                 |
      | id          | 20659377-935d-4253-8b82-ae12c4710288 |
      | is_public   | False                                |
      | name        | MyVolType2                           |
      +-------------+--------------------------------------+
  3. オプション: プライベートおよびパブリックのボリュームタイプを表示します。

    $ openstack volume type list

    これにより、ボリュームタイプのテーブルが表示され、Is Public 列には、ボリュームタイプがプライベート (False) かパブリック (True) かが示されます。以下に例を示します。

    +--------------------------------------+-------------+-----------+
    | ID                                   | Name        | Is Public |
    +--------------------------------------+-------------+-----------+
    | 271f9b90-8186-4143-aaed-09e91820d852 | MyVolType3  | True      |
    | 20659377-935d-4253-8b82-ae12c4710288 | MyVolType2  | False     |
    | 28b5ca7f-0eb0-43ce-bf0a-898fab92d43b | MyVolType1  | True      |
    | 0875116b-27d6-493c-aca6-f62de4d58614 | __DEFAULT__ | True      |
    +--------------------------------------+-------------+-----------+

    ボリュームタイプにアクセスするには、ボリュームタイプの ID が必要なため、このテーブルにはパブリックおよびプライベートのボリュームタイプの名前と ID も表示されます。

  4. オプション: 必要なプロジェクトの ID を取得するプロジェクトを一覧表示します。

    $ openstack project list
  5. (オプション) プロジェクトがプライベートボリュームタイプにアクセスできるようにします。

    $ openstack volume type set <type_id> --project <project_id>
    • <type_id> は、必要なプライベートボリュームタイプの ID に置き換えます。
    • <project_id> を、このプライベートボリュームタイプにアクセスするプロジェクトの ID に置き換えます。

      注記

      プライベートのボリュームタイプへのアクセスは、プロジェクトレベルで許可されます。このプロジェクトのユーザーの名前のみがわかっている場合は、openstack user list コマンドを実行します。このコマンドは、設定されているすべてのユーザーの名前とテナント ID をリスト表示します。

  6. (オプション) プライベートのボリュームタイプにアクセス可能なプロジェクトを確認します。

    $ openstack volume type show <type_id>

    結果テーブルの access_project_ids フィールドには、このプライベートボリュームタイプにアクセスできるすべてのプロジェクトの ID が示されます。

  7. (オプション) プライベートボリュームタイプからプロジェクトアクセスを削除します。

    $ openstack volume type unset <type_id> --project <project_id>

    これは、openstack volume type show <type_id> を実行し、このプロジェクトが access_project_ids フィールドに指定されていないことで確認できます。

  8. openstackclient Pod を終了します。

    $ exit

3.2.2. バックエンドドライバー機能のリスト表示

ボリュームタイプを作成するときに、Block Storage バックエンドドライバーの設定可能なプロパティーまたは機能が公開され、Extra Specs と呼ばれるキーと値のペアを使用して設定されます。各バックエンドドライバーは、独自の Extra Specs のセットをサポートします。ドライバーがサポートする特定の Extra Specs の詳細は、バックエンドドライバーのドキュメントを参照してください。

ただし、管理者はいつでも Block Storage cinder-volume サービスのホストに直接クエリーを実行して、バックエンドドライバーの明確に定義された標準機能をリスト表示できます。

前提条件

  • Block Storage ホストに直接クエリーを実行するには、プロジェクト管理者である必要があります。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. cinder-volume サービスのホストを決定します。

    $ openstack volume service list

    このコマンドは、各 Block Storage サービス (cinder-backupcinder-schedulercinder-volume) のプロパティーをリスト表示します。以下に例を示します。

    +------------------+---------------------------+------+---------
    |      Binary      |            Host           | Zone |  Status ...
    +------------------+---------------------------+------+---------
    | cinder-scheduler | cinder-scheduler-0    | nova | enabled ...
    | cinder-backup    | cinder-backup-0   | nova | enabled ...
    | cinder-volume    | cinder-volume-lvm-iscsi-0@lvm | nova | enabled ...
    +------------------+---------------------------+------+---------

    Host 列には、各 Block Storage サービスのホストを指定します。ただし、cinder-volume サービスの Host 列には、host@volume_back_end_name の構文を使用してバックエンド名も表示されます。

  3. Block Storage cinder-volume サービスのバックエンドドライバー機能を表示します。

    $ openstack volume backend capability show <volsvchost>
    • <volsvchost> を、上記のテーブルに示されている cinder-volume のホストに置き換えます。以下に例を示します。

      $ openstack volume backend capability show cinder-volume-lvm-iscsi-0
      +-------------------+---------------------+---------+-------------------------+
      | Title             | Key                 | Type    | Description             |
      +-------------------+---------------------+---------+-------------------------+
      | Thin Provisioning | thin_provisioning   | boolean | Sets thin provisioning. |
      | Compression       | compression         | boolean | Enables compression.    |
      | QoS               | qos                 | boolean | Enables QoS.            |
      | Replication       | replication_enabled | boolean | Enables replication.    |
      +-------------------+---------------------+---------+-------------------------+

      Key 列には設定できる Extra Spec プロパティーが表示され、Type 列にはこれらのプロパティーに必要なデータ型または有効値が表示されます。

  4. openstackclient Pod を終了します。

    $ exit

3.2.3. ボリュームタイプの編集

ボリュームタイプにプロパティーを追加したり、既存のプロパティーの値を変更したりすることで、ボリュームタイプを編集できます。ただし、ボリュームタイプを編集できるのは、そのボリュームタイプが使用されていない場合に限ります。

不要になったボリュームタイプは、openstack volume type delete <volume_type_name> コマンドを使用して削除することもできます。

前提条件

  • プロジェクト管理者であり、ボリュームタイプを編集できる。
  • ボリュームタイプに追加するバックエンドドライバー機能のキーの名前と必要な値を把握している。詳細は、バックエンドドライバー機能のリスト を参照してください。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. ボリュームタイプのプロパティーを追加または変更することで、ボリュームタイプを編集します。openstack volume type list コマンドを使用すると、設定済みのボリュームタイプのリストを表示できます。

    $ openstack volume type set --property <key>=<value> <existing_volume_type_name>
    • <key> をプロパティーキーに置き換えます。<key> のスペルが正しいことを確認してください。スペルミスのあるキーは追加されますが、機能しません。
    • <value><key> の必要な値に置き換えます。
    • <existing_volume_type_name> を ボリュームタイプの名前に置き換えてください。
  3. オプション: ボリュームタイプを特定のブロックストレージサービス (cinder) バックエンドを対象とするように設定するには、volume_backend_name プロパティーを設定します。

    openstack volume backend pool list コマンドを使用すると、利用可能なバックエンド名を表示できます。このコマンドは、host@volume_backend_name#pool という構文を使用します。

    以下に例を示します。

    $ openstack volume type set --property volume_backend_name=lvm MyVolumeType
  4. オプション: ボリュームタイプを複数のブロックストレージサービス (cinder) バックエンドに関連付けるには、最初のバックエンド名を含め、各バックエンド名の前に論理演算子 <or> を使用します。この方法を用いると、バックエンドの名前を変更したり、バックエンドごとに個別のボリュームタイプを作成したりする代わりに、単一のボリュームタイプで複数のバックエンドを対象とすることができます。

    たとえば、ボリュームタイプを 2 つの異なるバックエンドを対象とするように設定するには、次のようにします。

    $ openstack volume type set \
      --property "volume_backend_name=<or> <back_end_1> <or> <back_end_2>" <volume_type_1>
    • <back_end_1><back_end_2> を、ご使用のバックエンドの名前に置き換えてください。
    • <volume_type_1> を ボリュームタイプの名前に置き換えてください。このボリュームタイプで作成されたボリュームは、指定されたいずれかのバックエンドでスケジュール設定できます。
  5. オプション: openstack volume type set コマンドでは、プロパティーの変更が成功したかどうかの確認は提供されません。次のコマンドを実行して、このボリュームタイプに加えられた変更を確認してください。

    $ openstack volume type show <volume_type_name>

    このコマンドは、このボリュームタイプの詳細な設定を示すテーブルを表示し、properties フィールドには設定されたすべてのプロパティーが表示されます。以下に例を示します。

    $ openstack volume type show MyVolumeType
    +--------------------+--------------------------------------------------------------------------+
    | Field              | Value                                                                    |
    +--------------------+--------------------------------------------------------------------------+
    | access_project_ids | None                                                                     |
    | description        | None                                                                     |
    | id                 | c244205c-fb22-4076-9780-edebe55889bc                                     |
    | is_public          | True                                                                     |
    | name               | MyVolumeType                                                             |
    | properties         | compression='false', thin_provisioning='true', volume_backend_name='lvm' |
    | qos_specs_id       | None                                                                     |
    +--------------------+--------------------------------------------------------------------------+
  6. openstackclient Pod を終了します。

    $ exit

3.2.4. プロジェクト固有のデフォルトボリュームタイプの設定

ボリュームを作成し、ボリュームタイプを指定しない場合、Block Storage サービス (cinder) はデフォルトのボリュームタイプを使用します。Block Storage サービスの初回設定時に、default_volume_type パラメーターを使用して、すべてのプロジェクトに適用される汎用デフォルトボリュームタイプを定義できます。デフォルトでは、このボリュームタイプは __DEFAULT__ と呼ばれます。詳細は、永続ストレージの設定初期 Block Storage サービスのデフォルトを設定する を参照してください。

デプロイメントでプロジェクト固有のボリュームタイプを使用する場合は、必ずプロジェクトごとにデフォルトのボリュームタイプを定義してください。この場合、Block Storage は、一般的なデフォルトのボリュームタイプではなく、プロジェクト固有のボリュームタイプを使用します。次のデプロイメントタイプには、プロジェクト固有のデフォルトボリュームタイプが必要です。

  • 多数のアベイラビリティーゾーン (AZ) にまたがる分散デプロイメント。各 AZ は独自のプロジェクトにあり、独自のボリュームタイプがあります。
  • 複数部門のコーポレートデプロイメント。各部門は独自のプロジェクトにあり、独自の専門的なボリュームタイプがあります。

前提条件

  • プロジェクト固有のデフォルトのボリュームタイプとなる各プロジェクトの少なくとも 1 つのボリュームタイプ。詳細は、ボリュームタイプの作成および設定 を参照してください。
  • Block Storage REST API マイクロバージョン 3.62 以降。
  • プロジェクト管理者のみが、プロジェクトのデフォルトのボリュームタイプを定義、クリア、または一覧表示できます。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
    $ source ./cloudrc
  2. プロジェクトのデフォルトボリュームタイプを設定します。

    $ cinder --os-volume-api-version 3.62 default-type-set <volume_type> <project_id>
    • <volume_type> を、必要なボリュームタイプの名前または ID に置き換えます。ボリュームタイプの名前と ID を見つけるには、volume type list コマンドを使用します。
    • <project_id> を適切なプロジェクトの ID に置き換えます。プロジェクト ID を見つけるには、openstack project list コマンドを使用します。
  3. (オプション) プロジェクトのデフォルトボリュームタイプを削除します。

    $ cinder --os-volume-api-version 3.62 default-type-unset <project_id>
    • <project_id> を適切なプロジェクトの ID に置き換えます。プロジェクト ID を見つけるには、openstack project list コマンドを使用します。
  4. (オプション) プロジェクトのデフォルトボリュームタイプをリスト表示します。

    $ cinder --os-volume-api-version 3.62 default-type-list --project <project_id>
    • <project_id> を適切なプロジェクトの ID に置き換えます。プロジェクト ID を見つけるには、openstack project list コマンドを使用します。
  5. openstackclient Pod を終了します。

    $ exit

3.3. ブロックストレージサービスのボリューム暗号化の設定

機密データを保護するために、暗号化されたボリュームを作成します。暗号化ボリュームを作成するには、暗号化プロバイダー、暗号方式、キーサイズ、およびボリュームの制御場所を指定する暗号化ボリュームタイプを設定します。

前提条件

  • プロジェクト管理者であり、暗号化ボリュームを作成できる。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 暗号化されたボリュームタイプを作成します。

    $ openstack volume type create --encryption-provider <provider_name> --encryption-cipher <cipher_name> --encryption-key-size <key_size> --encryption-control-location <control_location> <encrypted_volume_type_name>
    • <provider_name>luks 暗号化プロバイダーに置き換えます。
    • <cipher_name>aes-xts-plain64 暗号化暗号に置き換えます。
    • <key_size>256 暗号鍵サイズに置き換えます。
    • <control_location>front-end に置き換えます。これにより、ボリュームがコンピュートノードに接続されたときに Compute サービス (nova) が暗号化を実行します。
    • <encrypted_volume_type_name> を、暗号化されたボリュームタイプに使用する名前に置き換えます。

      以下に例を示します。

      openstack volume type create --encryption-provider luks --encryption-cipher aes-xts-plain64 --encryption-key-size 256 --encryption-control-location front-end MyEncryptedVolType

      暗号化されたボリュームタイプの結果テーブルには、encryption_id を示す追加の encryption フィールドがあります。この例での encryption フィールドの値は、cipher='aes-xts-plain64', control_location='front-end', encryption_id='039c8b02-2e15-41fa-899d-6e2a555b7fc8', key_size='256', provider='luks' です。

  3. openstackclient Pod を終了します。

    $ exit

次のステップ

暗号化されたボリュームタイプから暗号化されたボリュームを作成します。

3.4. マルチアタッチブロックストレージボリュームの設定

Block Storage (cinder) ボリュームを複数のインスタンスに同時にアタッチするには、このボリュームをマルチアタッチボリュームタイプから作成するか、このボリュームをマルチアタッチボリュームタイプに変更する必要があります。これらの複数インスタンスは、このボリュームとの間でデータの読み取りとデータの書き込みを同時に実行できます。

警告

複数インスタンスからの書き込み操作を管理するには、マルチアタッチまたはクラスター対応のファイルシステムを使用する必要があります。それ以外の設定では、データの破損が生じます。

たとえば、NFS バックエンドにマルチアタッチボリュームを作成して、続いてこのボリュームを共有ストレージとして使用できる複数のインスタンスにアタッチできます。

マルチアタッチボリュームの制限
  • Block Storage (cinder) バックエンドドライバーは、マルチアタッチボリュームをサポートしている必要があります。Ceph RBD ドライバーがサポートされます。multiattach ボリュームプロパティーがベンダープラグインでサポートされていることを確認するには、Red Hat Support チームにお問い合わせください。ベンダープラグインの認定に関する詳細は、https://catalog.redhat.com/search?searchType=software&target_platforms=Red%20Hat%20OpenStack%20Platform&p=1&subcategories=Storage を参照してください。
  • マルチアタッチのボリュームを接続する場合、一部のハイパーバイザーでは、キャッシュを無効にする場合など、特別な考慮が必要になります。
  • 読み取り専用のマルチアタッチボリュームはサポートされていません。
  • multi-attached ボリュームを持つインスタンスをライブマイグレーションすることはできますが、multi-attach ボリュームをライブマイグレーションすることはできません。
  • マルチアタッチボリュームの暗号化はサポートされていません。
  • マルチアタッチボリュームは、ベアメタルプロビジョニングサービス (ironic) virt ドライバーではサポートされていません。マルチアタッチボリュームは、libvirt virt ドライバーでのみサポートされます。
  • ボリュームが使用されておらず、そのステータスが available の場合、このボリュームをマルチアタッチ対応タイプに変更したり、マルチアタッチ対応ボリュームを複数インスタンスにアタッチできないタイプに変更したりできます。
  • マルチアタッチを有効にしてブート可能なボリュームを作成することはできますが、同じブート可能なボリュームを複数のインスタンスにアタッチすることはできません。
  • アタッチされたボリュームを、マルチアタッチタイプから非マルチアタッチタイプ、または非マルチアタッチタイプからマルチアタッチタイプに変更することはできません。
  • アタッチされたボリュームの移行中に、複数の読み取り/書き込みアタッチメントを持つマルチアタッチボリュームをソースボリュームまたは宛先ボリュームとして使用することはできません。
  • 見送られていたオフロードされたインスタンスにマルチアタッチボリュームをアタッチすることはできません。
  • 同じマルチアタッチボリュームにアタッチされたインスタンスに対し、作成やサイズ変更などの API 呼び出しを同時に実行すると、失敗する可能性があります。詳細は、https://access.redhat.com/solutions/7077470 を参照してください。

前提条件

  • マルチアタッチボリュームタイプを作成するには、プロジェクト管理者でなければなりません。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. マルチアタッチボリュームタイプを作成します。

    $ openstack volume type create --property multiattach="<is> True" <multi-attach_volume_type_name>
    • <multi-attach_volume_type_name> を、マルチアタッチボリュームタイプの名前に置き換えます。
  3. openstackclient Pod を終了します。

    $ exit

次のステップ

マルチアタッチボリュームタイプからボリュームを作成し、このボリュームを複数のインスタンスにアタッチします。

3.5. ブロックストレージサービスの内部プロジェクトを作成する

一部の Block Storage 機能では、サービスプロジェクトとも呼ばれる内部 Block Storage プロジェクトまたはテナント (つまり cinder-internal) が必要です。

Block Storage サービス (cinder) は、このプロジェクトを使用してサービスが作成するリソースを管理し、リソースがユーザーのプロジェクトクォータ制限に対してカウントされないようにします。たとえば、頻繁なボリューム複製や移行中のボリュームの一時コピーのためにイメージがキャッシュされる場合に作成されるボリュームなどです。

この cinder-internal プロジェクトもデフォルトのプロジェクトクォータの影響を受けるため、このプロジェクトの volumes クォータ (デフォルトでは最大 10 ボリュームに制限されています) を調整する必要があります。volumes クォータ制限を無制限 (-1) に設定するか、使用可能なボリュームストレージを効果的に使用できるように 50 などの数値を指定することができます。また、このプロジェクト用に作成されるボリュームの最大サイズをギガバイト単位で制限する gigabytes クォータ (デフォルト設定は 1000) を変更する必要がある場合もあります。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 次のように、cinder-internal という名前の汎用プロジェクトとユーザーを作成します。

    $ openstack project create --enable --description "Block Storage Internal Project" cinder-internal
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Block Storage Internal Project   |
    | domain_id   | default                          |
    | enabled     | True                             |
    | id          | 670615550a5d4126b22953f76f380397 |
    | is_domain   | False                            |
    | name        | cinder-internal                  |
    | options     | {}                               |
    | parent_id   | default                          |
    | tags        | []                               |
    +-------------+----------------------------------+
    $ openstack user create --project cinder-internal cinder-internal
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | default_project_id  | 670615550a5d4126b22953f76f380397 |
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | a6b3576f345346a590f2c8292f5cbd60 |
    | name                | cinder-internal                  |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
  3. この cinder-internal プロジェクトに対して Block Storage サービスが作成できるボリュームの最大数を変更します。

    $ openstack quota set --volumes <maxnum> cinder-internal
    • <maxnum> を、Block Storage サービスがこの cinder-internal プロジェクトに対して作成できるボリュームの最大数に置き換えます。
  4. オプション: Block Storage サービスが、この cinder-internal プロジェクト用に作成できるすべてのボリュームの最大合計サイズを変更します。

    $ openstack quota set --gigabytes <maxgb> cinder-internal
    • <maxgb> を、Block Storage サービスがこの cinder-internal プロジェクト用に作成できるボリュームの最大合計サイズ (ギガバイト単位) に置き換えます。
  5. openstackclient Pod を終了します。

    $ exit

3.6. ブロックストレージイメージボリュームキャッシュ機能の設定

Block Storage サービス (cinder) で Image-Volume キャッシュを有効にすると、頻繁に使用されるイメージからのボリュームの作成速度が向上します。

Image-Volume キャッシュを有効にすると、イメージから初めてボリュームを作成するときに、イメージボリュームのコピーが内部 Block Storage プロジェクト (cinder-internal) にキャッシュされます。それ以降のイメージからボリュームを作成するリクエストでは、元のイメージの内容をダウンロードしてボリュームにデータをコピーするのではなく、キャッシュされたコピーが複製されます。

バックエンドごとに Image-Volume キャッシュを設定できます。サードパーティーのバックエンドを使用している場合は、Image-Volume キャッシュのサポートに関する情報については、ストレージベンダーのドキュメントを参照してください。

Image-Volume キャッシュの制限は、サイズ (GB 単位)、イメージ数、またはその両方で設定できます。

前提条件

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、cinder-internal プロジェクトとプロジェクトユーザーの識別子を cinder テンプレートに追加します。この例では、Block Storage サービスのバックエンドとして Red Hat Ceph Storage を使用しています。

    以下に例を示します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
      extraMounts:
        ...
      cinder:
        template:
          cinderVolumes:
            ceph:
              customServiceConfig: |
                [DEFAULT]
                cinder_internal_tenant_project_id = <project_id>
                cinder_internal_tenant_user_id = <user_id>
                ...
    • <project_id> は、cinder-internal プロジェクトの ID に置き換えます。
    • <user_id> は、cinder-internal プロジェクトユーザーの ID に置き換えます。
  2. 次のパラメーターを追加して、Image-Volume キャッシュを有効にし、キャッシュのサイズ制限とキャッシュに保存できるイメージの最大数を設定します。

    以下に例を示します。

    ...
              customServiceConfig: |
                [DEFAULT]
                ...
                [ceph]
                image_volume_cache_enabled = True
                image_volume_cache_max_size_gb = <max_size>
                image_volume_cache_max_count = <max_number>
    ...
    • <max_size> は、キャッシュのサイズ制限 (GB 単位) に置き換えます。
    • <max_number> は、キャッシュに保存するイメージの最大数に置き換えます。
  3. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  4. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

3.7. ブロックストレージバックエンドを使用したボリュームフロムイメージ最適化

イメージサービス (Glance) のバックエンドとしてブロックストレージサービス (Cinder) を使用する場合、イメージのダウンロードではなく、バックエンドによるクローン作成によってイメージからのボリューム作成を最適化できます。

ブロックストレージバックエンドにイメージボリュームとして保存されているイメージから起動可能なボリュームを作成すると、ボリューム作成プロセスによってストレージバックエンドレベルでイメージボリュームが複製されます。このバックエンド支援型クローニングは、イメージサービスからイメージデータをダウンロードして新しいボリュームにコピーするという従来の方法よりも大幅に高速です。

Red Hat OpenStack Services on OpenShift (RHOSO) 環境では、ブロックストレージサービスは、allowed_direct_url_schemes パラメーターがデフォルトで cinder に設定された状態で設定されています。この設定により、サービスはイメージがブロックストレージボリュームとして保存されていることを検知し、バックエンド支援によるクローン作成を使用して起動可能なボリュームを作成できるようになります。

イメージサービスへのボリュームアップロードのパフォーマンスを向上させるために、イメージへのアップロード最適化を有効にすることもできます。

要件
  • イメージは RAW 形式と ベア コンテナー形式を使用する必要があります。
  • ボリュームはイメージと同じプロジェクト内に作成する必要があります。
  • イメージボリュームと保存先ボリュームは、同じストレージプール上に存在する必要があります。ブロックストレージサービスは 、バックエンド # プール 識別子に基づいてボリュームを照合します。たとえば、両方のボリュームは cinder-volume-host@backend#pool_name 上に存在する必要があります。
  • ストレージバックエンドは、効率的なボリュームクローニングをサポートする必要があります。NetApp ONTAP、Dell PowerFlex、およびクローン機能を備えたその他のバックエンドを含む、ほとんどのバックエンドがこの最適化をサポートしています。
  • イメージサービスが複数のボリュームを同時に作成する環境では、最適な結果を得るために、マルチアタッチ対応のボリュームタイプを使用してください。
制限事項
  • 複数のプールが存在する分散環境では、システムは同じプール内のボリュームに対してのみ、イメージを効率的にクローンできます。異なるプールで作成されたボリュームは、最初のボリューム作成時には従来のダウンロード方式を使用しますが、それ以降の作成時にはイメージボリュームキャッシュ機能の恩恵を受けることができます。

3.8. イメージアップロード最適化の設定

ブロックストレージサービス (cinder) でイメージへのアップロード最適化を有効にすると、ボリュームをイメージサービス (glance) にアップロードする際のパフォーマンスが向上します。

この最適化を有効にすると、イメージへのアップロード操作では、データを転送する代わりに、クローンボリュームが作成され、その場所がイメージサービスに登録されます。これにより、アップロード操作のパフォーマンスが大幅に向上します。

前提条件

手順

  1. OpenStackControlPlane の CR ファイル (openstack_control_plane.yaml) を開き、ブロックストレージのバックエンド設定に image_upload_use_cinder_backend パラメーターを追加します。この例では、イメージサービスはバックエンドとしてブロックストレージサービスを使用し、ブロックストレージサービスはバックエンドとして Red Hat Ceph Storage を使用します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
      cinder:
        template:
          cinderVolumes:
            ceph:
              customServiceConfig: |
                [DEFAULT]
                cinder_internal_tenant_project_id = <project_id>
                cinder_internal_tenant_user_id = <user_id>
                [ceph]
                image_upload_use_cinder_backend = True
                image_upload_use_internal_tenant = True
    ...
    • <project_id> は、cinder-internal プロジェクトの ID に置き換えます。
    • <user_id> は、cinder-internal プロジェクトユーザーの ID に置き換えます。
    • 最適化を有効にするには、image_upload_use_cinder_backend をTrue に設定してください。
    • image_upload_use_internal_tenantTrue に設定すると、イメージボリュームがユーザーのプロジェクトではなく、cinder-internal プロジェクトに保存されます。
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

3.9. バックエンド間でボリュームを移行する

アベイラビリティーゾーン (AZ) 内のバックエンド間、および AZ をまたぐバックエンド間でボリュームを移行できます。

高度にカスタマイズされたデプロイメントの場合や、ストレージシステムを廃止する必要のある状況では、管理者はボリュームを移行できます。どちらのユースケースでも、複数のストレージシステムが同じ volume_backend_name プロパティーを共有しているか、このプロパティーが定義されていません。

移行済みボリュームの制限事項
  • ボリュームは複製できません。
  • 移行先バックエンドは、ボリュームの現在のバックエンドとは異なる必要があります。
  • 既存のボリュームタイプは、新規バックエンドに対して有効である必要があります。つまり、以下を満たしている必要があります。

    • ボリュームタイプには volume_backend_name が定義されていないか、両方の Block Storage バックエンドが同じ volume_backend_name で設定されている必要があります。
    • どちらのバックエンドも、シンプロビジョニングのサポート、シックプロビジョニングのサポート、またはその他の機能設定など、ボリュームタイプで設定した同じ機能をサポートする。
注記

ボリュームをあるバックエンドから別のバックエンドに移動するには、非常に多くの時間とリソースが必要になる場合があります。詳細は、ボリューム移動時の制限とパフォーマンス制約 を参照してください。

前提条件

  • ボリュームを移行するには、プロジェクト管理者である必要があります。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 宛先バックエンドの名前を取得します。

    $ openstack volume backend pool list

    host@volume_backend_name#pool という構文を使用する宛先バックエンド名がリスト表示されます。以下に例を示します。

    +--------------------------------+
    | Name                           |
    +--------------------------------+
    | cinder-volume-lvm-0@lvm#lvm    |
    | cinder-volume-lvm2-0@lvm2#lvm2 |
    +--------------------------------+
  3. ボリュームをあるバックエンドから別のバックエンドに移行します。

    $ openstack volume migrate --host <new_back_end_host>  <volume>
    • <volume> を、元のバックエンドのボリューム ID または名前に置き換えます。
    • <new_back_end_host> を、宛先バックエンドのホストに置き換えます。
  1. openstackclient Pod を終了します。

    $ exit

3.9.1. ボリューム移動時の制限とパフォーマンス制約

Red Hat は、同一または異なるアベイラビリティーゾーン (AZ) にあるバックエンド間のボリュームの移動をサポートします。その場合、以下の制約があります。

  • 移動するには、ボリュームのステータスが available または in-use でなければなりません。
  • in-use ボリュームのサポートはドライバーに依存します。
  • ボリュームにはスナップショットを含めることができません。
  • ボリュームはグループに属することはできません。
3.9.1.1. 利用可能なボリュームの移動

すべてのバックエンド間で available ボリュームを移動できますが、パフォーマンスは使用するバックエンドにより異なります。

移住支援
多くのバックエンドは、アシスト付き移行をサポートします。アシスト付き移行により、バックエンドはソースバックエンドから移行先バックエンドへのデータの移動を最適化しますが、両方のバックエンドが同じベンダーから取得されている必要があります。Red Hat は、マルチプールバックエンドを使用する場合、または RBD などのシングルプールバックエンドに cinder の移行操作を使用する場合のみ、バックエンドアシスト付き移行をサポートしています。バックエンドのアシスト付き移行のサポートの詳細は、ベンダーにお問い合わせください。
一般的な移行
バックエンド間のアシスト付き移行ができない場合には、Block Storage サービスは通常のボリューム移行を実行します。一般的なボリューム移行では、ブロックストレージサービスがソースボリュームからコントローラーノードへ、そしてコントローラーノードから宛先ボリュームへデータを移動する前に、両方のバックエンドのボリュームが接続されている必要があります。Block Storage サービスは、ソースおよび宛先のバックエンドのストレージの種類に関わらず、プロセスをシームレスに実行します。通常のボリューム移行を実行する前に、十分な帯域幅を確保してください。通常のボリューム移行にかかる時間は、ボリュームのサイズと直接比例するため、操作はアシスト付き移行よりも遅くなります。
3.9.1.2. 使用中のボリュームの移動

in-use ボリュームを移動する場合、最適化のオプションまたはアシスト付きのオプションはありません。in-use ボリュームを移行する場合には、Compute サービス (nova) がハイパーバイザーを使用して、移行元バックエンドのボリュームから移行先バックエンドのボリュームにデータを転送する必要があります。これには、ボリュームが使用されているインスタンスを実行するハイパーバイザーとの連携が必要です。

ブロックストレージサービスとコンピュートサービスは連携してこの操作を実行します。データが Compute ノードを介してあるボリュームから別のボリュームにコピーされるため、Compute サービスがほとんどの作業を管理します。

使用中の ボリュームを移動する際には、以下の制限があります。

  • 使用中のマルチアタッチボリュームは、複数の nova インスタンスに接続している間は移動できません。
  • 非ブロックデバイスはサポートされていないため、ターゲットバックエンドのストレージプロトコルは iSCSI、ファイバーチャネル (FC)、RBD、NVMe/TCP に制限されます。
  • in-use ボリュームを移動する前に、十分な帯域幅を確保してください。この操作にかかる時間は、ボリュームのサイズと直接比例するため、操作はアシスト付き移行よりも遅くなります。

3.10. ボリュームとそのスナップショットの管理と管理解除

cinder manage コマンドと cinder unmanage コマンドを使用して、Block Storage ボリュームサービス (cinder-volume) にボリュームを追加したり、このサービスからボリュームを削除したりできます。これらのコマンドを使用して、アップグレード中にデプロイメント間でボリュームを移動したり、既存のストレージボリュームをブロックストレージサービスにインポートしたりできます。

ブロックストレージボリュームサービスは通常、作成したボリュームを管理し、それらを追跡してリスト表示、添付、削除できるようにします。しかし、この管理関係はあなたがコントロールできます。

使用シナリオ
  • 並行アップグレード: 古いデプロイメントからボリュームとスナップショットの管理を解除し、新しいデプロイメントで管理することで、アップグレード中にデプロイメント間でボリュームを移動します。これにより、両方のバージョンを実行したままボリュームを移行できます。
  • 既存ストレージのインポート: cinder manage を使用して、ベアメタルストレージアレイからボリュームをクラウドにインポートし、ブロックストレージサービスに追加します。
制限事項
  • 暗号化されたボリュームは、管理することも管理解除することもできません。
ボリュームとスナップショットの管理
cinder manage を 使用して、既存のボリュームをブロックストレージサービス管理に追加します。ボリュームを管理した後、cinder snapshot-manage を使用してそのスナップショットを追加できます。
ボリュームとスナップショットの管理解除
ブロックストレージサービス管理からボリュームを削除するには、cinder unmanage を 使用します。ボリュームはストレージバックエンドに残りますが、サービスによる追跡は行われなくなります。ボリュームの管理を解除する前に、まず cinder snapshot-unmanage を使用して、そのボリュームのすべてのスナップショットの管理を解除する必要があります。
管理可能なリソースのリスト
cinder manageable-list を使用して、現在ブロックストレージサービスによって管理されていないストレージアレイ上のボリュームを特定します。これらは通常、ストレージアレイ上で管理されていない、または手動で作成されたボリュームです。管理対象外のスナップショットをリスト表示するには、cinder snapshot-manageable-list を使用してください。
コマンド構文に関する考慮事項
cinder manage コマンドcinder snapshot-manage コマンドは、ボリューム識別プロパティーがバックエンドによって異なるため、バックエンド固有の構文を使用します。ほとんどのバックエンドは 、ソース名ソース ID、またはその両方をサポートしています。一部のバックエンドでは、追加のプロパティーが必要になります。一部のバックエンドでは、管理可能なボリュームと渡す必要があるパラメーターをリストできます。この情報を提供しないバックエンドについては、ストレージベンダーのドキュメントを参照して具体的な要件を確認してください。cinder unmanage コマンドcinder snapshot-unmanage コマンドはバックエンド固有のものではなく、ボリューム名または ID のみが必要です。

3.11. プロジェクトクォータの表示と変更

各プロジェクト (tenant) の以下の Block Storage リソースクォータ制限を変更または表示できます。

  • volumes: 各プロジェクトに許可されるボリュームの数を示します。デフォルト値は 10 です。
  • snapshots: 各プロジェクトに許可されるスナップショットの数を示します。デフォルト値は 10 です。
  • gigabytes: 各プロジェクトのボリュームに対して許可されるストレージの合計量をギガバイトで示します。これには、スナップショットに許可されるストレージも含まれます。デフォルト値では、スナップショットのサイズもこの 1000 GB の制限にカウントされます。

    注記

    Block Storage の初期パラメーター値である no_snapshot_gb_quota のデフォルト値には、gigabytes クォータに対してスナップショットに割り当てられたストレージが含まれます。詳細は、永続ストレージの設定初期 Block Storage サービスのデフォルトを設定する を参照してください。

  • per-volume-gigabytes: 各ボリュームの最大サイズ (ギガバイト単位)。デフォルトは -1 で、このクォータが指定されていないことを意味します。

各プロジェクトの Block Storage リソースクォータの使用量を取得できます。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
    $ source ./cloudrc
  2. オプション: 必要なプロジェクトの ID または名前を取得するプロジェクトを一覧表示します。

    $ openstack project list
  3. 特定プロジェクトの Block Storage リソースクォータに対する現在の制限を表示します。

    $ openstack quota show <project>
    • <project> を必要なプロジェクトの ID または名前に置き換えます。

      指定したプロジェクトの全リソースクォータの制限が表示されます。

      このプロジェクトの各ボリュームタイプは、独自のボリューム、ギガバイト、およびスナップショットクォータを提供します。これらはデフォルトでは指定されていません。つまり、Limit-1 に設定されています。これら 3 つのボリュームタイプクォータには、ボリュームタイプ名が接尾辞として追加されています。たとえば、デフォルトのボリュームタイプ __DEFAULT__ には、volumes___DEFAULT__gigabytes___DEFAULT__snapshots___DEFAULT__ のクォータが関連付けられています。

      $ openstack quota show c2c1da89ed1648fc8b4f35a045f8d34c
      +-----------------------+-------+
      | Resource              | Limit |
      +-----------------------+-------+
      ...
      | volumes               |    10 |
      | snapshots             |    10 |
      | gigabytes             |  1000 |
      ...
      | volumes___DEFAULT__   |    -1 |
      | gigabytes___DEFAULT__ |    -1 |
      | snapshots___DEFAULT__ |    -1 |
      ...
      | per-volume-gigabytes  |    -1 |
      +-----------------------+-------+
  4. オプション: すべての Block Storage ボリュームの合計サイズを変更します。no_snapshot_gb_quota の Block Storage 初期パラメーターには、ユーザーがプロジェクトに作成できるスナップショットのサイズが含まれています。

    $ openstack quota set --gigabytes <totalgb> <project>
    • <totalgb> を、ユーザーがこのプロジェクト用に作成できる Block Storage ボリューム (および、該当する場合はスナップショット) の合計サイズ (ギガバイト単位) に置き換えます。
  5. オプション: ユーザーがプロジェクト用に作成できる Block Storage ボリュームの最大数を変更します。

    $ openstack quota set --volumes <maxvolumes> <project>
    • <maxvolumes> を、ユーザーがこのプロジェクト用に作成できる最大ボリューム数に置き換えます。
  6. オプション: ユーザーがプロジェクト用に作成できる Block Storage ボリュームの最大サイズを変更します。

    $ openstack quota set --per-volume-gigabytes <maxsize> <project>
    • <maxsize> を、ユーザーがこのプロジェクト用に作成できる Block Storage ボリュームの最大サイズ (ギガバイト単位) に置き換えます。
  7. オプション: ユーザーがプロジェクト用に作成できる Block Storage ボリュームスナップショットの最大数を変更します。

    $ openstack quota set --snapshots <maxsnapshots> <project>
    • <maxsnapshots> を、ユーザーがこのプロジェクト用に作成できるスナップショットの最大数に置き換えます。
  8. オプション: これらの Block Storage リソースクォータの使用状況を表示し、必要に応じて特定プロジェクトの制限に対する変更を確認します。

    $ cinder quota-usage <project_id>
    • <project_id> をプロジェクトの ID に置き換えます。

      このテーブルで、該当するプロジェクトの Block Storage リソースクォータを指定する行を見つけます。このテーブルには、各ボリュームタイプに定義されたクォータも含まれます。このテーブルで、以下に示す列を確認します。

    • In_use 列は、各リソースがどれだけ使用されているかを示します。
    • Limit 列には、クォータ制限がデフォルト設定から調整されているかどうかが示されます。この例では、すべてのクォータ制限が調整されています。

      $ cinder quota-usage c2c1da89ed1648fc8b4f35a045f8d34c
      +-----------------------+--------+----------+-------+-----------+
      | Type                  | In_use | Reserved | Limit | Allocated |
      +-----------------------+--------+----------+-------+-----------+
      ...
      | gigabytes             | 750    | 0        | 1500  |           |
      | gigabytes___DEFAULT__ | 0      | 0        | -1    |           |
      | groups                | 0      | 0        | 10    |           |
      | per_volume_gigabytes  | 0      | 0        | 300   |           |
      | snapshots             | 1      | 0        | 7     |           |
      | snapshots___DEFAULT__ | 0      | 0        | -1    |           |
      | volumes               | 5      | 0        | 15    |           |
      | volumes___DEFAULT__   | 0      | 0        | -1    |           |
      +-----------------------+--------+----------+-------+-----------+
  9. openstackclient Pod を終了します。

    $ exit

3.12. ブロックストレージのボリューム変更通知を有効にする

ボリュームのライフサイクル中に発生するさまざまなイベントについて、Block Storage サービス (cinder) で通知を有効にできます。

これらの通知は、次の目的で使用できるテレメトリーデータを供給します。

  • 監査、トラブルシューティング、監視操作
  • メトリクスの収集と処理のために Ceilometer などの他のサービスと統合する

Block Storage サービスは、設定済みのメッセージキューへの通知配信に RabbitMQ メッセージブローカーソフトウェアを使用します。サービスは、コントロールプレーンレベルで設定されたグローバルな notificationBus 設定を継承します。この手順は、グローバル設定とは異なる、このサービス専用の RabbitMQ クラスターを設定する必要がある場合にのみ使用してください。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、cinder テンプレートに notificationsBus パラメーターを追加して、トランスポート URL を要求する際に使用する RabbitMQ クラスター名を指定します。

    注記

    notificationsBusInstance パラメーターは非推奨です。notificationsBusInstance を使用している既存のデプロイメントは、自動的に notificationsBus インターフェイスを使用するように移行されます。

    kind: OpenStackControlPlane
    spec:
    ...
      cinder:
        template:
          ...
          notificationsBus:
            cluster: rabbitmq
          customServiceConfig: |
    ...

    通知を無効にするには、cinder テンプレートから notificationsBus パラメーターを削除し、コントロールプレーンを更新してください。

  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. Red Hat OpenShift Container Platform (RHOCP) が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

3.13. cloudrc ファイルの作成

openstackclient Pod 内では、ブロックストレージサービス (cinder) に対して openstack または cinder クライアントコマンドを使用できます。ただし、Cinder クライアントコマンドを使用する場合は、openstackclient Pod 上に cloudrc ファイルを作成する必要があります。作成した cloudrc ファイルは、openstackclient Pod の存続期間中保持されます。

手順

  • cloudrc ファイル が存在しない場合、または読み込めない場合は、以下のコマンドを使用して作成してください。

    $ oc rsh openstackclient bash -c '
    cat .config/openstack/* | while read key val; do
        case $key in
            "auth_url:") var=OS_AUTH_URL ;;
            "username:") var=OS_USERNAME ;;
            "password:") var=OS_PASSWORD ;;
            "project_name:") var=OS_PROJECT_NAME ;;
            "project_domain_name:") var=OS_PROJECT_DOMAIN_NAME ;;
            "user_domain_name:") var=OS_USER_DOMAIN_NAME ;;
            *) var="" ;;
        esac
        [ -z "$var" ] || echo "export ${var}=${val}"
    done > cloudrc
    '

第4章 ブロックストレージサービス (Cinder) の QoS 仕様のカスタマイズ

ボリュームの種類ごとに QoS(サービス品質) 仕様を作成することで、ボリュームのパフォーマンスを制御できます。ワークロードごとに異なるパフォーマンスレベルを設定し、リソースの使用を最適化し、クラウドユーザーに予測可能なパフォーマンスを提供します。たとえば、実稼働環境のワークロードには高い IOPS 制限を設定し、開発環境には低い制限を設定することで、リソースを節約できます。

QoS 仕様では、コンシューマーとプロパティーキーを使用してパフォーマンスの制限を定義します。コンシューマーは制限を適用する場所 (フロントエンド、バックエンド、またはその両方) を決定し、プロパティーキーによって IOPS、スループット、レイテンシーなどの具体的な制約が定義されます。まず QoS 仕様を作成し、次にそれをボリュームタイプに関連付けます。

4.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
  • プロジェクト管理者であり、QoS 仕様を作成および設定できる。
  • Block Storage サービスの cinder CLI コマンドを使用するには、コマンドの実行前に、$ source ./cloudrc というコマンドで cloudrc ファイルを読み込みます。cloudrc ファイルが存在しない場合は、作成する必要があります。

4.2. ブロックストレージ QoS 仕様の利用者

QoS 仕様を作成するときは、必要なコンシューマーを選択する必要があります。コンシューマーは、QoS 制限を適用する場所を決定し、QoS 制限を定義するためにどの QoS プロパティーキーが使用できるかを決定します。

Block Storage サービス (cinder) は、次の QoS 仕様のコンシューマーをサポートします。

  • front-end: Compute サービス (nova) は、ボリュームがインスタンスに接続されるときに QoS 制限を適用します。Compute サービスは、Block Storage サービスによって提供されるすべての QoS プロパティーキーをサポートします。
  • back-end: 関連付けられたボリュームタイプのバックエンドドライバーは、QoS 制限を適用します。各バックエンドドライバーは、独自の QoS プロパティーキーのセットをサポートします。ドライバーがサポートする QoS プロパティーキーの詳細は、バックエンドドライバーのドキュメントを参照してください。

    back-end コンシューマーがサポートされていない場合は、front-end コンシューマーを使用します。たとえば、Bare Metal Provisioning サービスを通じてボリュームをベアメタルノードに接続する場合 (皮肉)。

  • both: 可能であれば、両方のコンシューマーが QoS 制限を適用します。したがって、このコンシューマータイプは次の QoS プロパティーキーをサポートします。

    • ボリュームがインスタンスにアタッチされている場合は、Compute サービスとバックエンドドライバーの両方がサポートするすべての QoS プロパティーキーを使用できます。
    • ボリュームがインスタンスにアタッチされていない場合は、バックエンドドライバーがサポートする QoS プロパティーキーのみを使用できます。

4.3. ブロックストレージのサービス品質プロパティーキー

ブロックストレージサービス (Cinder) は、クラウドユーザーが作成するボリュームのパフォーマンスを制限するためのサービス品質 (QoS) プロパティーキーを提供します。すべての QoS プロパティーキーのデフォルト値は 0 で、制限が無制限であることを意味します。

これらの制限では、ストレージボリュームのパフォーマンスに関する次の 2 つの業界標準測定値が使用されます。

  • 1 秒あたりの入出力操作数 (IOPS)
  • データ転送速度 (バイト/秒で測定)

QoS 仕様の利用者は、どの QoS プロパティーキーがサポートされるかを決定します。詳細は、QoS 仕様の利用者 を参照してください。

一部の QoS プロパティーキーはバックエンドドライバーによって外部的に定義されているため、Block Storage は QoS プロパティーキーのエラーチェックを実行できません。したがって、Block Storage は、無効またはサポートされていない QoS プロパティーキーを無視します。QoS プロパティーキーのスペルが正しいことを確認してください。スペルが間違っているプロパティーキーを含むボリュームのパフォーマンス制限は無視されます。

IOPS とデータ転送速度の両方の測定について、次のパフォーマンス制限を設定できます。

固定制限
通常、固定制限はボリュームパフォーマンス測定の平均使用量を定義する必要があります。
バースト制限
すべてのバースト制限は、バースト長を 1 秒として設定しています。通常、バースト制限は、ボリュームパフォーマンス測定の激しいアクティビティーの期間を定義する必要があります。バースト制限により、平均的な使用量に対して固定制限を低く保ちながら、特定の時間におけるアクティビティーの増加率が考慮されます。
制限合計
total_* QoS プロパティーキーを使用して、必要なパフォーマンス制限の読み取り操作と書き込み操作の両方に対するグローバル制限を指定します。合計制限を指定した場合、読み取りおよび書き込み制限は無視されます。合計制限を使用する代わりに、読み取り操作と書き込み操作に個別の制限を適用したり、読み取り操作または書き込み操作のみを制限するように選択したりできます。
読み取り制限
read_* QoS プロパティーキーを使用して、必要なパフォーマンス制限の読み取り操作にのみ適用される制限を指定します。
書き込み制限
write_* QoS プロパティーキーを使用して、必要なパフォーマンス制限の書き込み操作にのみ適用される制限を指定します。

次の Block Storage QoS プロパティーキーを使用して、デプロイメントのボリュームパフォーマンス制限を作成できます。

Expand
表4.1 Block Storage QoS プロパティーキー
パフォーマンス制限測定単位QoS プロパティーキー

固定 IOPS

IOPS

total_iops_sec

read_iops_sec

write_iops_sec

ボリュームのサイズによって計算される固定 IOPS。

これらの制限の使用制限の詳細は、ボリュームサイズに応じて拡張される QoS 制限 を参照してください。

GB あたりの IOPS

total_iops_sec_per_gb

read_iops_sec_per_gb

write_iops_sec_per_gb

バースト IOPS

IOPS

total_iops_sec_max

read_iops_sec_max

write_iops_sec_max

固定データ転送率

1 秒あたりのバイト数

total_bytes_sec

read_bytes_sec

write_bytes_sec

バーストデータ転送率

1 秒あたりのバイト数

total_bytes_sec_max

read_bytes_sec_max

write_bytes_sec_max

IOPS 制限を計算するときの IO リクエストのサイズ。

詳細は、IOPS 制限に対する IO リクエストサイズの設定 を参照してください。

Bytes

size_iops_sec

4.3.1. IOPS 制限における IO リクエストサイズ

size_iops_sec QoS プロパティーは、ブロックストレージサービス (cinder) が IOPS 制限を計算する際に参照として使用する、標準 IO リクエストのサイズ (バイト単位) を定義します。このプロパティーは、ユーザーが多数の小さな IO リクエストを送信する代わりに、少数の大きな IO リクエストを送信することで IOPS 制限を回避することを防ぎます。

size_iops_sec を設定すると、ブロックストレージサービスは、送信された各 IO リクエストが表す標準リクエストの比例数を計算します。たとえば、size_iops_sec=4096 の場合:

  • 8 KB のリクエストは 2 リクエストとしてカウントされます。
  • 6 KB のリクエストは 1.5 リクエストとしてカウントされます。
  • 4 KB 未満のリクエストは 1 リクエストとしてカウントされます。
注記

size_iops_sec のデフォルト値は 0 で、IOPS 制限を適用するときに IO リクエストのサイズは無視されます。

4.3.2. ボリュームサイズに応じて拡張される IOPS 制限

ユーザーが作成するボリュームの容量によって決定される IOPS ボリュームのパフォーマンス制限を作成できます。これらの QoS (Quality of Service) の制限は、プロビジョニングされたボリュームのサイズに応じて拡張されます。たとえば、ボリュームタイプに読み取り操作のボリュームサイズ 1 GB あたり 500 の IOPS 制限がある場合、このボリュームタイプのプロビジョニングされた 3 GB ボリュームの読み取り IOPS 制限は 1500 になります。

留意事項
  • ボリュームのサイズは、ボリュームがインスタンスにアタッチされるときに決定されます。ボリュームがインスタンスにアタッチされている間にボリュームのサイズが変更された場合、これらの制限は、ボリュームがデタッチされてから再度インスタンスにアタッチされたときにのみ、新しいボリュームサイズに対して再計算されます。
  • 合計制限を使用する代わりに、読み取り操作と書き込み操作に個別の制限を適用したり、読み取り操作または書き込み操作のみを制限することを選択したりできます。
  • 合計制限を指定した場合、読み取りおよび書き込み制限は無視されます。
  • これらの QoS 制限を含む QoS 仕様のコンシューマーは front-end または both にすることができますが、back-end にすることはできません。詳細は、ブロックストレージ QoS 仕様の利用者 を参照してください。

GB あたりの IOPS で指定された次の QoS プロパティーキーを使用して、スケーラブルなボリュームのパフォーマンス制限を作成できます。

  • total_iops_sec_per_gb: 読み取り操作と書き込み操作の両方について、ボリュームサイズの GB ごとのグローバル IOPS 制限を指定します。
  • read_iops_sec_per_gb: 読み取り操作にのみ適用される、ボリュームサイズの GB あたりの IOPS 制限を指定します。
  • write_iops_sec_per_gb: 書き込み操作にのみ適用される、ボリュームサイズの GB あたりの IOPS 制限を指定します。

4.4. QoS 仕様の作成と設定

QoS (Quality of Service) 仕様は、ボリュームパフォーマンスの QoS 制限のリストです。各 QoS 制限を作成するには、QoS プロパティーキーをデプロイメント固有の値に設定します。QoS パフォーマンス制限をボリュームに適用するには、QoS 仕様を必要なボリュームタイプに関連付ける必要があります。

前提条件

  • プロジェクト管理者であり、QoS 仕様を作成および設定できる。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. QoS 仕様を作成します。

    $ openstack volume qos create [--consumer <qos_spec_consumer>] --property <key>=<value> <qos_spec_name>

    次のように、QoS 制限ごとに個別の --property <key>=<value> 引数を指定して、QoS 仕様にパフォーマンス制限を追加します。

    • <key> を必要なパフォーマンス制約の QoS プロパティーキーに置き換えます。詳細は、Block Storage QoS プロパティーキー を参照してください。

      重要

      QoS プロパティーキーのスペルが正しいことを確認してください。スペルが間違っているプロパティーキーを含むボリュームのパフォーマンス制限は無視されます。

    • <value> を QoS プロパティーキーで必要な測定単位での、このパフォーマンス制約に対するデプロイメント固有の制限に置き換えます。
    • オプション: <qos_spec_consumer> を、この QoS 仕様の必要なコンシューマーに置き換えます。指定しない場合、コンシューマーはデフォルトで both を使用します。詳細は、Consumers of QoS specifications を参照してください。
    • <qos_spec_name> を QoS 仕様の名前に置き換えます。

      以下に例を示します。

      $ openstack volume qos create \
       --property read_iops_sec=5000 \
       --property write_iops_sec=7000 \
        --consumer front-end \
       myqoslimits
      +------------+---------------------------------------------+
      | Field      | Value                                       |
      +------------+---------------------------------------------+
      | consumer   | front-end                                   |
      | id         | 9fc9a481-28e9-49b8-84eb-f0a476cc89a5        |
      | name       | myqoslimits                                |
      | properties | read_iops_sec='5000', write_iops_sec='7000' |
      +------------+---------------------------------------------+
  3. openstackclient Pod を終了します。

    $ exit

4.5. 既存の QoS 仕様を編集する

既存の QoS 仕様を設定することで、他のパフォーマンス制限を追加したり、既存のプロパティーの制限を変更したりできます。

前提条件

  • QoS 仕様を編集するには、プロジェクト管理者である必要があります。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. QoS 仕様を設定して、その他のパフォーマンス制限を追加したり、既存のプロパティーの制限を変更したりします。

    $ openstack volume qos set --property <key>=<value> <qos_spec_name>

    1 つ以上の --property <key>=<value> 引数を追加できます。このコマンドでは、プロパティーの変更が成功したかどうかを確認できません。次のコマンドを実行して、QoS 仕様に加えられた変更を確認できます。

    $ openstack volume qos list

    このコマンドは、設定されているすべての QoS 仕様の詳細な設定を示すテーブルを表示し、Properties 列には各 QoS 仕様の設定済みプロパティーがすべて表示されます。

  3. openstackclient Pod を終了します。

    $ exit

4.6. QoS 仕様をボリュームタイプに関連付ける

QoS 制限をボリュームに適用するには、QoS (Quality of Service) 仕様をボリュームタイプに関連付ける必要があります。

重要

ボリュームがすでにインスタンスにアタッチされている場合、QoS 制限は、ボリュームがデタッチされてからこのインスタンスに再アタッチされたときにのみこのボリュームに適用されます。

前提条件

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 必要な QoS 仕様を必要なボリュームタイプに関連付けます。

    $ openstack volume qos associate <qos_spec_name> <volume_type>
    • <qos_spec_name> を QoS 仕様の名前または ID に置き換えます。openstack volume qos list コマンドを実行すると、すべての QoS 仕様の名前と ID をリスト表示できます。
    • <volume_type> をボリュームタイプの名前または ID に置き換えます。openstack volume type list コマンドを実行すると、すべてのボリュームタイプの名前と ID をリスト表示できます。
  3. QoS 仕様が関連付けられていることを確認します。

    $ openstack volume qos list

    出力テーブルの Associations 列には、各 QoS 仕様に関連付けられているボリュームタイプの名前が表示されます。

    以下に例を示します。

+--------------------------------------+--------------+-----------+--------------+-------------------------------------------------------------------+
| ID                                   | Name         | Consumer  | Associations | Properties                                                        |
+--------------------------------------+--------------+-----------+--------------+-------------------------------------------------------------------+
| 9fc9a481-28e9-49b8-84eb-f0a476cc89a5 | myqoslimits  | both      | MyVolType    | read_iops_sec='6500', size_iops_sec='4096', write_iops_sec='7500' |
+--------------------------------------+--------------+-----------+--------------+-------------------------------------------------------------------+
  1. openstackclient Pod を終了します。

    $ exit

4.7. QoS 仕様とボリュームタイプの関連付けを解除する

ボリュームタイプのボリュームに QoS 制限を適用したくない場合は、ボリュームタイプからサービス品質 (QoS) 仕様の関連付けを解除できます。

特定のボリュームタイプの関連付けを解除することも、複数のボリュームタイプが同じ QoS 仕様に関連付けられている場合はすべてのボリュームタイプの関連付けを解除することもできます。

重要

ボリュームがすでにインスタンスにアタッチされている場合、QoS 制限は、ボリュームがデタッチされてからこのインスタンスに再アタッチされたときにのみ、このボリュームから削除されます。

前提条件

  • QoS 仕様を作成、設定、関連付け、および関連付け解除するには、プロジェクト管理者である必要があります。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. QoS 仕様に関連付けられているボリュームタイプの関連付けを解除します。

    • QoS 仕様に関連付けられた特定のボリュームタイプの関連付けを解除するには、次の手順を実行します。

      $ openstack volume qos disassociate <qos_spec_name> --volume-type <volume_type>
      • <qos_spec_name> を QoS 仕様の名前または ID に置き換えます。openstack volume qos list コマンドを実行すると、すべての QoS 仕様の名前と ID をリスト表示できます。
      • <volume_type> を、この QoS 仕様に関連付けられたボリュームタイプの名前または ID に置き換えます。cinder type-list コマンドを実行して、すべてのボリュームタイプの名前と ID を一覧表示できます。
    • QoS 仕様に関連付けられているすべてのボリュームタイプの関連付けを解除するには、次の手順を実行します。

      $ openstack volume qos disassociate <qos_spec_name> --all
  3. QoS 仕様の関連付けが解除されていることを確認します。

    $ openstack volume qos list

    この QoS 仕様の Associations 列には、指定されたボリュームタイプが含まれていないか、すべてのボリュームタイプの関連付けが解除されている場合は空でなければなりません。

  4. openstackclient Pod を終了します。

    $ exit

第5章 Block Storage バックアップサービスのカスタマイズ

ブロックストレージサービス (Cinder) のバックアップパラメーターをカスタマイズして、データ保護要件を満たすことができます。バックアップクォータを設定してストレージ使用量を制御し、ボリューム所有者がアクセスできる管理者バックアップを有効にすることで、柔軟なバックアップポリシーを実現します。

5.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。

5.2. ボリューム所有者がバックアップにアクセスできるようにする

管理者はプロジェクトに属する任意のボリュームをバックアップできます。ボリューム所有者もボリュームバックアップにアクセスできるようにするには、管理者はボリュームをバックアップするときにボリューム所有者を認証するための引数を指定する必要があります。

手順

  • ボリューム所有者を認証してボリュームバックアップにアクセスできるようにするには、次の引数を指定します。

    $ openstack --os-project-name <projectname> \
    --os-username <username> \
    --os-password <password> \
    volume backup create [--name <backup_name>] <volume>
    • <projectname> をボリューム所有者のプロジェクト (tenant) の名前に置き換えます。
    • <username><password> をこのプロジェクト内のボリューム所有者であるユーザーのユーザー名とパスワードの認証情報に置き換えます。
    • [--name <backup_name>] <volume> は、ボリュームバックアップを作成するときの一般的な引数です。

5.3. プロジェクトごとのブロックストレージバックアップクォータの表示と変更

ユーザーが各プロジェクト (テナント) に対して作成できる Block Storage ボリュームバックアップに適用される次のリソースクォータの制限を変更または表示できます。

  • backups では、このプロジェクトのユーザーが作成できる Block Storage ボリュームバックアップの最大数を指定します。デフォルトでは、この制限は 10 に設定されています。
  • backup-gigabytes は、このプロジェクトのユーザーが作成できるすべての Block Storage ボリュームバックアップの合計サイズ (ギガバイト単位) を指定します。デフォルトでは、この制限は 1000 に設定されています。

各プロジェクトにおける、Block Storage バックアップリソースクォータの使用状況も表示できます。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
    $ source ./cloudrc
  2. オプション: 必要なプロジェクトの ID または名前を取得するプロジェクトを一覧表示します。

    $ openstack project list
  3. 特定プロジェクトのバックアップクォータの現在の制限を表示します。

    $ openstack quota show <project>
    • <project> を必要なプロジェクトの ID または名前に置き換えます。

      これにより、指定されたプロジェクトのすべてのリソースクォータの制限が表示されます。テーブルの backup-gigabytes フィールドと backups フィールドの Limit 列に注意してください。以下に例を示します。

      $ openstack quota show c2c1da89ed1648fc8b4f35a045f8d34c
      +-----------------------+-------+
      | Resource              | Limit |
      +-----------------------+-------+
      ...
      | backups               |    10 |
      ...
      | backup-gigabytes      |  1000 |
      ...
      +-----------------------+-------+
  4. オプション: ユーザーがプロジェクト用に作成できるすべての Block Storage ボリュームバックアップの合計サイズを変更します。

    $ openstack quota set --backup-gigabytes <totalgb> <project>
    • <totalgb> を、ユーザーがこのプロジェクト用に作成できるバックアップの合計サイズ (ギガバイト単位) に置き換えます。
  5. オプション: ユーザーがプロジェクト用に作成できる Block Storage ボリュームバックアップの最大数を変更します。

    $ openstack quota set --backups <maxnum> <project>
    • <maxnum> を、ユーザーがこのプロジェクト用に作成できるバックアップの最大数に置き換えます。
  6. オプション: これらの Block Storage ボリュームのバックアップクォータの使用状況を表示し、必要に応じて、特定プロジェクトに対する制限の変更を確認します。

    $ cinder quota-usage <project_id>
    • <project_id> をプロジェクトの ID に置き換えます。

      このテーブルの最初の 2 行は、指定されたプロジェクトのバックアップクォータを指定します。このテーブルで、以下に示す列を確認します。

    • In_use 列は、各リソースがどれだけ使用されているかを示します。
    • Limit 列は、クォータ制限がデフォルト設定から調整されたかどうかを示します。この例では、両方とも調整されています。

      $ cinder quota-usage c2c1da89ed1648fc8b4f35a045f8d34c
      +-----------------------+--------+----------+-------+-----------+
      | Type                  | In_use | Reserved | Limit | Allocated |
      +-----------------------+--------+----------+-------+-----------+
      | backup_gigabytes      | 235    | 0        | 500   |           |
      | backups               | 7      | 0        | 12    |           |
      ...
  7. openstackclient Pod を終了します。

    $ exit

第6章 イメージサービス (Glance) のインポートワークフローをカスタマイズする

イメージサービス (Glance) のインポートワークフローを設定することで、イメージのアップロードと処理を制御できます。glance-direct、web-download、copy-image などのインポート方法を有効にし、ステージングされたイメージを監視し、メタデータの挿入やフォーマット変換のためのプラグインを使用します。

ユーザーは、デフォルトの glance-direct または web-download インポート方法を使用して、独自のイメージをイメージサービスにアップロードできます。Image サービスに複数の Red Hat Ceph Storage バックエンドがある場合は、copy-image インポートメソッドも有効にできます。アップロードされたイメージがストレージバックエンドでアクティブになる前にステージング領域で監視したり、メタデータの Inject Image Metadata プラグインやイメージ形式の Image Conversion プラグインなど、プラグインを実行してユーザーイメージを検出可能にするようにインポートワークフローを設定したりできます。

6.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
  • Image サービスの glance CLI コマンドを使用するには、コマンドの実行前に、$ source ./cloudrc というコマンドで cloudrc ファイルを読み込みます。cloudrc ファイルが存在しない場合は、作成する必要があります。

6.2. 分散イメージインポート

分散イメージのインポートには glance-direct イメージインポートメソッドを使用できます。これは、Red Hat OpenStack Services on OpenShift (RHOSO) ではデフォルトで有効になっています。

glance-direct イメージインポートメソッドを使用する場合、ユーザーは、API ワーカーノード (またはレプリカ) がイメージをステージングする共有ストレージ領域を必要とせずに、ローカルイメージを Image サービス (glance) にアップロードできます。代わりに、個々の API ワーカーが独自の共有されていないローカルステージングディレクトリーを持つため、ステージングは分散されます。イメージデータを所有する API ワーカーは、イメージのインポートを実行する API ワーカーと同じです。

イメージが作成されステージングされると、Image サービスはステージング API ワーカーの URL をデータベースに記録します。この URL を使用すると、他の API ワーカーは、クライアントからのイメージインポート要求をイメージデータを持つワーカーにプロキシーし、インポート操作を実行できます。このワークフローにより、API ワーカーノードを高可用性 (HA) のために分離し、分散コンピュートノード (DCN) 環境のために地理的に分散することができます。

6.3. Web ダウンロードソースの URI 許可リストとブロックリスト

OpenStackControlPlane カスタムリソース (CR) ファイルの glance テンプレートで URI 許可リストとブロックリストを指定することにより、Web ダウンロードイメージのインポートソースを制限できます。

3 段階のレベルで、イメージソースの URI を許可またはブロックすることができます。

  • スキームレベル (allowed_schemes、disallowed_schemes)
  • ホストレベル (allowed_hosts、disallowed_hosts)
  • ポートレベル (allowed_ports、disallowed_ports)

いずれかのレベルで許可リストとブロックリストの両方を指定した場合、許可リストが優先され、ブロックリストは無視されます。

6.3.1. URI 検証の決定ロジック

Image サービスは、以下の判断ロジックを使用してイメージソースの URI を検証します。

  1. スキームを確認する。

    1. スキームが定義されていない場合: 拒否する。
    2. 許可リストがあり、そのスキームが許可リストに記載されていない場合: 拒否する。記載されている場合: c 項をスキップして 2 項に進む。
    3. ブロックリストがあり、そのスキームがブロックリストに記載されている場合: 拒否する。
  2. ホスト名を確認する。

    1. ホスト名が定義されていない場合: 拒否する。
    2. 許可リストがあり、そのホスト名が許可リストに記載されていない場合: 拒否する。記載されている場合: c 項をスキップして 3 項に進む。
    3. ブロックリストがあり、そのホスト名がブロックリストに記載されている場合: 拒否する。
  3. URI にポートが含まれていれば、ポートを確認する。

    1. 許可リストがあり、そのポートが許可リストに記載されていない場合: 拒否する。記載されている場合: b 項をスキップして 4 項に進む。
    2. ブロックリストがあり、そのポートがブロックリストに記載されている場合: 拒否する。
  4. 有効な URI として受け入れる。

許可リストに追加するか、ブロックリストに追加しないことでスキームを許可した場合、スキームのデフォルトポートを使用する (つまりポートを含めない) URI がすべて許可されます。URI にポートが含まれている場合、URI はデフォルトの決定ロジックに従って検証されます。

6.3.2. URI 許可リストとブロックリストのデフォルト設定

次の許可リストとブロックリストの値は、Red Hat OpenStack Services on OpenShift (RHOSO) デプロイメントにおける web-download イメージのインポートメソッドのデフォルト設定です。

  • allowed_schemes: [http, https]
  • disallowed_schemes: ブランク
  • allowed_hosts: ブランク
  • disallowed_hosts: ブランク
  • allowed_ports: [80, 443]
  • disallowed_ports: ブランク

デフォルト値を使用する場合、ユーザーは http または https スキームを使用してのみ URI にアクセスでき、ポート 80443 のみを指定できます。(ユーザーはポートを指定する必要はありませんが、指定する場合には 80 または 443 のどちらかでなければなりません)。

6.3.3. web-import ソースの URI 許可リストを設定する

OpenStackControlPlane カスタムリソース (CR) ファイルの glance テンプレートで URI 許可リストとブロックリストを指定することで、web-import イメージダウンロードのソースを設定します。

この例では、イメージのアップロードに FTP サーバーを使用しています。FTP のデフォルトポートは 21 です。

手順

  1. OpenStackControlPlane カスタムリソース CR ファイル (openstack_control_plane.yaml) を開き、glance テンプレートに次のパラメーターを追加します。

    glance:
      template:
        customServiceConfig: |
          [DEFAULT]
          allowed_schemes = [http,https,ftp]
          disallowed_schemes = []
          allowed_hosts = []
          disallowed_hosts = []
          allowed_ports = [80,443]
          disallowed_ports = []
        glanceAPIs:
          ...
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack
    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

6.4. イメージのコピーインポート方法の設定

Image サービス (glance) を、複数の Red Hat Ceph Storage ストアに既存イメージをコピーするように設定できます。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、glance テンプレートの customServiceConfig に次のパラメーターを追加します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
        ...
      glance:
        enabled: true
        template:
          customServiceConfig: |
            [DEFAULT]
            enabled_import_methods=web-download,glance-direct,copy-image
          glanceAPIs:
            ...
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

6.5. 仮想マシンイメージディスクフォーマットの有効化または拒否

ディスクフォーマットを有効化または拒否するように、Image サービス (glance) を設定できます。たとえば、RAW および ISO ディスクフォーマットのみを有効にしたり、QCOW2 ディスクフォーマットのイメージを拒否したりできます。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、次のパラメーターを glance テンプレートに追加します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
        ...
      glance:
        enabled: true
        template:
          databaseInstance: openstack
          databaseUser: glance
          customServiceConfig: |
             [image_format]
            disk_formats=<raw>,<iso>
          glanceAPIs:
            ...
    • <raw><iso> を、有効にするフォーマットに置き換えます。その場合に選択できるサポート対象ディスクフォーマットは、none、ami、ari、aki、vhd、vhdx、vmdk、raw、qcow2、vdi、iso、ploop です。
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

6.6. イメージインポートワークフローのプラグインを有効にする

イメージインポートワークフローでプラグインを有効にするには、glance-image-import.conf ファイルで image_import_plugins オプションを設定します。プラグインは並行して実行されません。これらは、image_import_plugins リストに表示される順序で実行されます。

Red Hat Ceph Storage を Image サービスのバックエンドとして使用する場合、デフォルトでイメージ変換が有効になります。

手順

  • glance-image-import.conf ファイルでプラグインを設定します。この例では、メタデータプロパティーを注入する前に、イメージを RAW 形式に変換します。

    [image_import_opts]
    image_import_plugins = ['image_conversion','inject_image_metadata']
    
    [image_conversion]
    output_format = raw
    
    [inject_metadata_properties]
    ignore_user_roles = admin,...
    inject = "property1":"value1","property2":"value2",...

6.6.1. インスタンス配置を制御するためのメタデータの注入

Inject Image Metadata プラグインを有効にすることで、クラウドユーザーがインポートしたイメージにメタデータを適用し、イメージから起動されるインスタンスを特定のコンピュートノードに配置できます。

Inject Image Metadata プラグインには 2 つのパラメーターが含まれています。

  • ignore_user_roles は、プラグインが無視する Identity サービス (keystone) のロールのコンマ区切りリストです。イメージインポートの呼び出しを行うユーザーにこれらのロールが設定されている場合、プラグインはイメージに属性を注入しません。
  • inject は、インポートされたイメージのイメージレコードに注入される属性と値のコンマ区切りリストです。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、次のパラメーターを glance テンプレートに追加します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
        ...
      glance:
        enabled: true
        template:
          databaseInstance: openstack
          databaseUser: glance
          customServiceConfig: |
            [DEFAULT]
            enabled_backends = <backend_name>:rbd
            enabled_import_methods=[web-download,glance-direct]
            [image_import_opts]
            image_import_plugins = ['inject_image_metadata']
            [inject_metadata_properties]
            ignore_user_roles = <admin>,...
            inject = "<property1>":"<value1>","<property2>":"<value2>",...
      ...
    • <backend_name> は、デフォルトのバックエンドの名前に置き換えます。
    • <admin> を、プラグインが無視するユーザーロールに置き換えます。
    • <property1><value1><property2><value2> などを、イメージに注入するプロパティーと値に置き換えます。
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

6.7. イメージサービス変更通知を有効にする

イメージのライフサイクル中に発生するさまざまなイベントについて、Image サービス (glance) で通知を有効化できます。

これらの通知は、次の目的で使用できるテレメトリーデータを供給します。

  • 監査、トラブルシューティング、監視操作
  • メトリクスの収集と処理のために Ceilometer などの他のサービスと統合する

Image サービスは、設定済みのメッセージキューへの通知配信に RabbitMQ メッセージブローカーソフトウェアを使用します。サービスは、コントロールプレーンレベルで設定されたグローバルな notificationBus 設定を継承します。この手順は、グローバル設定とは異なる、このサービス専用の RabbitMQ クラスターを設定する必要がある場合にのみ使用してください。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、glance テンプレートに notificationsBus パラメーターを追加して、トランスポート URL を要求する際に使用する RabbitMQ クラスター名を指定します。

    注記

    notificationsBusInstance パラメーターは非推奨です。notificationsBusInstance を使用している既存のデプロイメントは、自動的に notificationsBus インターフェイスを使用するように移行されます。

    kind: OpenStackControlPlane
    spec:
    ...
      glance:
        template:
          ...
          notificationsBus:
            cluster: rabbitmq
          customServiceConfig: |
    ...

    通知をオフにするには、glance テンプレートから notificationsBus パラメーターを削除し、コントロールプレーンを更新してください。

  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. Red Hat OpenShift Container Platform (RHOCP) が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

6.8. cloudrc ファイルの作成

Image サービス (glance) は、openstackclient Pod 内で、openstackglance クライアントコマンドの両方を使用します。glance クライアントコマンドが必要な場合は、その使用を有効にするために、openstackclient Pod に cloudrc ファイルを作成する必要があります。cloudrc ファイルは、作成後は openstackclient Pod が存在する間は継続して保持されます。

手順

  • cloudrc が存在しない場合 (たとえばソースを取得できない場合) は、次のコマンドを使用して作成します。

    $ oc rsh openstackclient bash -c '
    cat .config/openstack/* | while read key val; do
        case $key in
            "auth_url:") var=OS_AUTH_URL ;;
            "username:") var=OS_USERNAME ;;
            "password:") var=OS_PASSWORD ;;
            "project_name:") var=OS_PROJECT_NAME ;;
            "project_domain_name:") var=OS_PROJECT_DOMAIN_NAME ;;
            "user_domain_name:") var=OS_USER_DOMAIN_NAME ;;
            *) var="" ;;
        esac
        [ -z "$var" ] || echo "export ${var}=${val}"
    done > cloudrc
    '

キャッシュ、スパースアップロード、および検証を設定することで、イメージサービス (Glance) のパフォーマンスとセキュリティーを向上させることができます。ストレージ負荷を軽減するためにキャッシュを有効にし、容量を最適化するためにスパースアップロードを設定し、セキュリティーを強化するために署名と API 制御を使用します。

7.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。

7.2. キャッシュによるイメージサービスのスケーラビリティーの向上

Image サービス API (glanceAPI) キャッシュメカニズムを使用して、イメージのコピーを glanceAPI サーバーに保存し、それらを自動的に取得します。イメージキャッシュを使用すると、API はバックエンドストレージから同じイメージを複数回取得する必要がなくなります。イメージコピーの自動取得により、リソースの負荷が軽減され、スケーラビリティーとパフォーマンスが向上します。

イメージキャッシュを管理するには、次の 2 つのファイルを使用します。

  • サーバーを設定するには、glance-api.conf を使用します。
  • ユーティリティーを設定するには、glance-cache.conf を使用します。

次のオプションは両方の設定ファイルに存在します。これらのオプションは、両方のファイルで同じ値である必要があります。

Expand
表7.1 イメージキャッシュの設定オプション
オプション説明デフォルト

image_cache_dir

Image サービス (glance) がキャッシュデータを保存するベースディレクトリー。

ありません。設定する必要があります。

image_cache_sqlite_db

キャッシュ管理に使用する sqlite ファイルデータベースへのパス。このパスは、image_cache_dir ディレクトリーからの相対パスです。

cache.db

image_cache_driver

キャッシュ管理に使用されるドライバー。

sqlite

image_cache_max_size

glance-cache-pruner は、ここで指定されたキャッシュサイズ値をバイト数が下回るまで、最も古いイメージを削除します。

10 GB

image_cache_stall_time

不完全なイメージが削除されるまでキャッシュ内に留まる時間。

1 day

cron ジョブを使用して、定期的に最も古いイメージを削除するために glance-cache-pruner を実行できます。また、cron ジョブを使用して glance-cache-cleaner を実行し、イメージキャッシュの書き込みが完了しなかった、あるいはイメージファイルがディスクに正常に書き込まれなかったために停止状態または無効な状態になっているイメージファイルをクリーンアップすることもできます。

以下の値は、glance-cache.conf ファイルに固有の値であり、プリフェッチャーを正常に実行するためにのみ必要です。

  • filesystem_store_datadir: ファイルシステムストアを使用している場合は、このパラメーターを使用します。パラメーターはデータが保存される場所を指します。
  • filesystem_store_datadirs: このパラメーターを使用して、複数のファイルシステムストアを指します。

Red Hat OpenStack Services on OpenShift (RHOSO) では、以前の Red Hat OpenStack Platform バージョンのように定期的なジョブを使用してキューに入れられたイメージをプリフェッチする代わりに、イメージをキューに入れて即時にキャッシュすることができます。

7.2.1. パフォーマンス向上のため、イメージサービスキャッシュを有効にする

Image サービス (glance) でイメージキャッシュを有効にするには、OpenStackControlPlane カスタムリソース (CR) ファイルの glance テンプレートの imageCache セクションに Size パラメーターを追加して、キャッシュに割り当てるサイズを指定します。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、次のパラメーターを glance テンプレートに追加します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
        ...
      glance:
        template:
          databaseInstance: openstack
          databaseUser: glance
          customServiceConfig: |
            ...
          imageCache:
            size: 10Gi
          storage:
            storageRequest: 10Gi
            storageClass: ""
          glanceAPIs:
            default:
      ...
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

7.2.2. イメージサービスキャッシュのコマンドラインオプション

glance クライアントを使用してキャッシュされたイメージを管理できます。イメージキャッシュは各ノードに対してローカルであるため、キャッシュ操作は各ノードに対してローカルに実行する必要があります。Red Hat OpenStack Services on OpenShift (RHOSO) デプロイメントに 3 個、5 個、または 7 個のコントローラーを備えた高可用性がある場合は、キャッシュ操作の実行時に --os-image-url オプションを使用してホストアドレスを指定します。

以下に例を示します。

$ glance --os-image-url=<image_url> cache-list
  • <image_url> は、たとえば "http://REPLICA""0.{REPLICA}""0.REPLICA""0.DOMAIN:9292" のようなイメージの URL に置き換えます。その場合の REPLICA は、データを所有しない glanceAPI レプリカであり、DOMAIN は特定の glanceAPI に関連付けられたサービスホスト名です。

cachemanage ミドルウェアが有効になっている場合は、glance-cache-manage プログラムを使用してキャッシュされたイメージを管理できます。イメージキャッシュが含まれるホストとは別のホストから、glance-cache-manage プログラムを実行できます。

Expand
表7.2 glance クライアント使用時のイメージキャッシュのコマンドオプション
コマンド説明

$ glance --os-image-url=<image_url> cache-queue <image_id>

即時にキャッシュするためにイメージをキューに入れます。

$ glance --os-image-url=<image_url> cache-list

現在キャッシュされているすべてのイメージをリスト表示します。

$ glance --os-image-url=<image_url> cache-delete <image_id> [<image_id> ...]

キャッシュディレクトリーから、キャッシュされたイメージまたはキャッシュ待ちのキューに入っているイメージを 1 つ以上削除します。

$ glance --os-image-url=<image_url> cache-clear

キャッシュディレクトリーから、キャッシュされたイメージとキャッシュ待ちのキューに入っているイメージをすべて削除します。

$ glance --os-image-url=<image_url> --target cached

キャッシュディレクトリーから、キャッシュされたイメージをすべて削除します。

$ glance --os-image-url=<image_url> cache-clear --target queued

キャッシュディレクトリーから、キャッシュキューに入れられたすべてのイメージを削除します。

Expand
表7.3 glance-cache-manage プログラム使用時のイメージキャッシュのコマンドオプション
コマンド説明

$ glance-cache-manage --host=<host> list-cached

特定のホストに現在キャッシュされているすべてのイメージをリスト表示します。

$ glance-cache-manage --host=<host> list-queued

特定のホストでキャッシュするために現在キューに入れられているすべてのイメージをリスト表示します。

$ glance-cache-manage --host=<host> queue-image

特定のホストにキャッシュするためにイメージをキューに入れます。

$ glance-cache-manage --host=<host> delete-cached-image

特定のホストのキャッシュまたはキャッシュキューからイメージを削除します。

$ glance-cache-manage --host=<host> delete-all-cached-images

特定のホスト上のキャッシュからすべてのイメージを削除します。

$ glance-cache-manage --host=<host> delete-queued-image

特定のホストのキャッシュキューからイメージを削除しました。

$ glance-cache-manage --host=<host> delete-all-queued-images

特定のホストのキャッシュキューからすべてのイメージを削除しました。

7.3. スパースイメージのアップロードを有効にする

Red Hat Ceph Storage RADOS Block Device (RBD) を Image サービス (glance) のストレージバックエンドとして使用する場合、スパースイメージアップロードを使用してネットワークトラフィックを削減し、ストレージスペースを節約できます。この機能は、分散コンピュートノード (DCN) 環境で役立ちます。スパースイメージファイルの場合、Image サービスは null バイトシーケンスを書き込みません。Image サービスは、指定されたオフセットでデータを書き込みます。ストレージバックエンドは、これらのオフセットを、実際にはストレージスペースを使用しない null バイトとして解釈します。

前提条件

  • Red Hat OpenStack Services on OpenShift (RHOSO) デプロイメントは、Ceph Storage RBD を Image サービスのストレージバックエンドとして使用する。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、次のパラメーターを glance テンプレートに追加します。rbd_thin_provisioning パラメーターを True に設定して、スパースイメージのアップロードを有効にします。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
        ...
      glance:
        template:
          databaseInstance: openstack
          databaseUser: glance
          customServiceConfig: |
            [DEFAULT]
            enabled_backends = <backend_name>:rbd
            enabled_import_methods=[web-download]
            [glance_store]
            default_backend = <backend_name>
            [<backend_name>]
            rbd_store_ceph_conf = /etc/ceph/ceph.conf
            store_description = "RBD backend"
            rbd_store_pool = images
            rbd_store_user = openstack
            rbd_thin_provisioning = True
      ...
    • <backend_name> は、デフォルトのバックエンドの名前に置き換えます。
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

検証

イメージをインポートしてそのサイズを確認し、スパースイメージのアップロードを検証することができます。

  1. イメージファイルをローカルにダウンロードします。

    $ wget <file_location>/<file_name>
    • <file_location> をファイルの場所に置き換えます。
    • <file_name> は、ファイルの名前に置き換えます。

      以下に例を示します。

      $ wget https://cloud.centos.org/centos/6/images/CentOS-6-x86_64-GenericCloud-1508.qcow2
  2. アップロードするイメージのディスクサイズと仮想サイズを確認します。

    $ qemu-img info <file_name>

    以下に例を示します。

    $ qemu-img info CentOS-6-x86_64-GenericCloud-1508.qcow2
    
    image: CentOS-6-x86_64-GenericCloud-1508.qcow2
    file format: qcow2
    virtual size: 8 GiB (8589934592 bytes)
    disk size: 1.09 GiB
    cluster_size: 65536
    Format specific information:
    compat: 0.10
    refcount bits: 1
  3. イメージをインポートします。

    $ glance image-create-via-import --disk-format qcow2 --container-format bare --name centos_1 --file <file_name>
  4. イメージ ID を記録します。後続のステップで必要になります。
  5. イメージがインポートされ、アクティブ状態にあることを確認します。

    • ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。

      $ oc rsh -n openstack openstackclient
    • イメージを表示します。

      $ openstack image show <image_id>
    • openstackclient Pod を終了します。

      $ exit
  6. Ceph Storage ノードから、イメージのサイズが、ステップ 2 出力の仮想サイズよりも小さいことを確認します。

    $ sudo rbd -p images diff <image_id> | awk '{ SUM += $2 } END { print SUM/1024/1024/1024 " GB" }'
    
    1.03906 GB

7.4. Image サービス API の追加

複数のワークロードをサポートしたり、既存の glanceAPI とそのバックエンドサービスのライフサイクルを維持したりするために、新しい Image サービス API (glanceAPI) を Red Hat OpenStack Services on OpenShift (RHOSO) デプロイメントに追加できます。たとえば、デプロイメントに Red Hat Ceph Storage などの split レイアウトのバックエンドと NFS などの single レイアウトのバックエンドがある場合、single または split レイアウトに変更を加えることはできません。変更は PersistentVolumeClaims (PVC) などの設定要素に影響するためです。代わりに、バックエンドを切り替えるための新しい glanceAPI を追加できます。

手順

  1. OpenStackControlPlane CR ファイル openstack_control_plane.yaml を開き、glance テンプレートにパラメーターを追加して新しい glanceAPI を設定します。次の例では、Object Storage サービス (swift) をバックエンドとして使用する既存の default API があり、OpenStackControlPlane を更新して新しい default1 API をデプロイします。

    ...
    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
      glance:
        template:
          databaseInstance: openstack
          keystoneEndpoint: default
          glanceAPIs:
            default:
              customServiceConfig: |
                [DEFAULT]
                enabled_backends = <backend_name>:swift
                [glance_store]
                default_backend = <backend_name>
                [<backend_name>]
                swift_store_create_container_on_put = True
                swift_store_auth_version = 3
                swift_store_auth_address = {{ .KeystoneInternalURL }}
                swift_store_endpoint_type = internalURL
                swift_store_user = service:glance
                swift_store_key = {{ .ServicePassword }}
              preserveJobs: false
              replicas: 3
            default1:
              type: single
              replicas: 1
          storage:
            storageRequest: 10G
    ...
    • <backend_name> は、デフォルトのバックエンドの名前に置き換えます。
  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

7.5. Image サービス API の廃止

既存の Image サービス API (glanceAPI) を廃止するには、次の操作を行う必要があります。

  • glanceAPI CR とそれに関連するオブジェクト (pod や StatefulSets など) を削除します。
  • アクティブな glanceAPI を指すように keystoneEndpoint を更新します。

OpenStackControlPlane 内の唯一の glanceAPI である場合は、glanceAPI を削除することはできません。また、OpenStackControlPlane CR ファイル内の keystoneEndpoint パラメーターを、存在しない glanceAPI にポイントすることもできません。

glanceAPI を削除すると、API に関連付けられている PersistentVolumeClaims (PVC) は保持されるため、必要に応じて以前の設定で API を再度追加できます。

手順

  1. OpenStackControlPlane に複数の glanceAPI がデプロイされていることを確認します。

    $ oc -n openstack get oscp  $(oc get oscp -o custom-columns=NAME:.metadata.name --no-headers) -o jsonpath='{.spec.glance.template.glanceAPIs}' | jq
  2. Keystone カタログに登録されている現在の glanceAPI を特定します。

    $ oc -n openstack get oscp $(oc get oscp -o custom-columns=NAME:.metadata.name --no-headers) -o jsonpath='{.spec.glance.template.keystoneEndpoint}'
  3. 新しい glanceAPI に Keystone エンドポイントがあることを確認します。

    $ oc exec -it openstackclient bash -- openstack endpoint list | grep image
  4. 削除する glanceAPI が Keystone カタログに登録されている API である場合は、OpenStackControlPlane CR ファイルの openstack_control_plane.yaml を開いて API を廃止し、keystoneEndpoint パラメーターを更新します。次の例では、default という名前の glanceAPI を削除し、keystoneEndpoint パラメーターを default1 に更新します。

    ...
    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    spec:
      glance:
        template:
          keystoneEndpoint: default1
          glanceAPIs:
            default1:
              type: single
              replicas: 1
          storage:
            storageRequest: 10G
    ...
  5. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  6. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

7.6. イメージ署名の検証

イメージ署名の検証を使用すると、設定されたバックエンドにイメージを保存する前に、Image サービス (glance) にアップロードされたイメージを検証できます。イメージの検証に失敗した場合、アップロードは停止され、イメージは削除されます。

イメージの整合性と信頼性を保護するために、署名と公開鍵証明書をイメージプロパティーとして保存できます。

署名検証用のシークレットを Key Manager サービス (barbican) に保存すると、Image サービスは Identity サービス (keystone) が提供する内部エンドポイントを介して Key Manager サービスと対話します。

[key_manager]
backend = barbican

[barbican]
auth_endpoint={{ .KeystoneInternalURL }}
barbican_endpoint_type=internal

Compute サービス (nova) などの他のサービスは、ユーザーが Image サービスからイメージをダウンロードするときに、イメージプロパティーを使用してデータ検証を実行できます。

注記

Compute サービス (nova) が仮想マシンのディスクの保存に Ceph RADOS ブロックデバイス (RBD) を使用している場合、イメージの署名と検証はサポートされません。

7.7. metadef API の保護

Red Hat OpenStack Services on OpenShift (RHOSO) では、メタデータ定義 (metadef) API を使用してキーと値のペアおよびタグメタデータを定義できます。作成できる metadef namespace、オブジェクト、プロパティー、リソース、またはタグの数に制限はありません。

Image サービスのポリシーは metadef API を制御します。デフォルトでは、管理者のみが metadef API を作成、更新、または削除 (CUD) できます。この制限により、metadef API が権限のないユーザーに情報を公開することが防止され、悪意のあるユーザーが Image サービス (glance) データベースに無制限のリソースを埋め込み、サービス妨害 (DoS) 型の攻撃を引き起こすリスクが軽減されます。

第8章 イメージサービス (glance) のカスタマイズクォータ制限

イメージサービス (Glance) のクォータを設定することで、リソース消費を制御できます。すべてのプロジェクトに対してデフォルトの制限を設定し、特定のプロジェクトに対してはそれを上書きすることで、リソースの枯渇を防ぎ、クラウドユーザー間での公平な分配を確保します。

8.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。

8.2. Image サービスのプロジェクトクォータタイプと制限

OpenStackControlPlane カスタムリソース (CR) ファイルで、プロジェクトのイメージクォータを設定およびカスタマイズできます。

glance テンプレートの quotas フィールドを使用して、次のクォータを設定します。これらのクォータを設定すると、glance-operator によって Identity サービス (keystone) にクォータが登録されます。

登録済みの制限またはプロジェクト固有のリソース制限を -1 から 2,147,483,647 までの整数値に設定できます。-1 の値は制限が設定されていないことを示し、2,147,483,647 は設定できる最大制限です。

Expand
表8.1 イメージクォータのタイプとデフォルトの制限
クォータ説明デフォルト

imageSizeTotal

プロジェクトがアクティブイメージ用に持つストレージの最大量 (MiB 単位)。複数の場所にあるイメージは場所ごとにカウントされます。たとえば、4 つの場所に保存された 1 GiB のイメージの使用量は 4 GiB になります。この値は、ユーザーが使用すると予想される最大イメージサイズ以上に設定します。

1,000 MiB

imageStageTotal

使用できるステージングスペースの合計量。この値をユーザーが使用すると予想される最大イメージサイズ以上に設定し、ユーザーによる 1 つ以上のイメージの同時インポートを許可または制限します。

1,000 MiB

imageCountUpload

任意の時点で進行可能な並列アップロード操作の数。

0

imageCountTotal

個々のイメージオブジェクトまたは集合的なイメージオブジェクトのサイズにかかわらず、ユーザーが持てるイメージオブジェクトの最大数。

0

image_size_cap
image_size_cap 制限は、単一のイメージのサイズに対するグローバル制限であり、この制限は Identity サービスには登録されません。OpenStackControlPlane CR ファイルの glance テンプレートの customServiceConfig セクションで image_size_cap を設定します。デフォルト値は 1 TB です。

8.3. Image サービスのクォータの設定

OpenStackControlPlane カスタムリソース (CR) ファイル内の glance テンプレートで、Image サービス (glance) のクォータを設定できます。

手順

  1. OpenStackControlPlane CR ファイル openstack_control_plane.yaml を開き、次のパラメーターを glance テンプレートに追加して、すべての glanceAPI インスタンスに適用するイメージクォータを設定します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack
    spec:
      glance:
        template:
          ...
          quotas:
            imageSizeTotal: 1000
            imageStageTotal: 1000
            imageCountUpload: 1000
            imageCountTotal: 1000
    ...
    • クォータ制限を 0 に設定すると、クォータの種類に応じて動作が異なります。次に例を示します。

      • imageCountTotal: 0: ユーザーがイメージの作成を防ぎます。
      • imageCountUpload: 0: ユーザーが任意のイメージにデータをアップロードできます。
  2. Identity サービスに登録されているイメージクォータへの glance ユーザーアクセスを確保するには、reader ロールアクセスを割り当てて検証します。

    1. openstackclient のリモートシェルにアクセスします。

      $ oc rsh openstackclient
    2. glance ユーザーに reader ロールアクセスを割り当てます。

      $ openstack role add --user glance --system all reader
    3. glance CLI にアクセスします。

      $ source /home/cloud-admin/cloudrc
    4. イメージクォータへの glance ユーザーアクセスを確認します。

      $ glance usage
      +-----------------------+-------+-------+
      | Quota                 | Limit | Usage |
      +-----------------------+-------+-------+
      | image_size_total      | 10    | 0     |
      | image_stage_total     | 10    | 0     |
      | image_count_total     | 10    | 0     |
      | image_count_uploading | 10    | 0     |
      +-----------------------+-------+-------+
    5. openstackclient Pod を終了します。

      $ exit
  3. オプション: image_size_cap を設定するには、glance テンプレートの customServiceConfig セクションに次のパラメーターを追加します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack
    spec:
      glance:
        template:
          ...
          quotas:
            ...
          customServiceConfig |
            [DEFAULT]
            ...
            image_size_cap = 1099511627776
    ...
    • デフォルト値 1099511627776 (1 TB) は、最大値 9223372036854775808 までの値に置き換えることができます。利用可能なバックエンドストレージ容量によっては、値が低いとイメージのアップロードが失敗する可能性があり、値が高いとストレージの消費量が増加します。
  4. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  5. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

8.4. プロジェクトのデフォルトクォータの変更

リソース消費に基づいてワークロードを計画し、Image サービス (glance) 操作を準備するには、openstack limit コマンドを使用して、プロジェクト固有のクォータをリスト表示、表示、作成、更新、および削除できます。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. プロジェクト固有のクォータをリスト表示、表示、作成、更新、または削除します。

    • 特定のプロジェクトに関連付けられているリソース制限を一覧表示します。

      $ openstack limit list
            --project <project>
      • <project> は、リソース制限を一覧表示するプロジェクトの名前に置き換えます。
    • 特定の制限の詳細を表示します。

      $ openstack limit show <limit_id>
      • <limit_id> は、表示する制限の ID に置き換えます。
    • プロジェクト固有のリソース制限を作成します。

      $ openstack limit create
            [--description <description>]
            [--region <region>]
            --project <project>
            --service <service>
            --resource-limit <resource_limit>
            <resource_name>
      • オプション: <description> は、制限の説明に置き換えます。
      • オプション: 特定のリージョンに制限を適用する場合は、<region> をリージョンに置き換えます。
      • <project> は、制限を適用するプロジェクトの名前に置き換えます。
      • <service> は、制限を作成するリソースを担当するサービスに置き換えます。
      • <resource_limit> は、プロジェクトの制限として設定する値に置き換えます。
      • <resource_name> は、制限を作成するリソースの名前に置き換えます。
    • 特定のプロジェクトのリソース制限を更新します。

      $ openstack limit set
            [--description <description>]
            --resource-limit <resource_limit>
            <limit_id>
    • リソース制限を削除します。

      $ openstack limit delete <limit_id> [<limit_id> ...]
  3. openstackclient Pod を終了します。

    $ exit

第9章 Object Storage サービス (swift) のカスタマイズ

オブジェクトストレージサービス (Swift) の設定をカスタマイズすることで、ワークロードのパフォーマンスを最適化できます。デプロイメントのパフォーマンス、容量、信頼性のバランスを取るために、レプリケーション、リング設定、データプレーンノードを設定します。

9.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。

9.2. オブジェクトストレージのデフォルトパラメーターの変更

オブジェクトストレージサービス (Swift) の設定をカスタマイズして、パフォーマンスを最適化し、Pod の退避を防ぎます。リングパラメーターの設定、暗号化と監視の有効化、ワーカー数の調整、およびデプロイメントのニーズに基づいたリソース制限の設定を行います。

Expand
表9.1 OpenStackControlPlane CR オプション
オプション説明

swiftProxy/ceilometerEnabled

プロキシーサーバーで Ceilometer ミドルウェアを有効にします。

swiftProxy/encryptionEnabled

Key Manager サービス (barbican) を使用してオブジェクトの暗号化を有効にします。

swiftRing/minPartHours

リバランス後にリングパーティションを移動できるようになるまでの最小時間 (時間単位) を設定します。

swiftRing/partPower

Object Storage リングのビルド時に使用するパーティションのべき乗を設定します。

swiftRing/ringReplicas

Object Storage リングで使用するオブジェクトレプリカの数を設定します。

OpenStackControlPlane CR の defaultConfigOverwrite パラメーターとキーを使用することで、オブジェクトストレージサービスの以下の設定ファイルを上書きできます。

Expand
表9.2 設定ファイルのオプション
サービスキー

account-server

01-account-server.conf

container-server

01-container-server.conf

object-server

01-object-server.conf

object-expirer

01-object-expirer.conf

proxy-server

01-proxy-server.conf

留意事項
  • ワーカーの設定: デフォルトでは、オブジェクトストレージサービスは 自動 ワーカーを使用します。これは CPU コアごとに 1 つのワーカーを生成します。CPU コア数の多いノードでは、ワーカープロセスが過剰に実行される可能性があり、その結果、メモリー使用量が増加する。リソース使用量を制御するために、ワーカー数を明示的に設定してください。
  • サービス品質クラス: デフォルトでは、オブジェクトストレージコンテナーにはリソース要求や制限は設定されていません。これは ベストエフォート型の QoS クラスにつながります。メモリー使用量が多いと、ノード負荷時に Pod 退避が発生する可能性があります。リソース要求または制限を設定すると、QoS クラスが バースト可能 に変更され、リソース競合時にコンテナーの優先度が高くなります。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、swift テンプレートの swiftProxy パラメーターで Ceilometer ミドルウェアとオブジェクト暗号化を有効にします。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack-control-plane
      namespace: openstack
    spec:
      ...
      swift:
        enabled: true
        template:
          swiftProxy:
            ceilometerEnabled: true
            encryptionEnabled: true
            replicas: 2
    ...
  2. swiftRing パラメーターの下に、minPartHourspartPowerringReplicas の値を追加します。

    ...
    spec:
      ...
      swift:
        enabled: true
        template:
          swiftProxy:
            ...
          swiftRing:
            minPartHours: <number_of_hours>
            partPower: <partition_power>
            ringReplicas: <number_of_copies>
    ...
    • <number_of_hours> を、リバランス後にリングパーティションを移動できるようになるまでの最小時間 (時間単位) に置き換えてください。
    • <partition_power> を、Object Storage リングのビルド時に使用するパーティションのべき乗 (例: 12) に置き換えます。
    • <number_of_copies> を、クラスター内に必要なオブジェクトコピーの数に置き換えます。
  3. swiftStorage パラメーターの下に defaultConfigOverwrite パラメーターを追加して、object-server サービスのワーカー数を変更します。

    ...
    spec:
      ...
      swift:
        enabled: true
        template:
          swiftProxy:
            ...
          swiftRing:
            ...
          swiftStorage:
            replicas: 3
            storageClass: local-storage
            storageRequest: 10Gi
            defaultConfigOverwrite:
              01-object-server.conf: |
                [DEFAULT]
                workers = <number_of_workers>
    • <number_of_workers> を、object-server サービスで必要なワーカーの数に置き換えます。
  4. オプション: オブジェクトストレージサービスコンテナーのリソース制限を設定して、サービス品質 (QoS) クラスを BestEffort から Burstable に変更します。swift テンプレートの下に swiftProxyswiftStorageリソース を追加します。

    ...
    spec:
      ...
      swift:
        enabled: true
        template:
          swiftProxy:
            ...
            resources:
              limits:
                cpu: <cpu_limit>
                memory: <memory_limit>
              requests:
                cpu: <cpu_request>
                memory: <memory_request>
          swiftStorage:
            ...
            resources:
              limits:
                cpu: <cpu_limit>
                memory: <memory_limit>
              requests:
                cpu: <cpu_request>
                memory: <memory_request>
    ...
    • <cpu_limit> は、このサービスの Pod に対する CPU の最大絶対割り当て量 (ミリ CPU 単位) に置き換えます。たとえば、2000m に設定すると、このサービスの Pod への CPU 割り当てを 200% に制限できます。
    • <memory_limit> は、このサービスの Pod に対するメモリーの最大割り当てに置き換えます。たとえば、5Gi に設定すると、このサービスの Pod へのメモリー割り当てが 5 GiB に制限されます。
    • <cpu_request> は、このサービスの Pod に要求する CPU の最小割り当て量 (ミリ CPU 単位) に置き換えます。たとえば、500m に設定すると、このサービス用の Pod に CPU の 50% が割り当てられます。
    • <memory_request> は、このサービスの Pod に要求するメモリーの最小割り当てに置き換えます。たとえば、5Gi に設定すると、このサービス用の Pod に 5GiB のメモリーが割り当てられます。
  5. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  6. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

9.3. 外部データプレーンノード上のオブジェクトストレージのカスタマイズ

外部データプレーンノード上に Object Storage サービス (swift) をデプロイした場合は、OpenStackDataPlaneService CR に追加の ConfigMap または Secret CR を含めることで、デフォルトのサービス設定をカスタマイズできます。その後、カスタムサービス名を OpenStackDataPlaneNodeSet CR に追加します。

デフォルトのサービス設定は次のとおりです。

apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneService
metadata:
  name: <swift-customized>
spec:
  playbook: osp.edpm.swift
  dataSources:
    - secretRef:
        name: swift-conf
    - configMapRef:
        name: swift-storage-config-data
    - configMapRef:
        name: swift-ring-files
  edpmServiceType: swift

カスタムサービスを作成するときは、カスタムサービス名 (例: swift-customized) を使用し、そのカスタムサービス名を OpenStackDataPlaneNodeSet CR 内のサービスのリストに追加します。

異なるノードセットに異なる設定を適用することで、Object Storage サービスをカスタマイズすることもできます。たとえば、パフォーマンス特性が異なる 2 種類のノードがある場合、各ノードセットに固有の設定を持つ異なる設定ファイルを使用できます。

9.4. カスタムリング

既存の Object Storage サービス (swift) クラスターを更新するためのカスタムリングを作成できます。

新規ノードをクラスターに追加する場合、それらの特性が元のノードとは異なる可能性があります。カスタム調整を行わなければ、大容量の新規ノードが十分に活用されない可能性があります。また、リング内の重みが変化すると、データの分散が不均一になり、安全性が低下する可能性があります。

リングビルダーは、クラスターの規模拡大および技術の進化に合わせてオブジェクトストレージを管理するのに役立ちます。カスタムリングの作成については、Red Hat サポートにお問い合わせください。

9.5. オブジェクトストレージサービスの容量スケーリング

オブジェクトストレージサービス (Swift) クラスターの容量を拡張するには、使用量が容量しきい値を超えた場合、またはパフォーマンスが低下した場合は、ストレージデバイスを追加してください。ストレージレプリカとリングレプリカを理解することで、OpenShift とデータプレーンのノードスケーリング手法のどちらを選択するかを判断するのに役立ちます。

9.5.1. ストレージ容量とデータ冗長性

オブジェクトストレージサービスは、2 つの異なる設定値を使用します。

swiftStorage/replicas
クラスター内のストレージデバイスの総数。これは、OpenStackControlPlane CR の spec.swift.template.swiftStorage.replicas フィールドで設定されます。OpenShift デプロイメントの場合、これは PersistentVolume の数です。外部データプレーンノードのデプロイメントの場合、これはすべてのノードにおけるディスクの総数です。
swiftRing/ringReplicas
オブジェクトストレージサービスがデータの永続性を確保するために保持する、各オブジェクトのコピー数。これは、OpenStackControlPlane CR の spec.swift.template.swiftRing.ringReplicas フィールドで設定されます。この値は通常 3 に設定されており、これにより、2 つのストレージデバイスが故障してもデータが失われることが保証されます。

これらの値はそれぞれ独立して機能します。たとえば、ringReplicas: 3 および swiftStorage/replicas: 5 を設定すると、オブジェクトストレージサービスは、利用可能な 5 つのストレージデバイスのうち 3 つに各オブジェクトを分散します。この設定は、データの冗長性と拡張性の両方を提供します。

9.5.2. スケーリングアプローチ

OpenShift のデプロイメント
OpenStackControlPlane CR の swiftStorage/replicas の 値を増やすことでスケールします。新しいレプリカごとに、異なる OpenShift ノード上に PersistentVolume が作成されます。swift-operator は、 ストレージデバイスを追加すると、自動的にリングの再バランス処理を実行します。OpenShift のデプロイメントでは、ノードごとに 1 つの PersistentVolume のみがサポートされます。
外部データプレーンノードのデプロイメント
OpenStackDataPlaneNodeSet CR の edpm_swift_disks リストにストレージデバイスを追加することで拡張します。ストレージデバイスは、すべてのノードにグローバルに追加することも、特定のノードに追加することもできます。このアプローチは、大規模なデプロイメントにおいてより高い柔軟性を提供し、ノードごとに複数のストレージデバイスをサポートします。リングのバランス調整とリングの分配には、手作業による介入が必要です。

既存のボリュームのサイズ変更は、複数のレイヤー (PV、論理ボリューム、ファイルシステム) で手動操作が必要となるため、同期の問題やデータ損失の可能性が生じるため、推奨されません。

9.5.3. リングの再バランスとデータ移動

ストレージデバイスを追加する場合は、オブジェクトストレージリングを再バランスして、新しいデバイス全体にデータを分散させる必要があります。プロセス:

  • 新しいストレージデバイスを含めるようにリング設定を更新します
  • バックグラウンドでのデータ移動をトリガーし、オブジェクトをすべてのデバイスに再分配します。
  • 連続するリバランス間の minPartHours 間隔を尊重します (デフォルト:24 時間)
  • クラスターのサイズとネットワーク帯域幅によっては、完了までに数時間から数日かかる場合があります。
注記

24 時間以内の minPartHours 間隔で複数のリング変更が発生した場合、データの耐久性を確保するために、100% のレプリカカバレッジを確認した後、手動でリバランスを行う必要があります。

リバランス中も、オブジェクトストレージサービスは通常どおり動作し続けます。データ転送は、サービスの中断なしにバックグラウンドで実行されます。

9.6. OpenShift ノードにおけるオブジェクトストレージサービスの容量拡張

swiftStorage の レプリカ設定を使用して OpenShift ノードに PersistentVolumes (PV) を追加することで、増大するストレージ需要に対応するためにオブジェクトストレージサービス (Swift) クラスターの容量を増やすことができます。

制限事項
  • 既存の PersistentVolume の サイズを変更しないでください。サイズ変更には複数のレイヤー (PV、論理ボリューム、ファイルシステム) での手動操作が必要となり、同期の問題やデータ損失を引き起こす可能性があります。常に新しいレプリカを追加することでスケールアップしてください。

前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
  • お使いのストレージクラスには、追加の PersistentVolume を プロビジョニングするのに十分な容量があります。
  • 最近リングのリバランス処理が実行されていないことを確認しました。詳細は、オブジェクトストレージリングの再バランス を参照してください。

手順

  1. OpenStackControlPlane CR を更新して、swiftStorage レプリカを必要な数まで増やします。

    $ oc patch openstackcontrolplane $(oc get oscp -n openstack -o custom-columns=NAME:.metadata.name --no-headers) -n openstack --type=merge -p '{"spec": {"swift": {"template": {"swiftStorage": {"replicas": <required_count>}}}}}'
    • <required_count> を、必要なストレージレプリカの総数に置き換えてください。たとえば、レプリカ数を 3 から 5 に増やすには、<required_count> を5 に設定します。
  2. 新しい PVC が作成され、ストレージクラスに正常にバインドされていることを確認します。

    $ oc get pvc -n openstack -l service=swift

    出力例

    NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
    swift-swift-storage-0    Bound    pvc-3c7d003e-529c-47c0-ae97-5c6159003a2f   100Gi      RWO            swift-storage    10d
    swift-swift-storage-1    Bound    pvc-8f2a1b9c-6d4e-11ec-90d6-0242ac120003   100Gi      RWO            swift-storage    10d
    swift-swift-storage-2    Bound    pvc-a3c4d5e6-6d4e-11ec-90d6-0242ac120003   100Gi      RWO            swift-storage    10d
    swift-swift-storage-3    Bound    pvc-b7e8f9a0-6d4e-11ec-90d6-0242ac120003   100Gi      RWO            swift-storage    1m
    swift-swift-storage-4    Bound    pvc-c9f0a1b2-6d4e-11ec-90d6-0242ac120003   100Gi      RWO            swift-storage    1m

    すべての PVC は バインド済みステータス を表示する必要があります。

  3. すべての swift-storage Pod が作成され、実行 状態になっていることを確認してください。

    $ oc get pods -n openstack -l service=swift

    出力例

    NAME                      READY   STATUS    RESTARTS   AGE
    swift-proxy-0             3/3     Running   0          10d
    swift-proxy-1             3/3     Running   0          10d
    swift-storage-0           4/4     Running   0          10d
    swift-storage-1           4/4     Running   0          10d
    swift-storage-2           4/4     Running   0          10d
    swift-storage-3           4/4     Running   0          2m
    swift-storage-4           4/4     Running   0          2m

    すべての Pod は、STATUS: Running と表示され、すべてのコンテナーが準備完了している必要があります。

  4. 自動リングリバランスが完了するまでお待ちください。

    $ oc get job -n openstack -l job-name=swift-ring-rebalance

    出力例

    NAME                   COMPLETIONS   DURATION   AGE
    swift-ring-rebalance   1/1           45s        3m

    COMPLETIONS1/1 と表示されたら、作業は完了です。

    注記

    swift-operator は、 ストレージデバイスを追加すると、自動的にリングの再バランスを実行します。ただし、リバランスは minPartHours 間隔 (デフォルト:24 時間) を尊重します。この 24 時間以内に複数のリバランスが発生した場合、オペレーターは間隔が経過するのを待たずに処理を実行します。その代わりに、即座にリバランスがトリガーされますが、すべてのデータレプリカが新しいデバイスに移行するわけではありません。このシナリオでは、レプリカのカバー率が 100% であることを確認した後、手動でリバランスを行う必要があります。詳細は、オブジェクトストレージリングの再バランス を参照してください。

  5. オブジェクトストレージクラスターが更新された容量を認識していることを確認してください。

    $ oc rsh -c proxy-server $(oc get pods -n openstack -l service=swift,component=swift-proxy -o name | head -n 1) swift-recon --diskusage

    出力例

    [2026-04-16 10:30:15] Checking disk usage on 5 hosts...
    -> 192.168.122.100:6200: 0.00% used (100.00 GiB / 100.00 GiB)
    -> 192.168.122.101:6200: 0.00% used (100.00 GiB / 100.00 GiB)
    -> 192.168.122.102:6200: 0.00% used (100.00 GiB / 100.00 GiB)
    -> 192.168.122.103:6200: 0.00% used (100.00 GiB / 100.00 GiB)
    -> 192.168.122.104:6200: 0.00% used (100.00 GiB / 100.00 GiB)

    ホスト数と総容量は、想定していた設定と一致しています。

検証

  • リバランス後、すべてのオブジェクトレプリカが正しく配置されていることを確認してください。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'

    出力例

    Queried 1024 objects for dispersion reporting, 3s, 0 retries
    100.00% of object copies found (3072 of 3072)
    Queried 1024 containers for dispersion reporting, 2s, 0 retries
    100.00% of container copies found (3072 of 3072)

    別のスケーリング操作またはリングのリバランスを実行する前に、すべての値が 100.00% になっていることを確認してください。

9.7. 外部データプレーンノードにおけるオブジェクトストレージサービスの容量拡張

データ増加に対応するため、既存の外部データプレーンノードにストレージデバイスを追加するか、クラスターに新しいノードを追加することで、オブジェクトストレージサービス (Swift) クラスターの容量を拡張できます。

前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
  • データプレーンノードには、追加のストレージデバイスが利用可能です。
  • 最近リングのリバランス処理が実行されていないことを確認しました。詳細は、オブジェクトストレージリングの再バランス を参照してください。

手順

  1. OpenStackDataPlaneNodeSet CR に新しいストレージデバイスを追加します。

    • ノードセット内のすべてのノードにディスクを追加するには、nodeTemplate.ansible.ansibleVars.edpm_swift_disks リストを更新します。

      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneNodeSet
      metadata:
        name: openstack-edpm-swift
        namespace: openstack
      spec:
        ...
        nodeTemplate:
          ansible:
            ansibleVars:
              edpm_swift_disks:
              - device: /dev/vdb
                path: /srv/node/vdb
                region: 0
                weight: 4000
                zone: 0
              - device: /dev/vdc
                path: /srv/node/vdc
                region: 0
                weight: 4000
                zone: 0
              - device: /dev/vdd
                path: /srv/node/vdd
                region: 0
                weight: 4000
                zone: 0
        ...
    • ストレージデバイスを特定のノードにのみ追加するには、nodes.<node_name>.ansible.ansibleVars.edpm_swift_disks リストを更新します。

      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneNodeSet
      metadata:
        name: openstack-edpm-swift
        namespace: openstack
      spec:
        ...
        nodes:
          edpm-swift-0:
            ansible:
              ansibleVars:
                edpm_swift_disks:
                - device: /dev/vdd
                  path: /srv/node/vdd
                  region: 0
                  weight: 1000
                  zone: 0
            ...
        ...

      各項目の説明:

      device
      ストレージディスクのブロックデバイスパスを指定します。
      path
      オブジェクトストレージサービスがディスクにアクセスするマウントポイントパスを指定します。
      region
      ディスクのリージョン識別子を指定します。デフォルトのリージョンには 0 を 使用してください。
      weight
      ディスクの容量 (GiB 単位) に基づいて、ディスクの相対的な重量を指定します。重みによって、オブジェクトストレージリング内のディスクに割り当てられるパーティションの数が決まります。
      zone
      ディスクのゾーン識別子を指定します。デフォルトゾーンには 0 を 使用してください。
  2. 更新された OpenStackDataPlaneNodeSet CR を適用します。

    $ oc apply -f <nodeset_file>.yaml -n openstack
  3. Swift サービスを実行する OpenStackDataPlaneDeployment CR を作成して、データプレーンノードに変更をデプロイします。

    $ oc apply -n openstack -f - << EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: swift-storage-expansion
    spec:
      servicesOverride:
        - swift
      nodeSets:
        - <nodeset_name>
    EOF
    • <nodeset_name> をOpenStackDataPlaneNodeSet CR の名前に置き換えてください。
  4. デプロイメントが完了するまで待ちます。

    $ oc wait openstackdataplanedeployment swift-storage-expansion --for condition=Ready --timeout=600s -n openstack
  5. リングリバランスを実行して、新しいストレージデバイス全体にデータを分散します。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-tool rebalance'
    注記

    リングのリバランスは、minPartHours 間隔 (デフォルト:24 時間) を尊重します。この 24 時間以内に複数のリング変更が発生した場合は、データの耐久性を確保するために、レプリカのカバー率が 100% であることを確認した後、手動でリバランスを行う必要があります。詳細は、オブジェクトストレージリングの再バランス を参照してください。

  6. 更新されたリングをデータプレーンノードにプッシュします。

    $ oc delete --ignore-not-found --wait openstackdataplanedeployment swift-ring-update -n openstack
    $ oc apply -n openstack -f - << EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: swift-ring-update
    spec:
      ansibleTags: swiftrings
      servicesOverride:
        - swift
      nodeSets:
        - <nodeset_name>
    EOF
  7. リングアップデートのデプロイメントが完了するまでお待ちください。

    $ oc wait openstackdataplanedeployment swift-ring-update --for condition=Ready --timeout=300s -n openstack

検証

  1. オブジェクトストレージクラスターが更新された容量を認識していることを確認してください。

    $ oc rsh -c proxy-server $(oc get pods -n openstack -l service=swift,component=swift-proxy -o name | head -n 1) swift-recon --diskusage

    出力例

    [2026-04-16 10:30:15] Checking disk usage on 8 hosts...
    -> edpm-swift-0:6200: 0.00% used (100.00 GiB / 100.00 GiB)
    -> edpm-swift-0:6201: 0.00% used (100.00 GiB / 100.00 GiB)
    -> edpm-swift-0:6202: 0.00% used (100.00 GiB / 100.00 GiB)
    ...

    出力には、更新された総容量を持つすべてのノードとディスクが表示されます。

  2. リバランス後、すべてのオブジェクトレプリカが正しく配置されていることを確認してください。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'

    出力例

    Queried 1024 objects for dispersion reporting, 3s, 0 retries
    100.00% of object copies found (3072 of 3072)
    Queried 1024 containers for dispersion reporting, 2s, 0 retries
    100.00% of container copies found (3072 of 3072)

    別のスケーリング操作またはリングのリバランスを実行する前に、すべての値が 100.00% になっていることを確認してください。

9.8. オブジェクトストレージリングのリバランス

オブジェクトストレージサービス (swift) トポロジーを変更すると、たとえば PersistentVolumes を追加または削除したり、swiftStorage レプリカを変更したり、データプレーンノードにノードまたはディスクを追加したりすると、swift-operator はリングを再バランスします。外部データプレーンノードを使用する場合は、更新されたリングをデータプレーンノードにプッシュする必要があります。リバランスを実行した後は、次のリバランスを実行する前に、すべてのデータが新しい場所に移動されたことを確認する必要があります。

注記

連続するリバランスは、minPartHours 間隔を遵守する必要があります。スウィフトリングビルダーが残り時間を 0:00:00 と 表示した場合にのみ、リバランスが可能です。

前提条件

  • リバランスを行う前に、分散ツールにデータを入力しました。このコマンドはクラスターごとに一度だけ実行すれば十分です。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-populate'

    これにより、リング内のすべてのパーティションに分散された一連のテストオブジェクトとコンテナーが作成されます。分散ツールはこれらを使用して、すべてのレプリカが想定された場所に配置されていることを確認します。テストオブジェクトが現在のリングレイアウトに従って配置されるように、リバランスを実行する前にこのコマンドを実行する必要があります。

手順

  1. リングの再バランスを手動で実行する:

    重要

    前回のリバランスが完全に複製された後にのみ、リバランスが実行されます。レプリケーションが完了する前にリバランスを行うと、データが複数回移動される可能性があり、一時的なデータ利用不能のリスクが高まります。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-tool rebalance'

    これにより、すべてのオブジェクトストレージリングのバランスが再調整され、swift-ring-files ConfigMap 内のリングファイルが更新されます。

  2. 外部データプレーンノードを使用する場合は、更新されたリングをデータプレーンノードにプッシュしてください。以前のリング更新デプロイメントをすべて削除し、swiftrings Ansible タグを使用して swift サービスのみを実行する新しい OpenStackDataPlaneDeployment CR を作成します。これにより、完全なデプロイメントを実行することなく、更新されたリングファイルがすべてのデータプレーンノードに配布されます。

    $ oc delete --ignore-not-found --wait openstackdataplanedeployment swift-ring-update -n openstack
    $ oc apply -n openstack -f - << EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: swift-ring-update
    spec:
      ansibleTags: swiftrings
      servicesOverride:
        - swift
      nodeSets:
        - <nodeset_name>
    EOF
    • <nodeset_name> をOpenStackDataPlaneNodeSet CR の名前に置き換えてください。
  3. デプロイメントが完了するまで待ちます。

    $ oc wait openstackdataplanedeployment swift-ring-update --for condition=Ready --timeout=300s -n openstack
  4. すべてのリングが整合しており、レプリケーションが進行していることを確認することで、クラスターの健全性を検証します。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-recon -rT --md5'
    • すべてのリングの MD5 ハッシュ値がノード間で一貫していることを確認してください。
    • レプリケーションのタイムスタンプを確認してください。最も古い完了時刻から最も長いレプリケーション時刻を引いた値が、最後のレプリケーション処理の開始時刻の最も早い時刻になります。この開始時刻は、リングの ConfigMap が更新され、すべてのノードが新しいリングとの完全なレプリケーション処理を完了したことが確認された後でなければなりません。
  5. または、オブジェクトレプリケーターの ログを直接確認して、完全なレプリケーション処理が完了したことを検証することもできます。

    $ oc logs --timestamps -l component=swift-storage -c object-replicator --tail 1000 | grep replicated

    レプリケーション処理の完了を示すログエントリーを探してください。例:

    $ oc logs --timestamps -c object-replicator swift-storage-0
    2026-04-02T10:44:13.863401909Z object-replicator: Object replication complete.  (33.00 minutes)

    完了タイムスタンプから所要時間を引いたものが、パスの開始時刻になります。たとえば、完了時刻が 10:44:13 で所要時間が 33.00 分 の場合、パスの開始時刻は 10:11:13 となります。この開始時刻は、リングの ConfigMap が更新された後でなければなりません。ConfigMap の更新前に処理が開始された場合、古いリングが使用されているため、次の完全な処理が完了するまで待つ必要があります。

  6. swift-dispersion-report を 実行して、すべてのレプリカが正しく配置されていることを確認してください。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'

    出力には、すべてのレプリカが見つかったオブジェクトとコンテナーの割合が表示されます。次のリバランスを実行する前に、すべての値が 100% になっている必要があります。

9.9. オブジェクトストレージサービスクラスターの健全性を確認しています。

長期のデータ可用性、耐久性、および永続性を確保するために、Object Storage サービス (swift) ではバックグラウンドで多くのプロセスが実行されます。以下に例を示します。

  • auditors は定期的にデータベースおよびオブジェクトファイルを再読み取りし、チェックサムを使用してそれらを比較して、サイレントビットロットがないことを確認します。チェックサムと一致しなくなったデータベースまたはオブジェクトファイルは隔離され、そのノードでは読み取ることができなくなります。この場合、replicators は他のレプリカのいずれかをコピーして、再びローカルコピーが利用できる状態にします。
  • ディスクやノードを置き換えた場合、またはオブジェクトが隔離された場合、オブジェクトおよびファイルが消失することがあります。この場合、replicators は欠けているオブジェクトまたはデータベースファイルを他のノードのいずれかにコピーします。

Object Storage サービスには swift-recon と呼ばれるツールが含まれています。このツールは、すべてのノードからデータを収集してクラスターの全体的な健全性を確認します。swift-recon コマンドラインユーティリティーを使用して、アカウント、コンテナー、およびオブジェクトサーバーからメトリクスを取得できます。

手順

  1. コントローラーノードのいずれかにログインします。
  2. 以下のコマンドを実行します。

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-recon -arqlT --md5'
    • (オプション) --all オプションを使用して、追加の出力を返します。

      このコマンドは、リング上のすべてのサーバーに対して、以下のデータのクエリーを実行します。

      • Async pendings: クラスターの負荷が非常に高くプロセスがデータベースファイルを十分な速度で更新できない場合、一部の更新は非同期で行われます。これらの数は徐々に減少します。
      • Replication metrics: レプリケーションのタイムスタンプを確認します。完全なレプリケーションパスは頻繁に行われ、エラーはほとんど発生しません。古いエントリー (例: 6 カ月前のタイムスタンプを持つエントリー) ば、そのノードでのレプリケーションが過去 6 カ月間完了していないことを意味します。
      • Ring md5sums: これにより、すべてのノードですべてのリングファイルの一貫性が確保されます。
      • swift.conf md5sums: これにより、すべてのノードですべての設定ファイルの一貫性が確保されます。
      • Quarantined files: すべてのノードについて、隔離されたファイルがない (あるいは、ほとんどない) はずです。
      • Time-sync: すべてのノードが同期されている必要があります。

第10章 Shared File Systems サービス (manila) のカスタマイズ

Shared File Systems サービス (manila) を設定することで、複数のインスタンス、ベアメタルノード、またはコンテナーに対して共有ファイルシステムを提供できます。サービスレベルに応じた共有タイプを作成し、リソース制御のためにクォータを管理し、多様なワークロードのニーズに対応します。

10.1. 前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
  • Shared File Systems サービスを使用するために、エンドユーザーには少なくとも 1 つの共有タイプが必要です。
  • コンピュートインスタンスを共有プロバイダーネットワークに接続するには、ユーザーが追加の Networking サービス (neutron) ポートを追加する必要があります。

10.2. Shared File Systems サービス共有タイプの作成

共有タイプを作成して、Shared File Systems サービス (manila) スケジューラーがスケジュール決定を行うために使用するサービスのタイプ、およびドライバーが共有の作成を制御するために使用するサービスのタイプを定義できます。

共有タイプには、バックエンドをフィルタリングするための説明と追加の仕様 (driver_handles_share_serverssnapshot_support など) が含まれます。

ユーザーが Shared File Systems サービスを使用するには、少なくとも 1 つの共有タイプが必要であり、ユーザーは使用可能な共有タイプに一致する共有のみを作成できます。

デフォルトでは、共有タイプはパブリックです。これは、すべてのクラウドプロジェクトで使用できることを意味します。ただし、特定のプロジェクト内で使用するプライベート共有タイプを作成できます。

次の手順例では、driver_handles_share_servers パラメーター (DHSS) を使用します。これは true または false に設定できます。

  • CephFS-NFS およびネイティブ CephFS の場合、DHSS を false に設定します。
  • その他のバックエンドでは、カスタムリソース (CR) 設定に基づき、DHSS を true または false に設定できます。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 共有タイプを作成するには、次のコマンドを実行します。

    $ openstack share type create default <driver_handles_share_servers>
    • <driver_handles_share_servers>true または false に置き換えます。
  3. デフォルトの共有タイプに仕様を追加するか、別のバックエンドで使用する追加の共有タイプを作成します。この例では、CephFS バックエンドを選択するようにデフォルトの共有タイプを設定します。また、NetApp driver_handles_share_servers=true バックエンドを使用する追加の共有タイプを設定します。

    $ openstack share type create default false \
      --extra-specs share_backend_name='cephfs'
    $ openstack share type create netapp true \
      --extra-specs share_backend_name='netapp_ontap'
  4. openstackclient Pod を終了します。

    $ exit

10.3. Shared File Systems サービスの共有タイプの比較

共有タイプを作成して、共有の機能を定義できます。次の表は、共有タイプとその機能を説明しています。

Expand
表10.1 共有タイプ
共有タイプ説明

driver_handles_share_servers

true または false

共有ネットワークを使用してファイル共有を作成する権限を付与します。

snapshot_support

true または false

ファイル共有のスナップショットを作成する権限を付与します。

create_share_from_snapshot_support

true または false

共有スナップショットのクローンを作成する権限を付与します。

revert_to_snapshot_support

true または false

ファイル共有を最新のスナップショットに戻す権限を付与します。

mount_snapshot_support

true または false

スナップショットをエクスポートおよびマウントする権限を付与します。

replication_type

dr

障害復旧用のレプリカを作成する権限を付与します。1 度に許可されるアクティブなエクスポートは 1 つだけです。

readable

読み取り専用レプリカを作成する権限を付与します。1 度に許可される書き込み可能なアクティブなエクスポートは 1 つだけです。

writable

読み取り/書き込みレプリカを作成する権限を付与します。共有ごとに 1 度に任意の数のアクティブなエクスポートが許可されます。

availability_zones

1 つまたは複数のアベイラビリティーゾーンのリスト

リスト表示されるアベイラビリティーゾーンでのみ共有を作成する権限を付与します。

10.4. 管理/管理解除を使用した共有の追加と削除

Shared File Systems サービス (manila) の管理/管理解除機能を使用して、ストレージ内にすでに存在するファイル共有を管理できます。ユーザーは、アクセス権の付与、マウント、サイズ変更などの操作を、Shared File Systems サービス共有に対して実行する場合と同じ方法で、管理対象の共有に対して実行できます。

driver_handles_share_servers (DHSS) パラメーターが true に設定されている共有と、DHSS が false に設定されている共有のライフサイクルを管理できます。DHSS=true の共有を管理するには、その共有を含む共有サーバーも管理する必要があります。

共有の管理を解除すると、共有は削除されずに、Shared File Systems サービスの管理から削除されます。共有に依存スナップショットまたは共有レプリカがある場合、スナップショットまたは共有レプリカが削除されている場合にのみ、Shared File Systems サービスから共有を削除できます。

制限事項
  • ドライバーは、管理/管理解除機能をサポートする必要があります。
  • 管理/管理解除機能は、ネイティブ CephFS または CephFS-NFS バックエンドをサポートしません。CephFS 共有を Shared File Systems サービスの管理から削除できます。ただし、既存の CephFS 共有を Shared File Systems サービスの管理下に置くことはできません。
  • 共有を Shared File Systems サービスの管理下に置くと、既存のクライアントは切断されます。Shared File Systems サービスの管理から共有を削除しても、既存のクライアントは接続されたままになります。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. ファイル共有を管理します。

    $ openstack share adopt
        --name <name>
        --description <description>
        --share-type <share_type>
        --driver-options [<key=value> [<key=value> ...]]
                            [--public] [--share-server-id <share_server_id>] \
                            [--wait] <service_host> <protocol> <export_path>
    • <name> を、わかりやすい共有名に置き換えます。
    • <description> を、共有の説明に置き換えます。
    • <share_type> を、共有の共有タイプに置き換えます。
    • <key=value> を、共有に関連付けるドライバープロパティーのキーと値のペアに置き換えます。イメージに関連付けるキーと値のペアは複数使用できます。
    • <share_server_id> を、共有サーバーの ID に置き換えます。
    • <service_host> を、ホストサーバーに置き換えます。
    • <protocol> を、共有の NAS プロトコル (例: nfs) に置き換えます。
    • <export_path> を、共有のエクスポートパスに置き換えます。
  3. 共有が利用可能であることを確認します。

    $ openstack share show <name>
  4. ファイル共有の管理を解除します。

    $ openstack share abandon [--wait] <name>
  5. openstackclient Pod を終了します。

    $ exit

10.5. プロジェクト、ユーザー、共有タイプのデフォルトクォータ量

通知されないままシステム容量をすべて使用することを防止するために、Shared File Systems サービス (manila) のクォータを設定できます。Shared File Systems サービスはいくつかのデフォルトクォータを強制しますが、デフォルトのクォータをオーバーライドして、個々のプロジェクトに異なる使用制限を設定できます。

プロジェクト内のすべてのユーザー、特定のプロジェクトユーザー、またはプロジェクトユーザーが使用する共有タイプに対して、次のクォータを更新できます。share-type クォータはプロジェクトレベルでのみ設定できます。特定のプロジェクトユーザーに share-type クォータを設定することはできません。

Expand
表10.2 Quotas
クォータ説明

shares

作成できるシェアの数

snapshots

作成できるスナップショットの数

share-groups

作成できる共有グループの合計数

share-group-snapshots

作成できる共有グループスナップショットの合計数

share-networks

作成できる共有ネットワークの合計数

share-replicas

作成できる共有レプリカの合計数

gigabytes

すべての共有に割り当てることができる合計サイズ (GB 単位)

snapshot-gigabytes

共有のすべてのスナップショットに割り当てることができる合計サイズ (GB 単位)。

replica-gigabytes

すべての共有レプリカで割り当てることができる合計サイズ (GB 単位)。

10.5.1. プロジェクト、ユーザー、共有タイプのクォータを表示する

openstack share quota show コマンドを使用して、Shared File Systems サービス (manila) のプロジェクト、ユーザー、または共有タイプのクォータを表示できます。--user および --share-type コマンドオプションは、相互に排他的です。

  • --user オプションを指定すると、プロジェクト内のユーザーのクォータを表示できます。
  • --user オプションを除外すると、プロジェクト内のすべてのユーザーに適用されるクォータを表示できます。
  • --share-type オプションを指定すると、プロジェクト内の特定の共有タイプのクォータを表示できます。

以下の手順では、値を慎重に入力してください。Shared File Systems サービスは、誤った値を検出したり報告したりしません。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. クォータを表示するには、次のコマンドを使用します。

    • プロジェクトのクォータを表示します。

      $ openstack share quota show <af2838436f3f4cf6896399dd97c4c050>
      • <af2838436f3f4cf6896399dd97c4c050> をプロジェクト ID に置き換えます。
    • プロジェクトユーザーのクォータを表示します。

      $ openstack share quota show <af2838436f3f4cf6896399dd97c4c050> \
        --user <81ebb491dd0e4c2aae0775dd564e76d1>
      • <81ebb491dd0e4c2aae0775dd564e76d1> をユーザー ID に置き換えます。
    • プロジェクト内の特定の共有タイプのクォータを表示します。

      $ openstack share quota show <af2838436f3f4cf6896399dd97c4c050> \
        --share-type <dhss_false>
      • <dhss_false> を、確認する共有タイプに置き換えます。
  3. openstackclient Pod を終了します。

    $ exit

10.5.2. プロジェクト、ユーザー、および共有タイプのクォータを更新する

openstack share quota set コマンドを使用して、すべてのプロジェクトユーザー、特定のプロジェクトユーザー、またはプロジェクト内の共有タイプのクォータを更新できます。share-type クォータはプロジェクトレベルでのみ設定でき、特定のプロジェクトユーザーに対しては設定できません。

以下の手順では、値を慎重に入力してください。Shared File Systems サービスは、誤った値を検出したり報告したりしません。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. クォータを更新するには、次のコマンドを使用します。

    • プロジェクトのすべてのユーザーについてクォータを更新します。

      $ openstack share quota set <project_id> \
        [--shares <share_quota> \
        --gigabytes <gigabytes_quota> \
        …]
      • <project_id> を、プロジェクト ID に置き換えます。この値はプロジェクト名ではなく、プロジェクト ID である必要があります。
      • <share_quota> を、プロジェクトのクォータとして設定する共有の合計数に置き換えます。
      • <gigabytes_quota> を、プロジェクト内のすべての共有に割り当てる合計サイズ (GB 単位) に置き換えます。
    • プロジェクト内の特定ユーザーのクォータを更新します。

      $ openstack share quota set <project_id> \
        --user <user_id> \
        [--shares <share_quota> \
        --gigabytes <gigabytes_quota> \
        …]
      • <user_id> をユーザー ID に置き換えます。値には、ユーザー名ではなくユーザー ID を使用する必要があります。
      • <share_quota> を、プロジェクト内のユーザーのクォータとして設定する共有の合計数に置き換えます。
      • <gigabytes_quota> を、プロジェクト内のユーザーの共有に割り当てる合計サイズ (GB 単位) に置き換えます。
    • 特定の共有タイプを使用するすべてのユーザーについてクォータを更新します。

      $ openstack share quota set <project_id> \
        --share-type <share_type> \
        [--shares <share_quota>
        --gigabytes <gigabytes_quota> \
        …]
      • <share_type> を、クォータの適用先となる共有タイプに置き換えます。
      • <share_quota> を、共有タイプのクォータとして設定する共有の合計数に置き換えます。
      • <gigabytes_quota> を、プロジェクト内のその共有タイプの共有に割り当てる合計サイズ (GB 単位) に置き換えます。

検証

  1. openstack share quota set コマンドは出力を生成しません。クォータが正常に更新されたことを確認するには、openstack share quota show コマンドを使用します。
  2. openstackclient Pod を終了します。

    $ exit

10.5.3. プロジェクト、ユーザー、共有タイプのクォータをリセットする

Shared File Systems サービス (manila) でプロジェクト、ユーザー、共有タイプのクォータオーバーライドを削除して、クォータをデフォルト値に戻すことができます。openstack share quota delete コマンドを使用して、クォータをデフォルト値にリセットします。

以下の手順では、値を慎重に入力してください。Shared File Systems サービスは、誤った値を検出したり報告したりしません。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. クォータをリセットするには、次のコマンドを使用します。

    • プロジェクトクォータをリセットします。

      $ openstack share quota delete <project_id>
      • <project_id> を、プロジェクト ID に置き換えます。この値はプロジェクト名ではなく、プロジェクト ID である必要があります。
    • 特定ユーザーのクォータをリセットします。

      $ openstack share quota delete <project_id> --user <user_id>
      • <user_id> をユーザー ID に置き換えます。値はユーザー名ではなく、ユーザー ID である必要があります。
    • プロジェクトユーザーが使用する共有タイプのクォータをリセットします。

      $ openstack share quota delete <project_id> --share-type <share_type>
      • <share_type> を、リセットする共有タイプに置き換えます。

検証

  1. openstack share quota delete コマンドは出力を生成しません。クォータが正常にリセットされたことを確認するには、openstack share quota show コマンドを使用します。
  2. すべてのプロジェクトのデフォルトクォータをリスト表示します。デフォルトクォータは、オーバーライドのないプロジェクトに適用されます。

    $ openstack share quota show <project> --defaults
  3. openstackclient Pod を終了します。

    $ exit

10.5.4. プロジェクトのデフォルトのクォータ値を更新する

クォータのオーバーライドが設定されていないすべてのプロジェクトで、Shared File System サービス (manila) に適用されるクォータのデフォルト値を更新できます。

次のクォータオプションのデフォルト値を更新できます。

Expand
表10.3 クォータオプション
オプション説明

--shares <shares>

shares クォータに新しい値を追加します。

--snapshots <snapshots>

snapshots クォータに新しい値を追加します。

--share-groups <share_groups>

share-groups クォータに新しい値を追加します。

--share-group-snapshots <share_group_snapshots

share-group-snapshots クォータに新しい値を追加します。

--share-networks <share_networks>

share-networks クォータに新しい値を追加します。

--share-replicas <share_replicas>

share-replicas クォータに新しい値を追加します。

--gigabytes <gigabytes>

gigabytes クォータに新しい値を追加します。

--snapshot-gigabytes <snapshot_gigabytes>

snapshot-gigabytes クォータに新しい値を追加します。

--replica-gigabytes <replica_gigabytes>

replica-gigabytes クォータに新しい値を追加します。

手順

  1. ワークステーションから openstackclient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. openstack share quota update --class コマンドの使用状況のステートメントを表示します。

    $ openstack share quota set --class
    usage: openstack share quota update --class [--shares <shares>] [--snapshots <snapshots>]
                                               [--gigabytes <gigabytes>]
                                               [--snapshot-gigabytes <snapshot_gigabytes>]
                                               [--share-networks <share_networks>]
                                               [--share-replicas <share_replicas>]
                                               [--replica-gigabytes <replica_gigabytes>]
                                                <class_name>
    注記

    パラメーター <class_name> は位置引数です。クォータが設定されるクォータクラスを特定します。このパラメーターの値を default に設定します。他のクォータクラスはサポートされません。

  3. 使用状況のステートメントからの情報を使用して、デフォルトのクォータを更新します。以下の例では、ファイル shares および gigabytes のデフォルトクォータを更新しています。

    $ openstack share quota set --class default \
      --shares 30 \
      --gigabytes 512

検証

  1. すべてのプロジェクトのデフォルトのクォータをリスト表示して、デフォルトのクォータ値がリセットされたことを確認します。

    $ openstack share quota show <project> --defaults
  2. openstackclient Pod を終了します。

    $ exit

10.6. 共有ファイルシステムの変更通知を有効にする

共有ライフサイクル中に発生するさまざまなイベントについて、Shared File Systems サービス (manila) で通知を有効にできます。

これらの通知は、次の目的で使用できるテレメトリーデータを供給します。

  • 監査、トラブルシューティング、監視操作
  • メトリクスの収集と処理のために Ceilometer などの他のサービスと統合する

Shared File Systems サービスは、設定済みのメッセージキューへの通知配信に RabbitMQ メッセージブローカーソフトウェアを使用します。サービスは、コントロールプレーンレベルで設定されたグローバルな notificationBus 設定を継承します。この手順は、グローバル設定とは異なる、このサービス専用の RabbitMQ クラスターを設定する必要がある場合にのみ使用してください。

手順

  1. OpenStackControlPlane CR ファイル (openstack_control_plane.yaml) を開き、manila テンプレートに notificationsBus パラメーターを追加して、トランスポート URL を要求する際に使用する RabbitMQ クラスター名を指定します。

    注記

    notificationsBusInstance パラメーターは非推奨です。notificationsBusInstance を使用している既存のデプロイメントは、自動的に notificationsBus インターフェイスを使用するように移行されます。

    kind: OpenStackControlPlane
    spec:
      ...
      manila:
        template:
          ...
          notificationsBus:
            cluster: rabbitmq
          customServiceConfig: |
    ...

    通知を無効にするには、manila テンプレートから notificationsBus パラメーターを削除し、コントロールプレーンを更新してください。

  2. コントロールプレーンを更新します。

    $ oc apply -f openstack_control_plane.yaml -n openstack
  3. Red Hat OpenShift Container Platform (RHOCP) が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。

    $ oc get openstackcontrolplane -n openstack

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る