4.12. ローカルストレージを使用した永続ストレージ


4.12.1. ローカルストレージの概要

ローカルストレージをプロビジョニングするには、次のいずれかのソリューションを使用できます。

  • HostPath Provisioner (HPP)
  • Local Storage Operator (LSO)
  • Logical Volume Manager (LVM) Storage
警告

これらのソリューションは、ノードローカルストレージのプロビジョニングのみをサポートします。ワークロードは、ストレージを提供するノードにバインドされます。ノードが使用できなくなると、ワークロードも使用できなくなります。ノード障害が発生したときにワークロードの可用性を維持するには、アクティブまたはパッシブのレプリケーションメカニズムにより、ストレージデータのレプリケーションを確実に実行する必要があります。

4.12.1.1. HostPath Provisioner 機能の概要

HostPath Provisioner (HPP) を使用すると、次の操作を実行できます。

  • ローカルストレージをプロビジョニングするために、ホストファイルシステムパスをストレージクラスにマップする。
  • ストレージを使用するために、ストレージクラスを静的に作成してノードにファイルシステムパスを設定する。
  • ストレージクラスに基づいて永続ボリューム (PV) を静的にプロビジョニングする。
  • 基盤となるストレージトポロジーを考慮しながら、ワークロードと PersistentVolumeClaim (PVC) を作成する。
注記

HPP はアップストリームの Kubernetes で利用できます。ただし、アップストリームの Kubernetes から HPP を使用することは推奨しません。

4.12.1.2. Local Storage Operator の機能の概要

Local Storage Operator (LSO) を使用すると、次の操作を実行できます。

  • デバイス設定を変更せずに、ストレージデバイス (ディスクまたはパーティション) をストレージクラスに割り当てる。
  • LocalVolume カスタムリソース (CR) を設定して、PV とストレージクラスを静的にプロビジョニングする。
  • 基盤となるストレージトポロジーを考慮しながら、ワークロードと PVC を作成する。
注記

LSO は Red Hat によって開発および提供されています。

4.12.1.3. LVM Storage の機能の概要

Logical Volume Manager (LVM) Storage を使用すると、次の操作を実行できます。

  • ストレージデバイス (ディスクまたはパーティション) を lvm2 ボリュームグループとして設定し、ボリュームグループをストレージクラスとして公開する。
  • ノードトポロジーを考慮せずに PVC を使用してワークロードを作成し、ストレージを要求する。

LVM Storage は TopoLVM CSI ドライバーを使用して、トポロジー内のノードにストレージスペースを動的に割り当て、PV をプロビジョニングします。

注記

LVM Storage は、Red Hat によって開発および保守されています。LVM Storage に付属する CSI ドライバーは、アップストリームプロジェクトの "topolvm" です。

4.12.1.4. LVM Storage、LSO、HPP の比較

次のセクションでは、LVM Storage、Local Storage Operator (LSO)、および HostPath Provisioner (HPP) が提供する、ローカルストレージをプロビジョニングするための機能を比較します。

4.12.1.4.1. ストレージタイプおよびファイルシステムのサポートの比較

次の表は、ローカルストレージをプロビジョニングするために LVM Storage、Local Storage Operator (LSO)、および HostPath Provisioner (HPP) によって提供されるストレージタイプおよびファイルシステムのサポートを比較したものです。

表4.1 ストレージタイプおよびファイルシステムのサポートの比較
機能LVM StorageLSOHPP

ブロックストレージのサポート

はい

はい

いいえ

ファイルストレージのサポート

はい

はい

はい

オブジェクトストレージのサポート [1]

いいえ

いいえ

いいえ

利用可能なファイルシステム

ext4xfs

ext4xfs

ノード上で使用できるマウントされたシステムがすべてサポートされます。

  1. いずれのソリューション (LVM Storage、LSO、HPP) もオブジェクトストレージをサポートしていません。したがって、オブジェクトストレージを使用する場合は、Red Hat OpenShift Data Foundation の MultiClusterGateway などの S3 オブジェクトストレージソリューションが必要です。どのソリューションも、S3 オブジェクトストレージソリューションの基盤となるストレージプロバイダーとして機能します。
4.12.1.4.2. コア機能のサポートの比較

次の表は、LVM Storage、Local Storage Operator (LSO)、および HostPath Provisioner (HPP) によるローカルストレージのプロビジョニングに関するコア機能のサポート状況を比較したものです。

表4.2 コア機能のサポートの比較
機能LVM StorageLSOHPP

自動ファイルシステムフォーマット設定のサポート

はい

はい

該当なし

動的プロビジョニングのサポート

はい

いいえ

いいえ

ソフトウェア Redundant Array of Independent Disks (RAID) アレイの使用のサポート

はい

4.15 以降でサポートされています。

はい

はい

透過的なディスク暗号化のサポート

はい

4.16 以降でサポートされています。

はい

はい

ボリュームベースのディスク暗号化のサポート

いいえ

いいえ

いいえ

非接続インストールのサポート

はい

はい

はい

PVC 拡張のサポート

はい

いいえ

いいえ

ボリュームスナップショットとボリュームクローンのサポート

はい

いいえ

いいえ

シンプロビジョニングのサポート

はい

デバイスはデフォルトでシンプロビジョニングされます。

はい

シンプロビジョニングされたボリュームを参照するようにデバイスを設定できます。

はい

シンプロビジョニングされたボリュームを参照するパスを設定できます。

自動ディスク検出とセットアップのサポート

はい

インストール時および実行時に自動ディスク検出を利用できます。既存のストレージクラスのストレージ容量を増やすために、ディスクを LVMCluster カスタムリソース (CR) に動的に追加することもできます。

テクノロジープレビュー

インストール時に自動ディスク検出を利用できます。

いいえ

4.12.1.4.3. パフォーマンス機能と分離機能の比較

次の表は、ローカルストレージのプロビジョニングにおける LVM Storage、Local Storage Operator (LSO)、および HostPath Provisioner (HPP) のパフォーマンス機能と分離機能を比較したものです。

表4.3 パフォーマンス機能と分離機能の比較
機能LVM StorageLSOHPP

パフォーマンス

I/O スピードが、同じストレージクラスを使用するすべてのワークロードで共有されます。

ブロックストレージでは直接 I/O 操作が可能です。

シンプロビジョニングがパフォーマンスに影響を与える可能性があります。

I/O は LSO 設定によって異なります。

ブロックストレージでは直接 I/O 操作が可能です。

I/O スピードが、同じストレージクラスを使用するすべてのワークロードで共有されます。

基盤となるファイルシステムによる制限が、I/O スピードに影響を与える可能性があります。

分離境界 [1]

LVM 論理ボリューム (LV)

HPP と比較して、より高いレベルの分離を提供します。

LVM 論理ボリューム (LV)

HPP と比較して、より高いレベルの隔離を提供します。

ファイルシステムパス

LSO および LVM Storage と比較して、より低いレベルの分離を提供します。

  1. 分離境界とは、ローカルストレージリソースを使用するさまざまなワークロードまたはアプリケーション間の分離レベルを指します。
4.12.1.4.4. 追加機能のサポートの比較

次の表は、LVM Storage、Local Storage Operator (LSO)、および HostPath Provisioner (HPP) が提供する、ローカルストレージをプロビジョニングするための追加機能を比較したものです。

表4.4 追加機能のサポートの比較
機能LVM StorageLSOHPP

汎用一時ボリュームのサポート

はい

いいえ

いいえ

CSI インライン一時ボリュームのサポート

いいえ

いいえ

いいえ

ストレージトポロジーのサポート

はい

CSI ノードトポロジーのサポート

はい

LSO は、ノード容認を通じてストレージトポロジーの部分的なサポートを提供します。

いいえ

ReadWriteMany (RWX) アクセスモードのサポート [1]

いいえ

いいえ

いいえ

  1. どのソリューション (LVM Storage、LSO、HPP) にも、ReadWriteOnce (RWO) アクセスモードがあります。RWO アクセスモードでは、同じノード上の複数の Pod からのアクセスが可能になります。

4.12.2. ローカルボリュームを使用した永続ストレージ

OpenShift Container Platform は、ローカルボリュームを使用する永続ストレージでプロビジョニングすることが可能です。ローカルの永続ボリュームを使用すると、標準の永続ボリューム要求インターフェイスを使用して、ディスクやパーティションなどのローカルのストレージデバイスにアクセスできます。

ローカルボリュームは、Pod をノードに手動でスケジュールせずに使用できます。ボリュームのノード制約がシステムによって認識されるためです。ただし、ローカルボリュームは、依然として基礎となるノードの可用性に依存しており、すべてのアプリケーションに適している訳ではありません。

注記

ローカルボリュームは、静的に作成された永続ボリュームとしてのみ使用できます。

4.12.2.1. ローカルストレージ Operator のインストール

ローカルストレージ Operator はデフォルトで OpenShift Container Platform にインストールされません。以下の手順を使用してこの Operator をインストールし、クラスター内でローカルボリュームを有効にできるように設定します。

前提条件

  • OpenShift Container Platform Web コンソールまたはコマンドラインインターフェイス (CLI) へのアクセス。

手順

  1. openshift-local-storage プロジェクトを作成します。

    $ oc adm new-project openshift-local-storage
  2. オプション: インフラストラクチャーノードでのローカルストレージの作成を許可します。

    ロギングやモニタリングなどのコンポーネントに対応するために、ローカルストレージ Operator を使用してインフラストラクチャーノードでボリュームを作成する必要がある場合があります。

    ローカルストレージ Operator にワーカーノードだけでなくインフラストラクチャーノードが含まれるように、デフォルトのノードセレクターを調整する必要があります。

    ローカルストレージ Operator がクラスター全体のデフォルトセレクターを継承しないようにするには、以下のコマンドを実行します。

    $ oc annotate namespace openshift-local-storage openshift.io/node-selector=''
  3. オプション: 単一ノードデプロイメントの CPU の管理プールでローカルストレージを実行できるようにします。

    シングルノードデプロイメントで Local Storage Operator を使用し、literal プールに属する CPU の使用を許可します。この手順は、管理ワークロードパーティショニングを使用する単一ノードインストールで実行します。

    Local Storage Operator が管理 CPU プールで実行できるようにするには、次のコマンドを実行します。

    $ oc annotate namespace openshift-local-storage workload.openshift.io/allowed='management'

UI での操作

Web コンソールからローカルストレージ Operator をインストールするには、以下の手順を実行します。

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Operators OperatorHub に移動します。
  3. Local Storage をフィルターボックスに入力して、ローカルストレージ Operator を見つけます。
  4. Install をクリックします。
  5. Install Operator ページで、A specific namespace on the cluster を選択します。ドロップメニューから openshift-local-storage を選択します。
  6. Update Channel および Approval Strategy の値を必要な値に調整します。
  7. Install をクリックします。

これが完了すると、ローカルストレージ Operator は Web コンソールの Installed Operators セクションにリスト表示されます。

CLI からの操作

  1. CLI からローカルストレージ Operator をインストールします。

    1. ローカルストレージ Operator の Operator グループおよびサブスクリプションを定義するために、オブジェクト YAML ファイル (例: openshift-local-storage.yaml) を作成します。

      例: openshift-local-storage.yaml

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: local-operator-group
        namespace: openshift-local-storage
      spec:
        targetNamespaces:
          - openshift-local-storage
      ---
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: local-storage-operator
        namespace: openshift-local-storage
      spec:
        channel: stable
        installPlanApproval: Automatic 1
        name: local-storage-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace

      1
      インストール計画のユーザー認可ポリシー。
  2. 以下のコマンドを実行して、ローカルストレージ Operator オブジェクトを作成します。

    $ oc apply -f openshift-local-storage.yaml

    この時点で、Operator Lifecycle Manager (OLM) はローカルストレージ Operator を認識できるようになります。Operator の ClusterServiceVersion (CSV) はターゲット namespace に表示され、Operator で指定される API は作成用に利用可能になります。

  3. すべての Pod およびローカルストレージ Operator が作成されていることを確認して、ローカルストレージのインストールを検証します。

    1. 必要な Pod すべてが作成されていることを確認します。

      $ oc -n openshift-local-storage get pods

      出力例

      NAME                                      READY   STATUS    RESTARTS   AGE
      local-storage-operator-746bf599c9-vlt5t   1/1     Running   0          19m

    2. ClusterServiceVersion (CSV) YAML マニフェストをチェックして、ローカルストレージ Operator が openshift-local-storage プロジェクトで利用できることを確認します。

      $ oc get csvs -n openshift-local-storage

      出力例

      NAME                                         DISPLAY         VERSION               REPLACES   PHASE
      local-storage-operator.4.2.26-202003230335   Local Storage   4.2.26-202003230335              Succeeded

すべてのチェックが渡されると、ローカルストレージ Operator が正常にインストールされます。

4.12.2.2. ローカルストレージ Operator を使用したローカルボリュームのプロビジョニング

ローカルボリュームは動的プロビジョニングで作成できません。代わりに、永続ボリュームがローカルストレージ Operator によって作成されることがあります。このローカルボリュームプロビジョナーは、定義されたリソースで指定されているパスでファイルシステムまたはブロックボリュームデバイスを検索します。

前提条件

  • ローカルストレージ Operator がインストールされていること。
  • 以下の条件を満たすローカルディスクがある。

    • ノードに接続されている。
    • マウントされていない。
    • パーティションが含まれていない。

手順

  1. ローカルボリュームリソースを作成します。このリソースは、ノードおよびローカルボリュームへのパスを定義する必要があります。

    注記

    同じデバイスに別のストレージクラス名を使用しないでください。これを行うと、複数の永続ボリューム (PV) が作成されます。

    例: ファイルシステム

    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "openshift-local-storage" 1
    spec:
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-140-183
              - ip-10-0-158-139
              - ip-10-0-164-33
      storageClassDevices:
        - storageClassName: "local-sc" 3
          forceWipeDevicesAndDestroyAllData: false 4
          volumeMode: Filesystem 5
          fsType: xfs 6
          devicePaths: 7
            - /path/to/device 8

    1
    ローカルストレージ Operator がインストールされている namespace。
    2
    オプション: ローカルストレージボリュームが割り当てられているノードの一覧が含まれるノードセレクター。以下の例では、oc get node から取得したノードホスト名を使用します。値が定義されない場合、ローカルストレージ Operator は利用可能なすべてのノードで一致するディスクの検索を試行します。
    3
    永続ボリュームオブジェクトの作成時に使用するストレージクラスの名前。ローカルストレージ Operator は、ストレージクラスが存在しない場合にこれを自動的に作成します。このローカルボリュームのセットを一意に識別するストレージクラスを使用するようにしてください。
    4
    この設定は、パーティションテーブルの署名 (マジックストリング) を削除してディスクを Local Storage Operator (LSO) プロビジョニングに使用できるようにする、winefs を呼び出すかどうかを定義します。署名以外のデータは消去されません。デフォルトは "false" です (wipefs は呼び出されません)。再利用する必要がある以前のデータをディスク上に残す場合、forceWipeDevicesAndDestroyAllData を "true" に設定すると便利です。このようなシナリオでは、このフィールドを true に設定すると、管理者はディスクを手動で消去する必要がありません。ノードを複数回再デプロイできるシングルノード OpenShift (SNO) クラスター環境や、オブジェクトストレージデバイス (OSD) として使用する予定のディスクに以前のデータを残すことができる OpenShift Data Foundation (ODF) を使用する場合も、これに該当します。
    5
    ローカルボリュームのタイプを定義するボリュームモード (Filesystem または Block)。
    注記

    raw ブロックボリューム (volumeMode: Block) はファイルシステムでフォーマットされません。このモードは、Pod で実行しているすべてのアプリケーションが raw ブロックデバイスを使用できる場合にのみ使用します。

    6
    ローカルボリュームの初回マウント時に作成されるファイルシステム。
    7
    選択するローカルストレージデバイスの一覧を含むパスです。
    8
    この値を、LocalVolume リソースby-idへの実際のローカルディスクのファイルパスに置き換えます (例: /dev/disk/by-id/wwn)。プロビジョナーが正常にデプロイされると、これらのローカルディスク用に PV が作成されます。
    注記

    RHEL KVM を使用して OpenShift Container Platform を実行している場合は、VM ディスクにシリアル番号を割り当てる必要があります。そうしないと、再起動後に VM ディスクを識別できません。virsh edit <VM> コマンドを使用して、<serial>mydisk</serial> 定義を追加できます。

    例: ブロック

    apiVersion: "local.storage.openshift.io/v1"
    kind: "LocalVolume"
    metadata:
      name: "local-disks"
      namespace: "openshift-local-storage" 1
    spec:
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - ip-10-0-136-143
              - ip-10-0-140-255
              - ip-10-0-144-180
      storageClassDevices:
        - storageClassName: "local-sc" 3
          forceWipeDevicesAndDestroyAllData: false 4
          volumeMode: Block 5
          devicePaths: 6
            - /path/to/device 7

    1
    ローカルストレージ Operator がインストールされている namespace。
    2
    オプション: ローカルストレージボリュームが割り当てられているノードの一覧が含まれるノードセレクター。以下の例では、oc get node から取得したノードホスト名を使用します。値が定義されない場合、ローカルストレージ Operator は利用可能なすべてのノードで一致するディスクの検索を試行します。
    3
    永続ボリュームオブジェクトの作成時に使用するストレージクラスの名前。
    4
    この設定は、パーティションテーブルの署名 (マジックストリング) を削除してディスクを Local Storage Operator (LSO) プロビジョニングに使用できるようにする、winefs を呼び出すかどうかを定義します。署名以外のデータは消去されません。デフォルトは "false" です (wipefs は呼び出されません)。再利用する必要がある以前のデータをディスク上に残す場合、forceWipeDevicesAndDestroyAllData を "true" に設定すると便利です。このようなシナリオでは、このフィールドを true に設定すると、管理者はディスクを手動で消去する必要がありません。ノードを複数回再デプロイできるシングルノード OpenShift (SNO) クラスター環境や、オブジェクトストレージデバイス (OSD) として使用する予定のディスクに以前のデータを残すことができる OpenShift Data Foundation (ODF) を使用する場合も、これに該当します。
    5
    ローカルボリュームのタイプを定義するボリュームモード (Filesystem または Block)。
    6
    選択するローカルストレージデバイスの一覧を含むパスです。
    7
    この値を、LocalVolume リソースby-idへの実際のローカルディスクのファイルパスに置き換えます (例: dev/disk/by-id/wwn)。プロビジョナーが正常にデプロイされると、これらのローカルディスク用に PV が作成されます。
    注記

    RHEL KVM を使用して OpenShift Container Platform を実行している場合は、VM ディスクにシリアル番号を割り当てる必要があります。そうしないと、再起動後に VM ディスクを識別できません。virsh edit <VM> コマンドを使用して、<serial>mydisk</serial> 定義を追加できます。

  2. OpenShift Container Platform クラスターにローカルボリュームリソースを作成します。作成したばかりのファイルを指定します。

    $ oc create -f <local-volume>.yaml
  3. プロビジョナーが作成され、対応するデーモンセットが作成されていることを確認します。

    $ oc get all -n openshift-local-storage

    出力例

    NAME                                          READY   STATUS    RESTARTS   AGE
    pod/diskmaker-manager-9wzms                   1/1     Running   0          5m43s
    pod/diskmaker-manager-jgvjp                   1/1     Running   0          5m43s
    pod/diskmaker-manager-tbdsj                   1/1     Running   0          5m43s
    pod/local-storage-operator-7db4bd9f79-t6k87   1/1     Running   0          14m
    
    NAME                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
    service/local-storage-operator-metrics   ClusterIP   172.30.135.36   <none>        8383/TCP,8686/TCP   14m
    
    NAME                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/diskmaker-manager   3         3         3       3            3           <none>          5m43s
    
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/local-storage-operator   1/1     1            1           14m
    
    NAME                                                DESIRED   CURRENT   READY   AGE
    replicaset.apps/local-storage-operator-7db4bd9f79   1         1         1       14m

    デーモンセットプロセスの必要な数と現在の数に注意してください。必要な数が 0 の場合、これはラベルセレクターが無効であることを示します。

  4. 永続ボリュームが作成されていることを確認します。

    $ oc get pv

    出力例

    NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    local-pv-1cec77cf   100Gi      RWO            Delete           Available           local-sc                88m
    local-pv-2ef7cd2a   100Gi      RWO            Delete           Available           local-sc                82m
    local-pv-3fa1c73    100Gi      RWO            Delete           Available           local-sc                48m

重要

LocalVolume オブジェクトを編集しても、既存の永続ボリュームの fsType または volumeMode は変更されません。これが破壊的な操作になる可能性があるためです。

4.12.2.3. ローカルストレージ Operator のないローカルボリュームのプロビジョニング

ローカルボリュームは動的プロビジョニングで作成できません。代わりに、永続ボリュームは、永続ボリューム (PV) をオブジェクト定義に定義して作成できます。このローカルボリュームプロビジョナーは、定義されたリソースで指定されているパスでファイルシステムまたはブロックボリュームデバイスを検索します。

重要

PV の手動プロビジョニングには、PVC の削除時に PV 全体でデータ漏洩が発生するリスクが含まれます。ローカルストレージ Operator は、ローカル PV のプロビジョニング時にデバイスのライフサイクルを自動化するために使用することが推奨されます。

前提条件

  • ローカルディスクが OpenShift Container Platform ノードに割り当てられていること。

手順

  1. PV を定義します。PersistentVolume オブジェクト定義を使用して、example-pv-filesystem.yaml または example-pv-block.yaml などのファイルを作成します。このリソースは、ノードおよびローカルボリュームへのパスを定義する必要があります。

    注記

    同じデバイスに別のストレージクラス名を使用しないでください。同じ名前を使用すると、複数の PV が作成されます。

    example-pv-filesystem.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv-filesystem
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Filesystem 1
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-sc 2
      local:
        path: /dev/xvdf 3
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - example-node

    1
    PV のタイプを定義するボリュームモード (Filesystem または Block)。
    2
    PV リソースの作成時に使用するストレージクラスの名前。この PV のセットを一意に特定するストレージクラスを使用にしてください。
    3
    選択するローカルストレージデバイスのリスト、またはディレクトリーが含まれるパスです。Filesystem volumeMode のディレクトリーのみを指定できます。
    注記

    raw ブロックボリューム (volumeMode: block) はファイルシステムでフォーマットされません。このモードは、Pod で実行しているすべてのアプリケーションが raw ブロックデバイスを使用できる場合にのみ使用します。

    example-pv-block.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv-block
    spec:
      capacity:
        storage: 100Gi
      volumeMode: Block 1
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-sc 2
      local:
        path: /dev/xvdf 3
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - example-node

    1
    PV のタイプを定義するボリュームモード (Filesystem または Block)。
    2
    PV リソースの作成時に使用するストレージクラスの名前。この PV のセットを一意に特定するストレージクラスを使用するようにしてください。
    3
    選択するローカルストレージデバイスの一覧を含むパスです。
  2. OpenShift Container Platform クラスターに PV リソースを作成します。作成したばかりのファイルを指定します。

    $ oc create -f <example-pv>.yaml
  3. ローカル PV が作成されていることを確認します。

    $ oc get pv

    出力例

    NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                STORAGECLASS    REASON   AGE
    example-pv-filesystem   100Gi      RWO            Delete           Available                        local-sc            3m47s
    example-pv1             1Gi        RWO            Delete           Bound       local-storage/pvc1   local-sc            12h
    example-pv2             1Gi        RWO            Delete           Bound       local-storage/pvc2   local-sc            12h
    example-pv3             1Gi        RWO            Delete           Bound       local-storage/pvc3   local-sc            12h

4.12.2.4. ローカルボリュームの永続ボリューム要求の作成

ローカルボリュームは、Pod でアクセスされる永続ボリューム要求として静的に作成される必要があります。

前提条件

  • 永続ボリュームがローカルボリュームプロビジョナーを使用して作成されていること。

手順

  1. 対応するストレージクラスを使用して PVC を作成します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: local-pvc-name 1
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem 2
      resources:
        requests:
          storage: 100Gi 3
      storageClassName: local-sc 4
    1
    PVC の名前。
    2
    PVC のタイプ。デフォルトは Filesystem です。
    3
    PVC に利用できるストレージの量。
    4
    要求で必要になるストレージクラスの名前。
  2. 作成したファイルを指定して、PVC を OpenShift Container Platform クラスターに作成します。

    $ oc create -f <local-pvc>.yaml

4.12.2.5. ローカル要求を割り当てます。

ローカルボリュームが永続ボリューム要求にマップされた後に、これをリソース内に指定できます。

前提条件

  • 永続ボリューム要求が同じ namespace に存在する。

手順

  1. 定義された要求をリソースの仕様に追加します。以下の例では、Pod 内で永続ボリューム要求を宣言します。

    apiVersion: v1
    kind: Pod
    spec:
    # ...
      containers:
        volumeMounts:
        - name: local-disks 1
          mountPath: /data 2
      volumes:
      - name: local-disks
        persistentVolumeClaim:
          claimName: local-pvc-name 3
    # ...
    1
    マウントするボリュームの名前。
    2
    ボリュームがマウントされる Pod 内のパス。コンテナーのルート (/) や、ホストとコンテナーで同じパスにはマウントしないでください。これは、コンテナーに十分な特権が付与されている場合に、ホストシステムを破壊する可能性があります (例: ホストの /dev/pts ファイル)。ホストをマウントするには、/host を使用するのが安全です。
    3
    使用する既存の永続ボリューム要求の名前。
  2. 作成したファイルを指定して、OpenShift Container Platform クラスターにリソースを作成します。

    $ oc create -f <local-pod>.yaml

4.12.2.6. 詳細は、ローカルストレージデバイスの自動検出およびプロビジョニングを参照してください。

ローカルストレージ Operator はローカルストレージ検出およびプロビジョニングを自動化します。この機能を使用すると、ベアメタル、VMware、または割り当てられたデバイスを持つ AWS ストアインスタンスなど、デプロイメント時に動的プロビジョニングが利用できない場合にインストールを単純化できます。

重要

自動検出およびプロビジョニングは、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

重要

Red Hat OpenShift Data Foundation をオンプレミスでデプロイするために使用する場合、またはプラットフォームに依存しないデプロイメントで使用する場合、自動検出とプロビジョニングは完全にサポートされます。

ローカルデバイスを自動的に検出し、選択したデバイスのローカルボリュームを自動的にプロビジョニングするには、以下の手順を使用します。

警告

LocalVolumeSet オブジェクトの使用には注意が必要です。ローカルディスクから永続ボリューム (PV) を自動的にプロビジョニングする場合、ローカル PV は一致するすべてのデバイスを要求する可能性があります。LocalVolumeSet オブジェクトを使用している場合、ローカルストレージ Operator がノードでローカルデバイスを管理する唯一のエンティティーであることを確認します。ノードを複数回ターゲットにする Local VolumeSet のインスタンスを複数作成することはサポートされていません。

前提条件

  • クラスター管理者パーミッションがある。
  • ローカルストレージ Operator がインストールされていること。
  • ローカルディスクが OpenShift Container Platform ノードに割り当てられていること。
  • OpenShift Container Platform Web コンソールまたは oc コマンドラインインターフェイス (CLI) へのアクセスがあること。

手順

  1. Web コンソールからローカルデバイスの自動検出を有効にするには、以下を行います。

    1. Operators Installed Operators をクリックします。
    2. openshift-local-storage namespace で Local Storage をクリックします。
    3. Local Volume Discovery タブをクリックします。
    4. Create Local Volume Discovery をクリックし、Form view または YAML view のいずれかを選択します。
    5. LocalVolumeDiscovery オブジェクトパラメーターを設定します。
    6. Create をクリックします。

      Local Storage Operator は、auto-discover-devices という名前のローカルボリューム検出インスタンスを作成します。

  2. ノードで利用可能なデバイスの連続リストを表示するには、以下を実行します。

    1. OpenShift Container Platform Web コンソールにログインします。
    2. Compute Nodes に移動します。
    3. 開くノードの名前をクリックします。「Node Details」ページが表示されます。
    4. Disks タブを選択して、選択したデバイスのリストを表示します。

      ローカルディスクを追加または削除しても、デバイスリストの更新が継続的に行われます。名前、ステータス、タイプ、モデル、容量、およびモードでデバイスをフィルターできます。

  3. Web コンソールから検出されたデバイスのローカルボリュームを自動的にプロビジョニングするには、以下を実行します。

    1. Operators Installed Operators に移動し、Operator のリストから Local Storage を選択します。
    2. Local Volume Set Create Local Volume Set を選択します。
    3. ボリュームセット名とストレージクラス名を入力します。
    4. All nodes または Select nodes を選択し、適宜フィルターを適用します。

      注記

      All nodes または Select nodes を使用してフィルターするかどうかにかかわらず、ワーカーノードのみが利用可能になります。

    5. ローカルボリュームセットに適用するディスクタイプ、モード、サイズ、および制限を選択し、Create をクリックします。

      メッセージが数分後に表示され、「Operator reconciled successfully」という Operator の調整が正常に行われたことが示唆されます。

  4. または、CLI から検出されたデバイスのローカルボリュームをプロビジョニングするには、以下を実行します。

    1. 以下の例に示されるように、オブジェクト YAML ファイルを作成し、local-volume-set.yaml などのローカルボリュームセットを定義します。

      apiVersion: local.storage.openshift.io/v1alpha1
      kind: LocalVolumeSet
      metadata:
        name: example-autodetect
      spec:
        nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                    - worker-0
                    - worker-1
        storageClassName: local-sc 1
        volumeMode: Filesystem
        fsType: ext4
        maxDeviceCount: 10
        deviceInclusionSpec:
          deviceTypes: 2
            - disk
            - part
          deviceMechanicalProperties:
            - NonRotational
          minSize: 10G
          maxSize: 100G
          models:
            - SAMSUNG
            - Crucial_CT525MX3
          vendors:
            - ATA
            - ST2000LM
      1
      検出されたデバイスからプロビジョニングされる永続ボリューム用に作成されるストレージクラスを判別します。ローカルストレージ Operator は、ストレージクラスが存在しない場合にこれを自動的に作成します。このローカルボリュームのセットを一意に識別するストレージクラスを使用するようにしてください。
      2
      ローカルボリュームセット機能を使用する場合、ローカルストレージ Operator は論理ボリューム管理 (LVM) デバイスの使用をサポートしません。
    2. ローカルボリュームセットオブジェクトを作成します。

      $ oc apply -f local-volume-set.yaml
    3. ローカル永続ボリュームがストレージクラスに基づいて動的にプロビジョニングされていることを確認します。

      $ oc get pv

      出力例

      NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
      local-pv-1cec77cf   100Gi      RWO            Delete           Available           local-sc                88m
      local-pv-2ef7cd2a   100Gi      RWO            Delete           Available           local-sc                82m
      local-pv-3fa1c73    100Gi      RWO            Delete           Available           local-sc                48m

注記

結果は、ノードから削除された後に削除されます。シンボリックリンクは手動で削除する必要があります。

4.12.2.7. ローカルストレージ Operator Pod での容認の使用

テイントはノードに適用し、それらが一般的なワークロードを実行しないようにすることができます。ローカルストレージ Operator がテイントのマークが付けられたノードを使用できるようにするには、容認を Pod または DaemonSet 定義に追加する必要があります。これにより、作成されたリソースをこれらのテイントのマークが付けられたノードで実行できるようになります。

容認を LocalVolume リソースでローカルストレージ Operator Pod に適用し、テイントをノード仕様でノードに適用します。ノードのテイントはノードに対し、テイントを容認しないすべての Pod を拒否するよう指示します。他の Pod にはない特定のテイントを使用することで、ローカルストレージ Operator Pod がそのノードでも実行されるようにできます。

重要

taint および toleration は、key、value、および effect で構成されます。引数として、これは key=value:effect として表現されます。演算子により、これらの 3 つのパラメーターのいずれかを空のままにすることができます。

前提条件

  • ローカルストレージ Operator がインストールされていること。
  • ローカルディスクがテイントを持つ OpenShift Container Platform ノードに割り当てられている。
  • テイントのマークが付けられたノードがローカルストレージのプロビジョニングを行うことが想定されます。

手順

テイントのマークが付けられたノードでスケジュールするようにローカルボリュームを設定するには、以下を実行します。

  1. 以下の例に示されるように、Pod を定義する YAML ファイルを変更し、LocalVolume 仕様を追加します。

      apiVersion: "local.storage.openshift.io/v1"
      kind: "LocalVolume"
      metadata:
        name: "local-disks"
        namespace: "openshift-local-storage"
      spec:
        tolerations:
          - key: localstorage 1
            operator: Equal 2
            value: "localstorage" 3
        storageClassDevices:
            - storageClassName: "local-sc"
              volumeMode: Block 4
              devicePaths: 5
                - /dev/xvdg
    1
    ノードに追加したキーを指定します。
    2
    Equal Operator を指定して、key/value パラメーターが一致するようにします。Operator が Exists の場合、システムはキーが存在することを確認し、値を無視します。Operator が Equal の場合、キーと値が一致する必要があります。
    3
    テイントのマークが付けられたノードの値 local を指定します。
    4
    ボリュームモード (Filesystem または Block) で、ローカルボリュームのタイプを定義します。
    5
    選択するローカルストレージデバイスの一覧を含むパスです。
  2. オプション: テイントのマークが付けられたノードでのみローカル永続ボリュームを作成するには、以下の例のように YAML ファイルを変更し、LocalVolume 仕様を追加します。

    spec:
      tolerations:
        - key: node-role.kubernetes.io/master
          operator: Exists

定義された容認は結果として作成されるデーモンセットに渡されます。これにより、diskmaker およびプロビジョナー Pod を指定されたテイントが含まれるノード用に作成できます。

4.12.2.8. ローカルストレージ Operator メトリクス

OpenShift Container Platform は、ローカルストレージ Operator の以下のメトリクスを提供します。

  • lso_discovery_disk_count: 各ノードで検出されたデバイスの合計数
  • lso_lvset_provisioned_PV_count: LocalVolumeSet オブジェクトによって作成される PV の合計数
  • lso_lvset_unmatched_disk_count: 条件の不一致により、ローカルストレージ Operator がプロビジョニング用に選択しなかったディスクの合計数
  • lso_lvset_orphaned_symlink_count: LocalVolumeSet オブジェクト基準に一致しなくなった PV のあるデバイスの数
  • lso_lv_orphaned_symlink_count: LocalVolume オブジェクト基準に一致しなくなった PV のあるデバイスの数
  • lso_lv_provisioned_PV_count: LocalVolume のプロビジョニングされた PV の合計数

これらのメトリクスを使用するには、以下の点を確認してください。

  • ローカルストレージ Operator のインストール時に、モニタリングのサポートを有効にする。
  • OpenShift Container Platform 4.9 以降にアップグレードする場合は、namespace に operator-metering=true ラベルを追加してメトリクスサポートを手動で有効にしてください。

メトリクスの詳細は、メトリクスの管理 を参照してください。

4.12.2.9. ローカルストレージ Operator のリソースの削除

4.12.2.9.1. ローカルボリュームまたはローカルボリュームセットの削除

ローカルボリュームおよびローカルボリュームセットを削除する必要がある場合があります。リソースのエントリーを削除し、永続ボリュームを削除することで通常は十分ですが、同じデバイスパスを再使用する場合や別のストレージクラスでこれを管理する必要がある場合には、追加の手順が必要になります。

注記

以下の手順では、ローカルボリュームを削除する例の概要を説明します。同じ手順を使用して、ローカルボリュームセットのカスタムリソースのシンボリックリンクを削除することもできます。

前提条件

  • 永続ボリュームの状態は Released または Available である必要があります。

    警告

    使用中の永続ボリュームを削除すると、データの損失や破損につながる可能性があります。

手順

  1. 以前に作成したローカルボリュームを編集して、不要なディスクを削除します。

    1. クラスターリソースを編集します。

      $ oc edit localvolume <name> -n openshift-local-storage
    2. devicePaths の下の行に移動し、不要なディスクを表すものを削除します。
  2. 作成した永続ボリュームを削除します。

    $ oc delete pv <pv-name>
  3. ノード上のディレクトリーと含まれるシンボリックリンクを削除します。

    警告

    以下の手順では、root ユーザーとしてノードにアクセスする必要があります。この手順のステップ以外にノードの状態を変更すると、クラスターが不安定になる可能性があります。

    $ oc debug node/<node-name> -- chroot /host rm -rf /mnt/local-storage/<sc-name> 1
    1
    ローカルボリュームの作成に使用されるストレージクラスの名前。
4.12.2.9.2. ローカルストレージ Operator のアンインストール

ローカルストレージ Operator をアンインストールするには、Operator および openshift-local-storage プロジェクトの作成されたすべてのリソースを削除する必要があります。

警告

ローカルストレージ PV がまだ使用中の状態でローカルストレージ Operator をアンインストールすることは推奨されません。PV は Operator の削除後も残りますが、PV およびローカルストレージリソースを削除せずに Operator がアンインストールされ、再インストールされる場合に予測できない動作が生じる可能性があります。

前提条件

  • OpenShift Container Platform Web コンソールにアクセスできる。

手順

  1. プロジェクトにインストールされているローカルボリュームリソースを削除します (localvolumelocalvolumesetlocalvolumediscovery等)。

    $ oc delete localvolume --all --all-namespaces
    $ oc delete localvolumeset --all --all-namespaces
    $ oc delete localvolumediscovery --all --all-namespaces
  2. Web コンソールからローカルストレージ Operator をアンインストールします。

    1. OpenShift Container Platform Web コンソールにログインします。
    2. Operators Installed Operators に移動します。
    3. Local Storage をフィルターボックスに入力して、ローカルストレージ Operator を見つけます。
    4. ローカルストレージ Operator の末尾にある Options メニュー kebab をクリックします。
    5. Uninstall Operator をクリックします。
    6. 表示されるウィンドウで Remove をクリックします。
  3. ローカルストレージ Operator で作成された PV は削除されるまでクラスターに残ります。これらのボリュームが使用されなくなったら、以下のコマンドを実行してこれらのボリュームを削除します。

    $ oc delete pv <pv-name>
  4. openshift-local-storage プロジェクトを削除します。

    $ oc delete project openshift-local-storage

4.12.3. hostPath を使用した永続ストレージ

OpenShift Container Platform クラスター内の hostPath ボリュームは、ファイルまたはディレクトリーをホストノードのファイルシステムから Pod にマウントします。ほとんどの Pod には hostPath ボリュームは必要ありませんが、アプリケーションが必要とする場合は、テスト用のクイックオプションが提供されます。

重要

クラスター管理者は、特権付き Pod として実行するように Pod を設定する必要があります。これにより、同じノードの Pod へのアクセスが付与されます。

4.12.3.1. 概要

OpenShift Container Platform はシングルノードクラスターでの開発およびテスト用の hostPath マウントをサポートします。

実稼働クラスターでは、hostPath を使用しません。代わりにクラスター管理者は、GCE Persistent Disk ボリューム、NFS 共有、Amazon EBS ボリュームなどのネットワークリソースをプロビジョニングします。ネットワークリソースは、ストレージクラスを使用した動的プロビジョニングの設定をサポートします。

hostPath ボリュームは静的にプロビジョニングする必要があります。

重要

コンテナーのルート (/) や、ホストとコンテナーで同じパスにはマウントしないでください。これは、コンテナーに十分な特権が付与されている場合、ホストシステムを破壊する可能性があります。ホストをマウントするには、/host を使用するのが安全です。以下の例では、ホストの / ディレクトリーが /host でコンテナーにマウントされています。

apiVersion: v1
kind: Pod
metadata:
  name: test-host-mount
spec:
  containers:
  - image: registry.access.redhat.com/ubi9/ubi
    name: test-container
    command: ['sh', '-c', 'sleep 3600']
    volumeMounts:
    - mountPath: /host
      name: host-slash
  volumes:
   - name: host-slash
     hostPath:
       path: /
       type: ''

4.12.3.2. hostPath ボリュームの静的なプロビジョニング

hostPath ボリュームを使用する Pod は、手動の (静的) プロビジョニングで参照される必要があります。

手順

  1. PersistentVolume オブジェクト定義を含む pv.yaml ファイルを作成して、永続ボリューム (PV) を定義します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume 1
      labels:
        type: local
    spec:
      storageClassName: manual 2
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce 3
      persistentVolumeReclaimPolicy: Retain
      hostPath:
        path: "/mnt/data" 4
    1
    ボリュームの名前。この名前は、永続ボリューム (PV) 要求または Pod がボリュームが識別するために使用されます。
    2
    永続ボリューム要求 (PVC) リクエストを PV にバインドするために使用されます。
    3
    ボリュームはシングルノードで read-write としてマウントできます。
    4
    設定ファイルでは、ボリュームがクラスターのノードの /mnt/data にあるように指定します。ホストシステムの破損を避けるため、コンテナーのルート (/) や、ホストとコンテナーで同じになるパスにマウントしないでください。/host を使用してホストを安全にマウントできます
  2. ファイルから PV を作成します。

    $ oc create -f pv.yaml
  3. PersistentVolumeClaim オブジェクト定義を含む pvc.yaml ファイルを作成して PVC を定義します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pvc-volume
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: manual
  4. ファイルから PVC を作成します。

    $ oc create -f pvc.yaml

4.12.3.3. 特権付き Pod での hostPath 共有のマウント

永続ボリューム要求の作成後に、これをアプリケーション内で使用できます。以下の例は、この共有を Pod 内にマウントする方法を示しています。

前提条件

  • 基礎となる hostPath 共有にマップされる永続ボリューム要求があること。

手順

  • 既存の永続ボリューム要求をマウントする特権付き Pod を作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name 1
    spec:
      containers:
        ...
        securityContext:
          privileged: true 2
        volumeMounts:
        - mountPath: /data 3
          name: hostpath-privileged
      ...
      securityContext: {}
      volumes:
        - name: hostpath-privileged
          persistentVolumeClaim:
            claimName: task-pvc-volume 4
    1
    Pod の名前。
    2
    Pod は、ノードのストレージにアクセスするために特権付き Pod として実行される必要があります。
    3
    特権付き Pod 内にホストパス共有をマウントするパス。コンテナーのルート (/) や、ホストとコンテナーで同じパスにはマウントしないでください。これは、コンテナーに十分な特権が付与されている場合に、ホストシステムを破壊する可能性があります (例: ホストの /dev/pts ファイル)。ホストをマウントするには、/host を使用するのが安全です。
    4
    以前に作成された PersistentVolumeClaim オブジェクトの名前。

4.12.4. Logical Volume Manager Storage を使用した永続ストレージ

論理ボリュームマネージャー (LVM) ストレージは、TopoLVM CSI ドライバーを介して LVM2 を使用して、リソースが制限されたクラスター上でローカルストレージを動的にプロビジョニングします。

LVM Storage を使用すると、ボリュームグループ、永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンを作成できます。

4.12.4.1. Logical Volume Manager Storage のインストール

OpenShift Container Platform クラスターに論理ボリュームマネージャー (LVM) ストレージをインストールし、ワークロードのストレージを動的にプロビジョニングするように設定できます。

LVM Storage は、OpenShift Container Platform CLI (oc)、OpenShift Container Platform Web コンソール、または Red Hat Advanced Cluster Management (RHACM) を使用してインストールできます。

警告

マルチノードクラスターで LVM Storage を使用する場合、LVM Storage はローカルストレージのプロビジョニングのみをサポートします。LVM Storage は、ノード間のストレージデータレプリケーションメカニズムをサポートしていません。単一障害点を回避するために、アクティブまたはパッシブレプリケーションメカニズムを通じてストレージデータを確実にレプリケーションする必要があります。

4.12.4.1.1. LVM Storage をインストールするための前提条件

LVM Storage をインストールするための前提条件は次のとおりです。

  • 最低でも 10 ミリの CPU と 100 MiB の RAM があることを確認してください。
  • すべてのマネージドクラスターに、ストレージのプロビジョニングに使用される専用のディスクがあることを確認してください。LVM Storage は、ファイルシステム署名が含まれていない空のディスクのみを使用します。確実にディスクが空で、ファイルシステム署名が含まれていないようにするには、使用する前にディスクを消去します。
  • 以前の LVM Storage のインストールで設定したストレージデバイスを再利用できるプライベート CI 環境に LVM Storage をインストールする前に、使用されていないディスクが消去されていることを確認してください。LVM Storage をインストールする前にディスクをワイプしないと、ディスクを再利用するのに手動による介入が必要になります。

    注記

    使用中のディスクは消去できません。

  • Red Hat Advanced Cluster Management (RHACM) を使用して LVM Storage をインストールする場合は、RHACM が OpenShift Container Platform クラスターにインストールされていることを確認してください。「RHACM を使用した LVM Storage のインストール」セクションを参照してください。
4.12.4.1.2. CLI を使用した LVM Storage のインストール

クラスター管理者は、OpenShift CLI を使用して LVM Storage をインストールできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin および Operator インストール権限を持つユーザーとして OpenShift Container Platform にログインしている。

手順

  1. namespace を作成するための設定を含む YAML ファイルを作成します。

    namespace を作成するための YAML 設定の例

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        openshift.io/cluster-monitoring: "true"
        pod-security.kubernetes.io/enforce: privileged
        pod-security.kubernetes.io/audit: privileged
        pod-security.kubernetes.io/warn: privileged
      name: openshift-storage

  2. 以下のコマンドを実行して namespace を作成します。

    $ oc create -f <file_name>
  3. OperatorGroup CR YAML ファイルを作成します。

    OperatorGroup CR の例

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-storage-operatorgroup
      namespace: openshift-storage
    spec:
      targetNamespaces:
      - openshift-storage

  4. 以下のコマンドを実行して OperatorGroup CR を作成します。

    $ oc create -f <file_name>
  5. Subscription CR YAML ファイルを作成します。

    Subscription CR の例

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: lvms
      namespace: openshift-storage
    spec:
      installPlanApproval: Automatic
      name: lvms-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace

  6. 以下のコマンドを実行して Subscription CR を作成します。

    $ oc create -f <file_name>

検証

  1. LVM Storage がインストールされていることを確認するには、次のコマンドを実行します。

    $ oc get csv -n openshift-storage -o custom-columns=Name:.metadata.name,Phase:.status.phase

    出力例

    Name                         Phase
    4.13.0-202301261535          Succeeded

4.12.4.1.3. Web コンソールを使用した LVM Storage のインストール

OpenShift Container Platform Web コンソールを使用して LVM Storage をインストールできます。

前提条件

  • クラスターにアクセスできる。
  • cluster-admin および Operator インストール権限で OpenShift Container Platform にアクセスできる。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Operators OperatorHub をクリックします。
  3. OperatorHub ページで LVM Storage をクリックします。
  4. Operator Installation ページで次のオプションを設定します。

    1. Update Channelstable-4.16 に設定します。
    2. Installation ModeA specific namespace on the cluster に設定します。
    3. Installed NamespaceOperator recommended namespace openshift-storage に設定します。openshift-storage namespace が存在しない場合は、Operator のインストール中に作成されます。
    4. Update approvalAutomatic または Manual を選択します。

      注記

      Automatic (自動) 更新を選択すると、手動による介入なしで、Operator Lifecycle Manager (OLM) によって LVM Storage の実行中のインスタンスが自動的に更新されます。

      Manual 更新を選択した場合、OLM は更新要求を作成します。LVM Storage を新しいバージョンに更新するには、クラスター管理者が更新要求を手動で承認する必要があります。

  5. オプション: Enable Operator recommended cluster monitoring on this Namespace チェックボックスを選択します。
  6. Install をクリックします。

検証手順

  • インストールが成功したことを示す緑色のチェックマークが LVM Storage に表示されていることを確認します。
4.12.4.1.4. 非接続環境での LVM Storage のインストール

非接続環境の OpenShift Container Platform に LVM Storage をインストールできます。「関連情報」セクションに、この手順で参照されているすべてのセクションのリンクが記載されています。

前提条件

  • 「非接続インストールミラーリングについて」セクションを確認した。
  • OpenShift Container Platform イメージリポジトリーにアクセスできる。
  • ミラーレジストリーを作成した。

手順

  1. 「イメージセット設定の作成」手順の手順に従います。LVM Storage の ImageSetConfiguration カスタムリソース (CR) を作成するには、次の ImageSetConfiguration CR 設定の例を使用できます。

    LVM Storage 用の ImageSetConfiguration CR の例

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v1alpha2
    archiveSize: 4 1
    storageConfig: 2
      registry:
        imageURL: example.com/mirror/oc-mirror-metadata 3
        skipTLS: false
    mirror:
      platform:
        channels:
        - name: stable-4.16 4
          type: ocp
        graph: true 5
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.16 6
        packages:
        - name: lvms-operator 7
          channels:
          - name: stable 8
      additionalImages:
      - name: registry.redhat.io/ubi9/ubi:latest 9
      helm: {}

    1
    イメージセット内の各ファイルの最大サイズ (GiB 単位) を設定します。
    2
    イメージセットを保存する場所を指定します。この場所は、レジストリーまたはローカルディレクトリーにすることができます。テクノロジープレビューの OCI 機能を使用している場合を除き、storageConfig フィールドを設定する必要があります。
    3
    レジストリーを使用する場合は、イメージストリームのストレージ URL を指定します。詳細は、イメージストリームを使用する理由 を参照してください。
    4
    OpenShift Container Platform イメージの取得元のチャネルを指定します。
    5
    OpenShift Update Service (OSUS) グラフイメージを生成するには、このフィールドを true に設定します。詳細は、OpenShift Update Service について を参照してください。
    6
    OpenShift Container Platform イメージの取得元の Operator カタログを指定します。
    7
    イメージセットに含める Operator パッケージを指定します。このフィールドが空の場合、カタログ内のすべてのパッケージが取得されます。
    8
    イメージセットに含める Operator パッケージのチャネルを指定します。Operator パッケージのデフォルトチャネルは、そのチャネルのバンドルを使用しない場合でも含める必要があります。コマンド $ oc mirror list operators --catalog=<catalog_name> --package=<package_name> を実行すると、デフォルトチャネルを見つけることができます。
    9
    イメージセットに含める追加のイメージを指定します。
  2. 「イメージセットをミラーレジストリーにミラーリングする」セクションの手順に従います。
  3. 「イメージレジストリーのリポジトリーミラーリングの設定」セクションの手順に従います。
4.12.4.1.5. RHACM を使用した LVM Storage のインストール

Red Hat Advanced Cluster Management (RHACM) を使用してクラスターに LVM Storage をインストールするには、Policy カスタムリソース (CR) を作成する必要があります。LVM Storage をインストールするクラスターを選択するための基準を設定することもできます。

注記

LVM Storage をインストールするために作成した Policy CR は、Policy CR の作成後にインポートまたは作成したクラスターにも適用されます。

前提条件

  • cluster-admin および Operator のインストール権限を持つアカウントを使用して、RHACM クラスターにアクセスできる。
  • 各クラスターに、LVM Storage が使用できる専用のディスクがある。
  • クラスターが RHACM によって管理されている。

手順

  1. OpenShift Container Platform の認証情報を使用して RHACM CLI にログインします。
  2. namespace を作成します。

    $ oc create ns <namespace>
  3. Policy CR YAML ファイルを作成します。

    LVM Storage をインストールして設定するための Policy CR の例

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-install-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector: 1
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-install-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-install-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: install-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: install-lvms
    spec:
      disabled: false
      remediationAction: enforce
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: install-lvms
          spec:
            object-templates:
            - complianceType: musthave
              objectDefinition: 2
                apiVersion: v1
                kind: Namespace
                metadata:
                  labels:
                    openshift.io/cluster-monitoring: "true"
                    pod-security.kubernetes.io/enforce: privileged
                    pod-security.kubernetes.io/audit: privileged
                    pod-security.kubernetes.io/warn: privileged
                  name: openshift-storage
            - complianceType: musthave
              objectDefinition: 3
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: musthave
              objectDefinition: 4
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms
                  namespace: openshift-storage
                spec:
                  installPlanApproval: Automatic
                  name: lvms-operator
                  source: redhat-operators
                  sourceNamespace: openshift-marketplace
            remediationAction: enforce
            severity: low

    1
    PlacementRule.spec.clusterSelectorkey フィールドと values フィールドを、LVM Storage をインストールするクラスターに設定されているラベルと一致するように設定します。
    2
    namespace の設定。
    3
    OperatorGroup CR の設定。
    4
    Subscription CR の設定。
  4. 次のコマンドを実行して Policy CR を作成します。

    $ oc create -f <file_name> -n <namespace>

    Policy CR を作成すると、PlacementRule CR で設定された選択基準に一致するクラスターに次のカスタムリソースが作成されます。

    • Namespace
    • OperatorGroup
    • サブスクリプション

4.12.4.2. LVMCluster カスタムリソースについて

次の操作を実行するように LVMCluster CR を設定できます。

  • 永続ボリューム要求 (PVC) のプロビジョニングに使用できる LVM ボリュームグループを作成する。
  • LVM ボリュームグループに追加するデバイスのリストを設定する。
  • LVM ボリュームグループを作成するノードを選択するための要件と、ボリュームグループのシンプール設定を設定する。
  • 選択したデバイスを強制的にワイプする。

LVM Storage をインストールした後、LVMCluster カスタムリソース (CR) を作成する必要があります。

LVMCluster CR YAML ファイルの例

apiVersion: lvm.topolvm.io/v1alpha1
kind: LVMCluster
metadata:
  name: my-lvmcluster
  namespace: openshift-storage
spec:
  tolerations:
  - effect: NoSchedule
    key: xyz
    operator: Equal
    value: "true"
  storage:
    deviceClasses:
    - name: vg1
      fstype: ext4 1
      default: true
      nodeSelector: 2
        nodeSelectorTerms:
        - matchExpressions:
          - key: mykey
            operator: In
            values:
            - ssd
      deviceSelector: 3
        paths:
        - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
        - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
        optionalPaths:
        - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
        - /dev/disk/by-path/pci-0000:90:00.0-nvme-1
        forceWipeDevicesAndDestroyAllData: true
      thinPoolConfig:
        name: thin-pool-1
        sizePercent: 90 4
        overprovisionRatio: 10
        chunkSize: 128Ki 5
        chunkSizeCalculationPolicy: Static 6

1 2 3 4 5 6
オプションのフィールド
LVMCluster CR のフィールドの説明

LVMCluster CR のフィールドについて、次の表で説明します。

表4.5 LVMCluster CR のフィールド
フィールド説明

spec.storage.deviceClasses

array

ローカルストレージデバイスを LVM ボリュームグループに割り当てるための設定を含めます。

LVM Storage は、ユーザーが作成する各デバイスクラスに対してストレージクラスとボリュームスナップショットクラスを作成します。

deviceClasses.name

string

LVM ボリュームグループ (VG) の名前を指定します。

以前のインストールで作成したボリュームグループを再利用するようにこのフィールドを設定することもできます。詳細は、「以前の LVM ストレージインストールからのボリュームグループの再利用」を参照してください。

deviceClasses.fstype

string

このフィールドは、ext4 または xfs に設定します。デフォルトでは、このフィールドは xfs に設定されています。

deviceClasses.default

boolean

デバイスクラスがデフォルトであることを指定するには、このフィールドを true に設定します。それ以外の場合は、false に設定できます。設定できるデフォルトのデバイスクラスは 1 つだけです。

deviceClasses.nodeSelector

object

LVM ボリュームグループを作成するノードを選択するための設定を含めます。このフィールドが空の場合、no-schedule テイントのないすべてのノードが考慮されます。

コントロールプレーンノードでは、クラスター内で新しいノードがアクティブになると、LVM Storage が追加のワーカーノードを検出して使用します。

nodeSelector.nodeSelectorTerms

array

ノードの選択に使用する要件を設定します。

deviceClasses.deviceSelector

object

次の操作を実行するための設定を含めます。

  • LVM ボリュームグループに追加するデバイスへのパスを指定する。
  • LVM ボリュームグループに追加されたデバイスを強制的にワイプする。

詳細は、「ボリュームグループへのデバイスの追加について」を参照してください。

deviceSelector.paths

array

デバイスパスを指定します。

このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage でサポートされていない場合、LVMCluster CR が Failed 状態に移行します。

deviceSelector.optionalPaths

array

オプションのデバイスパスを指定します。

このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage によってサポートされていない場合、LVM Storage はエラーを起こすことなくデバイスを無視します。

deviceSelector. forceWipeDevicesAndDestroyAllData

boolean

LVM Storage は、ファイルシステム署名が含まれていない空のディスクのみを使用します。確実にディスクが空で、ファイルシステム署名が含まれていないようにするには、使用する前にディスクを消去します。

選択したデバイスを強制的にワイプするには、このフィールドを true に設定します。デフォルトでは、このフィールドは false に設定されています。

警告

このフィールドが true に設定されている場合、LVM Storage がデバイス上の以前のデータをすべてワイプします。この機能は注意して使用してください。

次の条件のいずれかが満たされている場合にデバイスをワイプすると、データの整合性が失われる可能性があります。

  • デバイスがスワップ領域として使用されている。
  • デバイスが RAID アレイの一部である。
  • デバイスがマウントされている。

これらの条件のいずれかに該当する場合は、ディスクを強制的にワイプしないでください。代わりに、ディスクを手動でワイプする必要があります。

deviceClasses.thinPoolConfig

object

LVM ボリュームグループにシンプールを作成するための設定を含めます。

このフィールドを除外すると、論理ボリュームはシックプロビジョニングされます。

シックプロビジョニングされたストレージを使用する場合、次の制限があります。

  • ボリュームのクローン作成ではコピーオンライトはサポートされません。
  • スナップショットクラスはサポートされていません。
  • オーバープロビジョニングはサポートされていません。その結果、PersistentVolumeClaims (PVC) のプロビジョニングされた容量が、ボリュームグループからすぐに削減されます。
  • シンメトリクスはサポートされていません。シックプロビジョニングされたデバイスは、ボリュームグループメトリクスのみをサポートします。

thinPoolConfig.name

string

シンプールの名前を指定します。

thinPoolConfig.sizePercent

integer

シンプールを作成するための LVM ボリュームグループ内の領域の割合を指定します。

デフォルトでは、このフィールドは 90 に設定されています。設定できる最小値は 10、最大値は 90 です。

thinPoolConfig.overprovisionRatio

integer

シンプールで使用可能なストレージに基づいて追加のストレージをプロビジョニングするのに使用する係数を指定します。

たとえば、このフィールドが 10 に設定されている場合、シンプールで使用可能なストレージの量の最大 10 倍をプロビジョニングできます。

オーバープロビジョニングを無効にするには、このフィールドを 1 に設定します。

thinPoolConfig.chunkSize

integer

静的に計算されたチャンクサイズをシンプールに指定します。このフィールドは、ChunkSizeCalculationPolicy フィールドが Static に設定されている場合にのみ使用されます。lvm2 の根本的な制限のため、このフィールドの値は 64 KiB - 1 GiB の範囲で設定する必要があります。

このフィールドを設定せず、ChunkSizeCalculationPolicy フィールドが Static に設定されている場合、デフォルトのチャンクサイズとして 128 KiB が設定されます。

詳細は、「チャンクサイズの概要」を参照してください。

thinPoolConfig.chunkSizeCalculationPolicy

string

基盤となるボリュームグループのチャンクサイズを計算するポリシーを指定します。このフィールドは、Static または Host のいずれかに設定できます。デフォルトでは、このフィールドは Static に設定されています。

このフィールドが Static に設定されている場合、チャンクサイズが chunkSize フィールドの値に設定されます。chunkSize フィールドが設定されていない場合、チャンクサイズは 128 KiB に設定されます。

このフィールドが Host に設定されている場合、チャンクサイズは lvm.conf ファイルの設定に基づいて計算されます。

詳細は、「LVM ストレージで使用するデバイスのサイズを設定する際の制限事項」を参照してください。

4.12.4.2.1. LVM Storage で使用するデバイスのサイズを設定する際の制限事項

LVM Storage を使用したストレージのプロビジョニングで使用できるデバイスのサイズを設定する際の制限は、次のとおりです。

  • プロビジョニングできる合計ストレージサイズは、基礎となる論理ボリュームマネージャー (LVM) シンプールのサイズとオーバープロビジョニング係数によって制限されます。
  • 論理ボリュームのサイズは、物理エクステント (PE) のサイズと論理エクステント (LE) のサイズによって異なります。

    • PE および LE のサイズは、物理デバイスおよび論理デバイスの作成時に定義できます。
    • デフォルトの PE および LE サイズは 4 MB です。
    • PE のサイズを大きくした場合、LVM の最大サイズは、カーネルの制限とディスク領域によって決定されます。

次の表に、静的設定とホスト設定のチャンクサイズとボリュームサイズの制限を示します。

表4.6 テスト済みの設定
パラメーター

チャンクサイズ

128 KiB

最大ボリュームサイズ

32 TiB

表4.7 静的設定の理論上のサイズ制限
パラメーター最小値最大値

チャンクサイズ

64 KiB

1 GiB

ボリュームサイズ

基盤となる Red Hat Enterprise Linux CoreOS (RHCOS) システムの最小サイズ。

基盤となる RHCOS システムの最大サイズ。

表4.8 ホスト設定の理論上のサイズ制限
パラメーター

チャンクサイズ

この値は、lvm.conf ファイル内の設定に基づいています。デフォルトでは、この値は 128 KiB に設定されています。

最大ボリュームサイズ

基盤となる RHCOS システムの最大ボリュームサイズと同じです。

最小ボリュームサイズ

基盤となる RHCOS システムの最小ボリュームサイズと同じです。

4.12.4.2.2. ボリュームグループへのデバイスの追加について

LVMCluster CR の deviceSelector フィールドには、論理ボリュームマネージャー (LVM) ボリュームグループに追加するデバイスへのパスを指定するための設定が含まれています。

デバイスへのパスは、deviceSelector.paths フィールド、deviceSelector.optionalPaths フィールド、またはその両方で指定できます。deviceSelector.paths フィールドと deviceSelector.optionalPaths フィールドのどちらにもデバイスパスを指定しなかった場合、LVM Storage によって、サポートされている未使用のデバイスがボリュームグループ (VG) に追加されます。

deviceSelector フィールドに Redundant Array of Independent Disks (RAID) アレイへのパスを追加して、RAID アレイを LVM ストレージと統合できます。mdadm ユーティリティーを使用して RAID アレイを作成できます。LVM ストレージはソフトウェア RAID の作成をサポートしていません。

注記

RAID アレイは、OpenShift Container Platform のインストール中にのみ作成できます。RAID アレイの作成に関する詳細は、以下のセクションを参照してください。

暗号化されたデバイスをボリュームグループに追加することもできます。OpenShift Container Platform のインストール中に、クラスターノードでディスク暗号化を有効にすることができます。デバイスを暗号化した後、deviceSelector フィールドで LUKS 暗号化デバイスへのパスを指定できます。ディスク暗号化の詳細は、「ディスク暗号化について」および「ディスク暗号化とミラーリングの設定」を参照してください。

VG に追加するデバイスは、LVM ストレージでサポートされている必要があります。サポートされていないデバイスの詳細は、「LVM ストレージでサポートされていないデバイス」を参照してください。

LVM ストレージは、次の条件が満たされた場合にのみ、デバイスを VG に追加します。

  • デバイスパスが存在する。
  • デバイスが LVM Storage によってサポートされている。
重要

デバイスを VG に追加した後は、そのデバイスを削除することはできません。

LVM ストレージは動的デバイス検出をサポートします。LVMCluster CR に deviceSelector フィールドを追加しない場合、デバイスが利用可能になると、LVM Storage は新しいデバイスを自動的に VG に追加します。

警告

以下の理由により、動的デバイス検出を通じてデバイスを VG に追加することは推奨されません。

  • VG に追加するつもりのない新しいデバイスを追加すると、LVM ストレージは動的デバイス検出を通じてこのデバイスを VG に自動的に追加します。
  • LVM ストレージが動的デバイス検出を通じて VG にデバイスを追加する場合、LVM ストレージはノードからデバイスを削除することを制限しません。VG にすでに追加されているデバイスを削除または更新すると、VG が中断される可能性があります。これにより、データが失われ、手動でのノードの修復が必要になる可能性もあります。
4.12.4.2.3. LVM Storage でサポートされないデバイス

LVMCluster カスタムリソース (CR) の deviceSelector フィールドにデバイスパスを追加する場合は、そのデバイスが LVM Storage でサポートされていることを確認してください。サポートされていないデバイスへのパスを追加すると、論理ボリュームの管理が複雑になることを回避するために、LVM Storage はそのデバイスを除外します。

deviceSelector フィールドでデバイスパスを指定しない場合、LVM Storage はサポート対象の未使用デバイスのみ追加します。

注記

デバイスに関する情報を取得するには、次のコマンドを実行します。

$ lsblk --paths --json -o \
NAME,ROTA,TYPE,SIZE,MODEL,VENDOR,RO,STATE,KNAME,SERIAL,PARTLABEL,FSTYPE

LVM Storage は、次のデバイスをサポートしません。

読み取り専用デバイス
ro パラメーターが true に設定されているデバイス。
一時停止されたデバイス
state パラメーターが suspended に設定されているデバイス。
ROM デバイス
type パラメーターが rom に設定されているデバイス。
LVM パーティションデバイス
type パラメーターが lvm に設定されているデバイス。
無効なパーティションラベルを持つデバイス
partlabel パラメーターが biosboot、または reserved に設定されているデバイス。
無効なファイルシステムを持つデバイス

fstype パラメーターが、null または LVM2_member 以外の値に設定されているデバイス。

重要

LVM Storage は、そのデバイスに子デバイスが含まれていない場合に限り、fstype パラメーターが LVM2_member に設定されているデバイスをサポートします。

別のボリュームグループの一部であるデバイス

デバイスのボリュームグループに関する情報を取得するには、次のコマンドを実行します。

$ pvs <device-name> 1
1
<device-name> をデバイス名に置き換えます。
バインドマウントを備えたデバイス

デバイスのマウントポイントを取得するには、次のコマンドを実行します。

$ cat /proc/1/mountinfo | grep <device-name> 1
1
<device-name> をデバイス名に置き換えます。
子デバイスを含むデバイス
注記

予期しない動作を防ぐために、LVM Storage で使用する前にデバイスをワイプすることが推奨されます。

4.12.4.3. LVMCluster カスタムリソースを作成する方法

LVMCluster カスタムリソース (CR) は、OpenShift CLI (oc) または OpenShift Container Platform Web コンソールを使用して作成できます。Red Hat Advanced Cluster Management (RHACM) を使用して LVM Storage をインストールした場合は、RHACM を使用して LVMCluster CR を作成することもできます。

LVMCluster CR を作成すると、LVM Storage によって次のシステム管理 CR が作成されます。

  • 各デバイスクラスの storageClassvolumeSnapshotClass

    注記

    LVM Storage は、ストレージクラスとボリュームスナップショットクラスの名前を lvms-<device_class_name> の形式で設定します。<device_class_name> は、LVMCluster CR の deviceClasses.name フィールドの値です。たとえば、deviceClasses.name フィールドが vg1 に設定されている場合、ストレージクラスとボリュームスナップショットクラスの名前は lvms-vg1 になります。

  • LVMVolumeGroup: この CR は、LVM ボリュームグループによってサポートされる特定のタイプの永続ボリューム (PV) です。複数のノードにわたる個々のボリュームグループを追跡します。
  • LVMVolumeGroupNodeStatus: この CR は、ノード上のボリュームグループのステータスを追跡します。
4.12.4.3.1. 以前の LVM Storage インストールからのボリュームグループを再利用する

新しいボリュームグループ (VG) を作成する代わりに、以前の LVM Storage インストールからの既存の VG を再利用できます。

再利用できるのは VG のみです。VG に関連付けられた論理ボリュームは再利用できません。

重要

この手順は、LVMCluster カスタムリソース (CR) の作成中にのみ実行できます。

前提条件

手順

  1. LVMCluster CR YAML ファイルを開きます。
  2. 次の例の説明に従って、LVMCluster CR のパラメーターを設定します。

    LVMCluster CR YAML ファイルの例

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
      namespace: openshift-storage
    spec:
    # ...
      storage:
        deviceClasses:
        - name: vg1  1
          fstype: ext4 2
          default: true
          deviceSelector: 3
    # ...
            forceWipeDevicesAndDestroyAllData: false 4
          thinPoolConfig: 5
    # ...
          nodeSelector: 6
    # ...

    1
    このフィールドは、以前の LVM Storage インストールの VG 名に設定します。
    2
    このフィールドは、ext4 または xfs に設定します。デフォルトでは、このフィールドは xfs に設定されています。
    3
    deviceSelector フィールドに新しいデバイスパスを指定すると、再利用する新しいデバイスを VG に追加できます。新しいデバイスを VG に追加する必要がない場合は、現在の LVM Storage インストールの deviceSelector 設定が以前の LVM Storage インストールの設定と同じであることを確認してください。
    4
    このフィールドを true に設定すると、LVM Storage が VG に追加されたデバイス上のすべてのデータをワイプします。
    5
    再利用する VG の thinPoolConfig 設定を保持するには、現在の LVM Storage インストールの thinPoolConfig 設定が以前の LVM Storage インストールの thinPoolConfig 設定と同じであることを確認してください。保持しない場合は、必要に応じて thinPoolConfig フィールドを設定できます。
    6
    LVM ボリュームグループを作成するノードを選択するための要件を設定します。このフィールドが空の場合、no-schedule テイントのないすべてのノードが考慮されます。
  3. LVMCluster CR YAML ファイルを保存します。
注記

ボリュームグループに含まれているデバイスを表示するには、次のコマンドを実行します。

$ pvs -S vgname=<vg_name> 1
1
<vg_name> は、ボリュームグループの名前に置き換えます。
4.12.4.3.2. CLI を使用した LVMCluster CR の作成

OpenShift CLI (oc) を使用して、ワーカーノード上に LVMCluster カスタムリソース (CR) を作成できます。

重要

OpenShift Container Platform クラスターでは、LVMCluster カスタムリソース (CR) のインスタンスを 1 つだけ作成できます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとして OpenShift Container Platform にログインしている。
  • LVM Storage がインストールされている。
  • クラスターにワーカーノードがインストールされている。
  • 「LVMCluster カスタムリソースについて」セクションを確認した。

手順

  1. LVMCluster カスタムリソース (CR) YAML ファイルを作成します。

    LVMCluster CR YAML ファイルの例

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
      namespace: openshift-storage
    spec:
    # ...
      storage:
        deviceClasses: 1
    # ...
          nodeSelector: 2
    # ...
          deviceSelector: 3
    # ...
          thinPoolConfig: 4
    # ...

    1
    ローカルストレージデバイスを LVM ボリュームグループに割り当てるための設定を含めます。
    2
    LVM ボリュームグループを作成するノードを選択するための設定を含めます。このフィールドが空の場合、no-schedule テイントのないすべてのノードが考慮されます。
    3
    LVM ボリュームグループに追加するデバイスへのパスを指定し、LVM ボリュームグループに追加されたデバイスを強制的にワイプするための設定を含めます。
    4
    LVM ボリュームグループにシンプールを作成するための設定を含めます。このフィールドを除外すると、論理ボリュームはシックプロビジョニングされます。
  2. 次のコマンドを実行して、LVMCluster CR を作成します。

    $ oc create -f <file_name>

    出力例

    lvmcluster/lvmcluster created

検証

  1. LVMCluster CR が Ready 状態であることを確認します。

    $ oc get lvmclusters.lvm.topolvm.io -o jsonpath='{.items[*].status}' -n <namespace>

    出力例

    {"deviceClassStatuses": 1
    [
      {
        "name": "vg1",
        "nodeStatus": [ 2
            {
                "devices": [ 3
                    "/dev/nvme0n1",
                    "/dev/nvme1n1",
                    "/dev/nvme2n1"
                ],
                "node": "kube-node", 4
                "status": "Ready" 5
            }
        ]
      }
    ]
    "state":"Ready"} 6

    1
    デバイスクラスのステータス。
    2
    各ノードの LVM ボリュームグループのステータス。
    3
    LVM ボリュームグループの作成に使用されるデバイスのリスト。
    4
    デバイスクラスが作成されるノード。
    5
    ノード上の LVM ボリュームグループのステータス。
    6
    LVMCluster CR のステータス。
    注記

    LVMCluster CR が Failed 状態の場合、status フィールドに失敗の理由が表示されます。

    失敗の理由を示す status フィールドの例:

    status:
      deviceClassStatuses:
        - name: vg1
          nodeStatus:
            - node: my-node-1.example.com
              reason: no available devices found for volume group
              status: Failed
      state: Failed
  2. オプション: 各デバイスクラスに対して LVM Storage によって作成されたストレージクラスを表示するには、次のコマンドを実行します。

    $ oc get storageclass

    出力例

    NAME          PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    lvms-vg1      topolvm.io           Delete          WaitForFirstConsumer   true                   31m

  3. オプション: 各デバイスクラスに対して LVM Storage によって作成されたボリュームスナップショットクラスを表示するには、次のコマンドを実行します。

    $ oc get volumesnapshotclass

    出力例

    NAME          DRIVER               DELETIONPOLICY   AGE
    lvms-vg1      topolvm.io           Delete           24h

4.12.4.3.3. Web コンソールを使用した LVMCluster CR の作成

OpenShift Container Platform Web コンソールを使用して、ワーカーノード上に LVMCluster CR を作成できます。

重要

OpenShift Container Platform クラスターでは、LVMCluster カスタムリソース (CR) のインスタンスを 1 つだけ作成できます。

前提条件

  • cluster-admin 権限を使用して OpenShift Container Platform クラスターにアクセスできる。
  • LVM Storage がインストールされている。
  • クラスターにワーカーノードがインストールされている。
  • 「LVMCluster カスタムリソースについて」セクションを確認した。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Operators Installed Operators をクリックします。
  3. openshift-storage namespace で、LVM Storage をクリックします。
  4. Create LVMCluster をクリックし、Form view または YAML view のいずれかを選択します。
  5. LVMCluster CR の必要なパラメーターを設定します。
  6. Create をクリックします。
  7. オプション: LVMCLuster CR を編集する場合は、次の操作を実行します。

    1. LVMCluster タブをクリックします。
    2. Actions メニューから Edit LVMCluster を選択します。
    3. YAML をクリックし、LVMCLuster CR の必要なパラメーターを編集します。
    4. Save をクリックします。

検証

  1. LVMCLuster ページで、LVMCluster CR が Ready 状態であることを確認します。
  2. オプション: 各デバイスクラスに対して LVM Storage によって作成された使用可能なストレージクラスを表示するには、Storage StorageClasses をクリックします。
  3. オプション: 各デバイスクラスに対して LVM Storage によって作成された使用可能なボリュームスナップショットクラスを表示するには、Storage VolumeSnapshotClasses をクリックします。
4.12.4.3.4. RHACM を使用した LVMCluster CR の作成

RHACM を使用して LVM Storage をインストールした後、LVMCluster カスタムリソース (CR) を作成する必要があります。

前提条件

  • RHACM を使用して LVM Storage をインストールした。
  • cluster-admin 権限を持つアカウントを使用して RHACM クラスターにアクセスできる。
  • 「LVMCluster カスタムリソースについて」セクションを確認した。

手順

  1. OpenShift Container Platform の認証情報を使用して RHACM CLI にログインします。
  2. LVMCluster CR を作成するための設定を含む ConfigurationPolicy CR YAML ファイルを作成します。

    LVMCluster CR を作成するための ConfigurationPolicy CR YAML ファイルの例

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: lvms
      namespace: openshift-storage
    spec:
      object-templates:
      - complianceType: musthave
        objectDefinition:
          apiVersion: lvm.topolvm.io/v1alpha1
          kind: LVMCluster
          metadata:
            name: my-lvmcluster
            namespace: openshift-storage
          spec:
            storage:
              deviceClasses: 1
    # ...
                deviceSelector: 2
    # ...
                thinPoolConfig: 3
    # ...
                nodeSelector: 4
    # ...
      remediationAction: enforce
      severity: low

    1
    ローカルストレージデバイスを LVM ボリュームグループに割り当てるための設定を含めます。
    2
    LVM ボリュームグループに追加するデバイスへのパスを指定し、LVM ボリュームグループに追加されたデバイスを強制的にワイプするための設定を含めます。
    3
    LVM ボリュームグループにシンプールを作成するための設定を含めます。このフィールドを除外すると、論理ボリュームはシックプロビジョニングされます。
    4
    LVM ボリュームグループを作成するノードを選択するための設定を含めます。このフィールドが空の場合、no-schedule テイントのないすべてのノードが考慮されます。
  3. 次のコマンドを実行して、ConfigurationPolicy CR を作成します。

    $ oc create -f <file_name> -n <cluster_namespace> 1
    1
    LVM Storage がインストールされている OpenShift Container Platform クラスターの namespace。

4.12.4.4. LVMCluster カスタムリソースを削除する方法

LVMCluster カスタムリソース (CR) は、OpenShift CLI (oc) または OpenShift Container Platform Web コンソールを使用して削除できます。Red Hat Advanced Cluster Management (RHACM) を使用して LVM Storage をインストールした場合は、RHACM を使用して LVMCluster CR を削除することもできます。

LVMCluster CR を削除すると、LVM Storage によって次の CR が削除されます。

  • storageClass
  • volumeSnapshotClass
  • LVMVolumeGroup
  • LVMVolumeGroupNodeStatus
4.12.4.4.1. CLI を使用した LVMCluster CR の削除

OpenShift CLI (oc) を使用して、LVMCluster カスタムリソース (CR) を削除できます。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。
  • LVM Storage によってプロビジョニングされた永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンが削除されている。これらのリソースを使用しているアプリケーションも削除されている。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを実行して、LVMCluster CR を削除します。

    $ oc delete lvmcluster <lvmclustername> -n openshift-storage

検証

  • LVMCluster CR が削除されたことを確認するには、次のコマンドを実行します。

    $ oc get lvmcluster -n <namespace>

    出力例

    No resources found in openshift-storage namespace.

4.12.4.4.2. Web コンソールを使用した LVMCluster CR の削除

OpenShift Container Platform Web コンソールを使用して、LVMCluster カスタムリソース (CR) を削除できます。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。
  • LVM Storage によってプロビジョニングされた永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンが削除されている。これらのリソースを使用しているアプリケーションも削除されている。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Operators Installed Operators をクリックして、インストールされているすべての Operators を表示します。
  3. openshift-storage namespace で LVM Storage をクリックします。
  4. LVMCluster タブをクリックします。
  5. Actions から Delete LVMCluster を選択します。
  6. Delete をクリックします。

検証

  • LVMCLuster ページで、LVMCluster CR が削除されたことを確認します。
4.12.4.4.3. RHACM を使用した LVMCluster CR の削除

Red Hat Advanced Cluster Management (RHACM) を使用して LVM Storage をインストールした場合は、RHACM を使用して LVMCluster CR を削除できます。

前提条件

  • cluster-admin 権限を持つユーザーとして RHACM クラスターにアクセスできる。
  • LVM Storage によってプロビジョニングされた永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンが削除されている。これらのリソースを使用しているアプリケーションも削除されている。

手順

  1. OpenShift Container Platform の認証情報を使用して RHACM CLI にログインします。
  2. LVMCluster CR 用に作成した ConfigurationPolicy CR YAML ファイルを削除します。

    $ oc delete -f <file_name> -n <cluster_namespace> 1
    1
    LVM Storage がインストールされている OpenShift Container Platform クラスターの namespace。
  3. LVMCluster CR を削除するための Policy CR YAML ファイルを作成します。

    LVMCluster CR を削除するための Policy CR の例

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-lvmcluster-delete
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: enforce
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-lvmcluster-removal
            spec:
              remediationAction: enforce 1
              severity: low
              object-templates:
                - complianceType: mustnothave
                  objectDefinition:
                    kind: LVMCluster
                    apiVersion: lvm.topolvm.io/v1alpha1
                    metadata:
                      name: my-lvmcluster
                      namespace: openshift-storage 2
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-lvmcluster-delete
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-policy-lvmcluster-delete
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: policy-lvmcluster-delete
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-lvmcluster-delete
    spec:
      clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
      clusterSelector: 3
        matchExpressions:
          - key: mykey
            operator: In
            values:
              - myvalue

    1
    policy-templatespec.remediationAction は、spec.remediationAction の前のパラメーター値によってオーバーライドされます。
    2
    この namespace フィールドには openshift-storage 値が必要です。
    3
    クラスターを選択するための要件を設定します。選択基準に一致するクラスターから LVM Storage がアンインストールされます。
  4. 次のコマンドを実行して Policy CR を作成します。

    $ oc create -f <file_name> -n <namespace>
  5. LVMCluster CR が削除されたかどうかを確認するための Policy CR YAML ファイルを作成します。

    LVMCluster CR が削除されたかどうかを確認するための Policy CR の例

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-lvmcluster-inform
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    spec:
      remediationAction: inform
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-lvmcluster-removal-inform
            spec:
              remediationAction: inform 1
              severity: low
              object-templates:
                - complianceType: mustnothave
                  objectDefinition:
                    kind: LVMCluster
                    apiVersion: lvm.topolvm.io/v1alpha1
                    metadata:
                      name: my-lvmcluster
                      namespace: openshift-storage 2
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-lvmcluster-check
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-policy-lvmcluster-check
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: policy-lvmcluster-inform
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-lvmcluster-check
    spec:
      clusterConditions:
        - status: "True"
          type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          - key: mykey
            operator: In
            values:
              - myvalue

    1
    policy-templatespec.remediationAction は、spec.remediationAction の前のパラメーター値によってオーバーライドされます。
    2
    namespace フィールドには openshift-storage 値が必要です。
  6. 次のコマンドを実行して Policy CR を作成します。

    $ oc create -f <file_name> -n <namespace>

検証

  • 次のコマンドを実行して、Policy CR のステータスを確認します。

    $ oc get policy -n <namespace>

    出力例

    NAME                       REMEDIATION ACTION   COMPLIANCE STATE   AGE
    policy-lvmcluster-delete   enforce              Compliant          15m
    policy-lvmcluster-inform   inform               Compliant          15m

    重要

    Policy CR が Compliant 状態である必要があります。

4.12.4.5. ストレージのプロビジョニング

LVMCluster カスタムリソース (CR) を使用して LVM ボリュームグループを作成した後、永続ボリューム要求 (PVC) を作成してストレージをプロビジョニングできます。

以下は、各ファイルシステムタイプに対して要求できる最小ストレージサイズです。

  • block: 8 MiB
  • xfs: 300 MiB
  • ext4: 32 MiB

PVC を作成するには、PersistentVolumeClaim オブジェクトを作成する必要があります。

前提条件

  • LVMCluster CR が作成されている。

手順

  1. OpenShift CLI (oc) にログインします。
  2. PersistentVolumeClaim オブジェクトを作成します。

    PersistentVolumeClaim オブジェクトの例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lvm-block-1 1
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Block 2
      resources:
        requests:
          storage: 10Gi 3
        limits:
          storage: 20Gi 4
      storageClassName: lvms-vg1 5

    1
    PVC の名前を指定します。
    2
    ブロック PVC を作成するには、このフィールドを Block に設定します。ファイル PVC を作成するには、このフィールドを Filesystem に設定します。
    3
    ストレージサイズを指定します。値が最小ストレージサイズより小さい場合、要求されるストレージサイズは最小ストレージサイズに切り上げられます。プロビジョニングできる合計ストレージサイズは、Logical Volume Manager (LVM) シンプールのサイズとオーバープロビジョニング係数によって制限されます。
    4
    オプション: ストレージ制限を指定します。このフィールドには、最小ストレージサイズ以上の値を設定します。それ以外の場合、PVC の作成はエラーが発生して失敗します。
    5
    storageClassName フィールドの値は lvms-<device_class_name> の形式である必要があります。ここで、<device_class_name> は、LVMCluster CR の deviceClasses.name フィールドの値になります。たとえば、deviceClasses.name フィールドが vg1 に設定されている場合、storageClassName フィールドを lvms-vg1 に設定する必要があります。
    注記

    ストレージクラスの volumeBindingMode フィールドは WaitForFirstConsumer に設定されます。

  3. 以下のコマンドを実行して PVC を作成します。

    # oc create -f <file_name> -n <application_namespace>
    注記

    作成された PVC は、それらを使用する Pod をデプロイするまで Pending 状態のままになります。

検証

  • PVC が作成されたことを確認するには、次のコマンドを実行します。

    $ oc get pvc -n <namespace>

    出力例

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvm-block-1   Bound    pvc-e90169a8-fd71-4eea-93b8-817155f60e47   1Gi        RWO            lvms-vg1       5s

4.12.4.6. クラスターのストレージをスケールアップする方法

OpenShift Container Platform は、ベアメタル user-provisioned infrastructure 上のクラスターの追加のワーカーノードをサポートします。クラスターのストレージをスケールアップするには、使用可能なストレージを備えた新しいワーカーノードを追加するか、既存のワーカーノードに新しいデバイスを追加します。

Logical Volume Manager (LVM) Storage は、ノードがアクティブになると、追加のワーカーノードを検出して使用します。

クラスター上の既存のワーカーノードに新しいデバイスを追加するには、LVMCluster カスタムリソース (CR) の deviceSelector フィールドに新しいデバイスへのパスを追加する必要があります。

重要

LVMCluster CR に deviceSelector フィールドを追加できるのは、LVMCluster CR の作成時にのみです。LVMCluster CR の作成時に deviceSelector フィールドを追加しなかった場合は、LVMCluster CR を削除し、deviceSelector フィールドを含む新しい LVMCluster CR を作成する必要があります。

LVMCluster CR に deviceSelector フィールドを追加しない場合、デバイスが利用可能になると、LVM Storage は新しいデバイスを自動的に追加します。

注記

LVM Storage は、サポートされるデバイスのみを追加します。サポートされていないデバイスの詳細は、「LVM ストレージでサポートされていないデバイス」を参照してください。

4.12.4.6.1. CLI を使用したクラスターのストレージのスケールアップ

OpenShift CLI (oc) を使用して、クラスター上のワーカーノードのストレージ容量をスケールアップできます。

前提条件

  • 各クラスターには、Logical Volume Manager (LVM) Storage で使用される追加の未使用デバイスがある。
  • OpenShift CLI (oc) がインストールされている。
  • LVMCluster カスタムリソース (CR) が作成されている。

手順

  1. 次のコマンドを実行して、LVMCluster CR を編集します。

    $ oc edit <lvmcluster_file_name> -n <namespace>
  2. deviceSelector フィールドに新しいデバイスへのパスを追加します。

    LVMCluster CR の例

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
    # ...
          deviceSelector: 1
            paths: 2
            - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
            optionalPaths: 3
            - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:90:00.0-nvme-1
    # ...

    1
    LVM ボリュームグループに追加するデバイスへのパスを指定するための設定が含まれています。デバイスパスは、paths フィールド、optionalPaths フィールド、またはその両方で指定できます。pathsoptionalPaths の両方でデバイスパスを指定しない場合、Logical Volume Manager (LVM) Storage は、サポートされている未使用のデバイスを LVM ボリュームグループに追加します。LVM Storage は、次の条件が満たされている場合にのみ、デバイスを LVM ボリュームグループに追加します。
    • デバイスパスが存在する。
    • デバイスが LVM Storage によってサポートされている。サポートされていないデバイスの詳細は、「LVM ストレージでサポートされていないデバイス」を参照してください。
    2
    デバイスパスを指定します。このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage でサポートされていない場合、LVMCluster CR が Failed 状態に移行します。
    3
    オプションのデバイスパスを指定します。このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage によってサポートされていない場合、LVM Storage はエラーを起こすことなくデバイスを無視します。
    重要

    デバイスが LVM ボリュームグループに追加された後は、デバイスを削除できません。

  3. LVMCluster CR を保存します。
4.12.4.6.2. Web コンソールを使用したクラスターのストレージのスケールアップ

OpenShift Container Platform Web コンソールを使用して、クラスター上のワーカーノードのストレージ容量をスケールアップできます。

前提条件

  • 各クラスターには、Logical Volume Manager (LVM) Storage で使用される追加の未使用デバイスがある。
  • LVMCluster カスタムリソース (CR) が作成されている。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Operators Installed Operators をクリックします。
  3. openshift-storage namespace で LVM Storage をクリックします。
  4. LVMCluster タブをクリックして、クラスター上に作成された LVMCluster CR を表示します。
  5. Actions メニューから Edit LVMCluster を選択します。
  6. YAML タブをクリックします。
  7. LVMCluster CR を編集して、deviceSelector フィールドに新しいデバイスパスを追加します。

    LVMCluster CR の例

    apiVersion: lvm.topolvm.io/v1alpha1
    kind: LVMCluster
    metadata:
      name: my-lvmcluster
    spec:
      storage:
        deviceClasses:
    # ...
          deviceSelector: 1
            paths: 2
            - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:88:00.0-nvme-1
            optionalPaths: 3
            - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
            - /dev/disk/by-path/pci-0000:90:00.0-nvme-1
    # ...

    1
    LVM ボリュームグループに追加するデバイスへのパスを指定するための設定が含まれています。デバイスパスは、paths フィールド、optionalPaths フィールド、またはその両方で指定できます。pathsoptionalPaths の両方でデバイスパスを指定しない場合、Logical Volume Manager (LVM) Storage は、サポートされている未使用のデバイスを LVM ボリュームグループに追加します。LVM Storage は、次の条件が満たされている場合にのみ、デバイスを LVM ボリュームグループに追加します。
    • デバイスパスが存在する。
    • デバイスが LVM Storage によってサポートされている。サポートされていないデバイスの詳細は、「LVM ストレージでサポートされていないデバイス」を参照してください。
    2
    デバイスパスを指定します。このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage でサポートされていない場合、LVMCluster CR が Failed 状態に移行します。
    3
    オプションのデバイスパスを指定します。このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage によってサポートされていない場合、LVM Storage はエラーを起こすことなくデバイスを無視します。
    重要

    デバイスが LVM ボリュームグループに追加された後は、デバイスを削除できません。

  8. Save をクリックします。
4.12.4.6.3. RHACM を使用したクラスターのストレージのスケールアップ

RHACM を使用すると、クラスター上のワーカーノードのストレージ容量をスケールアップできます。

前提条件

  • cluster-admin 権限を持つアカウントを使用して RHACM クラスターにアクセスできる。
  • RHACM を使用して LVMCluster カスタムリソース (CR) を作成した。
  • 各クラスターには、Logical Volume Manager (LVM) Storage で使用される追加の未使用デバイスがある。

手順

  1. OpenShift Container Platform の認証情報を使用して RHACM CLI にログインします。
  2. 次のコマンドを実行して、RHACM を使用して作成した LVMCluster CR を編集します。

    $ oc edit -f <file_name> -ns <namespace> 1
    1
    <file_name> は、LVMCluster CR の名前に置き換えます。
  3. LVMCluster CR で、deviceSelector フィールドに新しいデバイスへのパスを追加します。

    LVMCluster CR の例

    apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: lvms
          spec:
            object-templates:
               - complianceType: musthave
                 objectDefinition:
                   apiVersion: lvm.topolvm.io/v1alpha1
                   kind: LVMCluster
                   metadata:
                     name: my-lvmcluster
                     namespace: openshift-storage
                   spec:
                     storage:
                       deviceClasses:
    # ...
                         deviceSelector: 1
                           paths: 2
                           - /dev/disk/by-path/pci-0000:87:00.0-nvme-1
                           optionalPaths: 3
                           - /dev/disk/by-path/pci-0000:89:00.0-nvme-1
    # ...

    1
    LVM ボリュームグループに追加するデバイスへのパスを指定するための設定が含まれています。デバイスパスは、paths フィールド、optionalPaths フィールド、またはその両方で指定できます。pathsoptionalPaths の両方でデバイスパスを指定しない場合、Logical Volume Manager (LVM) Storage は、サポートされている未使用のデバイスを LVM ボリュームグループに追加します。LVM Storage は、次の条件が満たされている場合にのみ、デバイスを LVM ボリュームグループに追加します。
    • デバイスパスが存在する。
    • デバイスが LVM Storage によってサポートされている。サポートされていないデバイスの詳細は、「LVM ストレージでサポートされていないデバイス」を参照してください。
    2
    デバイスパスを指定します。このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage でサポートされていない場合、LVMCluster CR が Failed 状態に移行します。
    3
    オプションのデバイスパスを指定します。このフィールドに指定されたデバイスパスが存在しない場合、またはデバイスが LVM Storage によってサポートされていない場合、LVM Storage はエラーを起こすことなくデバイスを無視します。
    重要

    デバイスが LVM ボリュームグループに追加された後は、デバイスを削除できません。

  4. LVMCluster CR を保存します。

4.12.4.7. 永続ボリューム要求の拡張

クラスターのストレージをスケールアップした後、既存の永続ボリューム要求 (PVC) を拡張できます。

PVC を拡張するには、PVC 内の storage フィールドを更新する必要があります。

前提条件

  • 動的プロビジョニングが使用される。
  • PVC に関連付けられた StorageClass オブジェクトには、allowVolumeExpansion フィールドが true に設定されています。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを実行して、spec.resources.requests.storage フィールドの値を現在の値より大きい値に更新します。

    $ oc patch <pvc_name> -n <application_namespace> -p \ 1
    '{ "spec": { "resources": { "requests": { "storage": "<desired_size>" }}}} --type=merge' 2
    1
    <pvc_name> を、拡張する PVC の名前に置き換えます。
    2
    <desired_size> を、新しいサイズに置き換えて PVC を拡張します。

検証

  • サイズ変更が完了したことを確認するには、次のコマンドを実行します。

    $ oc get pvc <pvc_name> -n <application_namespace> -o=jsonpath={.status.capacity.storage}

    LVM Storage は、拡張中に PVC に Resizing 条件を追加します。PVC の拡張後、Resizing 条件を削除します。

4.12.4.8. 永続ボリューム要求の削除

OpenShift CLI (oc) を使用して、永続ボリューム要求 (PVC) を削除できます。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを実行して、PVC を削除します。

    $ oc delete pvc <pvc_name> -n <namespace>

検証

  • PVC が削除されたことを確認するには、次のコマンドを実行します。

    $ oc get pvc -n <namespace>

    削除された PVC は、このコマンドの出力には存在しません。

4.12.4.9. ボリュームスナップショットについて

LVM Storage によってプロビジョニングされる永続ボリューム要求 (PVC) のスナップショットを作成できます。

ボリュームスナップショットを使用して、次のアクションを実行できます。

  • アプリケーションデータをバックアップします。

    重要

    ボリュームスナップショットは元のデータと同じデバイスにあります。ボリュームスナップショットをバックアップとして使用するには、スナップショットを安全な場所に移動する必要があります。OpenShift API for Data Protection (OADP) のバックアップおよび復元ソリューションを使用できます。OADP の詳細は、「OADP の機能」を参照してください。

  • ボリュームスナップショットが作成された状態に戻します。
注記

ボリュームクローンのボリュームスナップショットを作成することもできます。

4.12.4.9.1. マルチノードトポロジーでボリュームスナップショットを作成する場合の制限事項

LVM Storage には、マルチノードトポロジーでのボリュームスナップショットの作成に関して、次の制限があります。

  • ボリュームスナップショットの作成は、LVM シンプール機能に基づいています。
  • ボリュームスナップショットを作成した後、元のデータソースをさらに更新するために、ノードには追加のストレージ領域が必要です。
  • ボリュームスナップショットは、元のデータソースをデプロイしたノード上でのみ作成できます。
  • スナップショットデータを使用する PVC に依存する Pod は、元のデータソースをデプロイしたノードでのみスケジュールできます。

関連情報

4.12.4.9.2. ボリュームスナップショットの作成

シンプールの利用可能な容量とオーバープロビジョニングの制限に基づいて、ボリュームスナップショットを作成できます。ボリュームスナップショットを作成するには、VolumeSnapshotClass オブジェクトを作成する必要があります。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。
  • 永続ボリューム要求 (PVC) が Bound 状態であることが確認されている。これは、一貫性のあるスナップショットに必要です。
  • PVC へのすべての I/O が停止されている。

手順

  1. OpenShift CLI (oc) にログインします。
  2. VolumeSnapshot オブジェクトを作成します。

    VolumeSnapshot オブジェクトの例

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: lvm-block-1-snap 1
    spec:
      source:
        persistentVolumeClaimName: lvm-block-1 2
      volumeSnapshotClassName: lvms-vg1 3

    1
    ボリュームスナップショットの名前を指定します。
    2
    ソース PVC の名前を指定します。LVM Storage は、この PVC のスナップショットを作成します。
    3
    このフィールドをボリュームスナップショットクラスの名前に設定します。
    注記

    使用可能なボリュームスナップショットクラスのリストを取得するには、次のコマンドを実行します。

    $ oc get volumesnapshotclass
  3. 次のコマンドを実行して、ソース PVC を作成した namespace にボリュームスナップショットを作成します。

    $ oc create -f <file_name> -n <namespace>

    LVM Storage は、PVC の読み取り専用コピーをボリュームスナップショットとして作成します。

検証

  • ボリュームスナップショットが作成されたことを確認するには、次のコマンドを実行します。

    $ oc get volumesnapshot -n <namespace>

    出力例

    NAME               READYTOUSE   SOURCEPVC     SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS   SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    lvm-block-1-snap   true         lvms-test-1                           1Gi           lvms-vg1        snapcontent-af409f97-55fc-40cf-975f-71e44fa2ca91   19s            19s

    作成したボリュームスナップショットの READYTOUSE フィールドの値は true である必要があります。

4.12.4.9.3. ボリュームスナップショットの復元

ボリュームスナップショットを復元するには、dataSource.name フィールドをボリュームスナップショットの名前に設定して、永続ボリューム要求 (PVC) を作成する必要があります。

復元される PVC はボリュームスナップショットおよびソース PVC とは切り離されています。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。
  • ボリュームスナップショットが作成されている。

手順

  1. OpenShift CLI (oc) にログインします。
  2. ボリュームスナップショットを復元するための設定を使用して PersistentVolumeClaim オブジェクトを作成します。

    ボリュームスナップショットを復元するための PersistentVolumeClaim オブジェクトの例

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lvm-block-1-restore
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Block
      Resources:
        Requests:
          storage: 2Gi 1
      storageClassName: lvms-vg1 2
      dataSource:
        name: lvm-block-1-snap 3
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io

    1
    復元された PVC のストレージサイズを指定します。要求された PVC のストレージサイズは、復元するボリュームスナップショットのストレージサイズ以上である必要があります。より大きな PVC が必要な場合は、ボリュームスナップショットを復元した後に PVC のサイズを変更することもできます。
    2
    このフィールドを、復元するボリュームスナップショットのソース PVC の storageClassName フィールドの値に設定します。
    3
    このフィールドを、復元するボリュームスナップショットの名前に設定します。
  3. 次のコマンドを実行して、ボリュームスナップショットを作成した namespace に PVC を作成します。

    $ oc create -f <file_name> -n <namespace>

検証

  • ボリュームスナップショットが復元されたことを確認するには、次のコマンドを実行します。

    $ oc get pvc -n <namespace>

    出力例

    NAME                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvm-block-1-restore   Bound    pvc-e90169a8-fd71-4eea-93b8-817155f60e47   1Gi        RWO            lvms-vg1       5s

4.12.4.9.4. ボリュームスナップショットの削除

永続ボリューム要求 (PVC) のボリュームスナップショットを削除できます。

重要

永続ボリューム要求 (PVC) を削除すると、LVM Storage は永続ボリューム要求のみを削除し、永続ボリューム要求のスナップショットは削除しません。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。
  • 削除するボリュームスナップショットが使用されていないことを確認している。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを実行して、ボリュームのスナップショットを削除します。

    $ oc delete volumesnapshot <volume_snapshot_name> -n <namespace>

検証

  • ボリュームスナップショットが削除されたことを確認するには、次のコマンドを実行します。

    $ oc get volumesnapshot -n <namespace>

    削除されたボリュームのスナップショットは、このコマンドの出力には存在しません。

4.12.4.10. ボリュームクローンについて

ボリュームクローンは、既存の永続ボリューム要求 (PVC) の複製です。ボリュームクローンを作成して、データのポイントインタイムコピーを作成できます。

4.12.4.10.1. マルチノードトポロジーでボリュームクローンを作成する場合の制限事項

LVM Storage には、マルチノードトポロジーでのボリュームクローンの作成に関して、次の制限があります。

  • ボリュームクローンの作成は、LVM シンプール機能に基づいています。
  • ボリュームクローンを作成した後、元のデータソースをさらに更新するには、ノードに追加のストレージが必要です。
  • ボリュームクローンは、元のデータソースをデプロイしたノード上でのみ作成できます。
  • クローンデータを使用する PVC に依存する Pod は、元のデータソースをデプロイしたノード上でのみスケジュールできます。
4.12.4.10.2. ボリュームクローンの作成

永続ボリューム要求 (PVC) のクローンを作成するには、ソース永続ボリューム要求を作成した namespace に PersistentVolumeClaim オブジェクトを作成する必要があります。

重要

クローン作成された PVC には書き込みアクセス権限があります。

前提条件

  • ソース PVC が Bound 状態であることが確認されている。これは一貫性のあるクローンに必要です。

手順

  1. OpenShift CLI (oc) にログインします。
  2. PersistentVolumeClaim オブジェクトを作成します。

    ボリュームクローンを作成するための PersistentVolumeClaim オブジェクトの例

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lvm-pvc-clone
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: lvms-vg1 1
      volumeMode: Filesystem 2
      dataSource:
        kind: PersistentVolumeClaim
        name: lvm-pvc 3
      resources:
        requests:
          storage: 1Gi 4

    1
    このフィールドを、ソース PVC の storageClassName フィールドの値に設定します。
    2
    このフィールドを、ソース PVC の volumeMode フィールドに設定します。
    3
    ソース PVC の名前を指定します。
    4
    クローン作成された PVC のストレージサイズを指定します。クローン作成された PVC のストレージサイズは、ソース PVC のストレージサイズ以上である必要があります。
  3. 次のコマンドを実行して、ソース PVC を作成した namespace に PVC を作成します。

    $ oc create -f <file_name> -n <namespace>

検証

  • ボリュームクローンが作成されたことを確認するには、次のコマンドを実行します。

    $ oc get pvc -n <namespace>

    出力例

    NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvm-block-1-clone   Bound    pvc-e90169a8-fd71-4eea-93b8-817155f60e47   1Gi        RWO            lvms-vg1       5s

4.12.4.10.3. ボリュームクローンの削除

ボリュームクローンを削除できます。

重要

永続ボリューム要求 (PVC) を削除すると、LVM Storage はソース永続ボリューム要求のみを削除し、永続ボリューム要求のクローンは削除しません。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを実行して、クローン作成された PVC を削除します。

    # oc delete pvc <clone_pvc_name> -n <namespace>

検証

  • ボリュームクローンが削除されたことを確認するには、次のコマンドを実行します。

    $ oc get pvc -n <namespace>

    削除されたボリュームクローンは、このコマンドの出力には存在しません。

4.12.4.11. LVM Storage の更新

LVM Storage を更新して、OpenShift Container Platform バージョンとの互換性を確保できます。

前提条件

  • OpenShift Container Platform クラスターが更新されている。
  • 以前のバージョンの LVM Storage がインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つアカウントを使用してクラスターにアクセスできる。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを実行して、LVM Storage のインストール時に作成した Subscription カスタムリソース (CR) を更新します。

    $ oc patch subscription lvms-operator -n openshift-storage --type merge --patch '{"spec":{"channel":"<update_channel>"}}' 1
    1
    <update_channel> を、インストールする LVM Storage のバージョンに置き換えます。たとえば、stable-4.16 などです。
  3. 次のコマンドを実行して、更新イベントを表示し、インストールが完了していることを確認します。

    $ oc get events -n openshift-storage

    出力例

    ...
    8m13s       Normal    RequirementsUnknown   clusterserviceversion/lvms-operator.v4.16   requirements not yet checked
    8m11s       Normal    RequirementsNotMet    clusterserviceversion/lvms-operator.v4.16   one or more requirements couldn't be found
    7m50s       Normal    AllRequirementsMet    clusterserviceversion/lvms-operator.v4.16   all requirements found, attempting install
    7m50s       Normal    InstallSucceeded      clusterserviceversion/lvms-operator.v4.16   waiting for install components to report healthy
    7m49s       Normal    InstallWaiting        clusterserviceversion/lvms-operator.v4.16   installing: waiting for deployment lvms-operator to become ready: deployment "lvms-operator" waiting for 1 outdated replica(s) to be terminated
    7m39s       Normal    InstallSucceeded      clusterserviceversion/lvms-operator.v4.16   install strategy completed with no errors
    ...

検証

  • 次のコマンドを実行して、LVM Storage のバージョンを確認します。

    $ oc get subscription lvms-operator -n openshift-storage -o jsonpath='{.status.installedCSV}'

    出力例

    lvms-operator.v4.16

4.12.4.12. LVM Storage の監視

クラスターモニタリングを有効にするには、LVM Storage をインストールした namespace に次のラベルを追加する必要があります。

openshift.io/cluster-monitoring=true
重要

RHACM でクラスターモニタリングを有効化する方法の詳細は、可観測性カスタムメトリクスの追加 を参照してください。

4.12.4.12.1. メトリクス

メトリクスを表示することで、LVM Storage を監視できます。

次の表は、topolvm メトリクスを説明しています。

表4.9 topolvm メトリクス
アラート説明

topolvm_thinpool_data_percent

LVM シンプールで使用されているデータ領域の割合を示します。

topolvm_thinpool_metadata_percent

LVM シンプールで使用されているメタデータ領域の割合を示します。

topolvm_thinpool_size_bytes

LVM シンプールのサイズをバイト単位で示します。

topolvm_volumegroup_available_bytes

LVM ボリュームグループ内の利用可能な領域をバイト単位で示します。

topolvm_volumegroup_size_bytes

LVM ボリュームグループのサイズをバイト単位で示します。

topolvm_thinpool_overprovisioned_available

LVM シンプールの利用可能なオーバープロビジョニングサイズをバイト単位で示します。

注記

メトリクスは 10 分ごとに、または変更 (シンプールに新しい論理ボリュームが作成されるなど) があったときに更新されます。

4.12.4.12.2. アラート

シンプールとボリュームグループが最大ストレージ容量に達すると、それ以降の操作は失敗します。これにより、データ損失が発生する可能性があります。

LVM Storage は、シンプールとボリュームグループの使用量が特定の値を超えると、次のアラートを送信します。

表4.10 LVM Storage アラート
アラート説明

VolumeGroupUsageAtThresholdNearFull

このアラートは、ボリュームグループとシンプールの両方の使用量がノード上で 75% を超えるとトリガーされます。データの削除またはボリュームグループの拡張が必要です。

VolumeGroupUsageAtThresholdCritical

このアラートは、ボリュームグループとシンプールの両方の使用量がノード上で 85% を超えるとトリガーされます。この場合、ボリュームグループは、かなりいっぱいになっています。データの削除またはボリュームグループの拡張が必要です。

ThinPoolDataUsageAtThresholdNearFull

このアラートは、ボリュームグループ内のシンプールのデータ使用量がノード上で 75% を超えるとトリガーされます。データの削除またはシンプールの拡張が必要です。

ThinPoolDataUsageAtThresholdCritical

このアラートは、ボリュームグループ内のシンプールのデータ使用量がノード上で 85% を超えるとトリガーされます。データの削除またはシンプールの拡張が必要です。

ThinPoolMetaDataUsageAtThresholdNearFull

このアラートは、ボリュームグループ内のシンプールのメタデータ使用量がノード上で 75% を超えるとトリガーされます。データの削除またはシンプールの拡張が必要です。

ThinPoolMetaDataUsageAtThresholdCritical

このアラートは、ボリュームグループ内のシンプールのメタデータ使用量がノード上で 85% を超えるとトリガーされます。データの削除またはシンプールの拡張が必要です。

4.12.4.13. CLI を使用した LVM Storage のインストール

OpenShift CLI (oc) を使用して LVM ストレージをアンインストールできます。

前提条件

  • cluster-admin 権限を持つユーザーとして oc にログインしている。
  • LVM Storage によってプロビジョニングされた永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンが削除されている。これらのリソースを使用しているアプリケーションも削除されている。
  • LVMCluster カスタムリソース (CR) が削除されている。

手順

  1. 次のコマンドを実行して、LVM Storage Operator の currentCSV の値を取得します。

    $ oc get subscription.operators.coreos.com lvms-operator -n <namespace> -o yaml | grep currentCSV

    出力例

    currentCSV: lvms-operator.v4.15.3

  2. 次のコマンドを実行して、サブスクリプションを削除します。

    $ oc delete subscription.operators.coreos.com lvms-operator -n <namespace>

    出力例

    subscription.operators.coreos.com "lvms-operator" deleted

  3. 次のコマンドを実行して、ターゲット namespace 内の LVM Storage Operator の CSV を削除します。

    $ oc delete clusterserviceversion <currentCSV> -n <namespace> 1
    1
    <currentCSV> は、LVM Storage Operator の currentCSV 値に置き換えます。

    出力例

    clusterserviceversion.operators.coreos.com "lvms-operator.v4.15.3" deleted

検証

  • LVM Storage Operator がアンインストールされたことを確認するには、次のコマンドを実行します。

    $ oc get csv -n <namespace>

    LVM Storage Operator が正常にアンインストールされた場合、このコマンドの出力には表示されません。

4.12.4.14. Web コンソールを使用した LVM ストレージのアンインストール

OpenShift Container Platform Web コンソールを使用して LVM Storage をアンインストールできます。

前提条件

  • cluster-admin パーミッションを持つユーザーとして OpenShift Container Platform にアクセスできる。
  • LVM Storage によってプロビジョニングされた永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンが削除されている。これらのリソースを使用しているアプリケーションも削除されている。
  • LVMCluster カスタムリソース (CR) が削除されている。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Operators Installed Operators をクリックします。
  3. openshift-storage namespace で LVM Storage をクリックします。
  4. Details タブをクリックします。
  5. Actions メニューから、Uninstall Operator を選択します。
  6. オプション: プロンプトが表示されたら、Delete all operand instances for this operator チェックボックスを選択して、LVM Storage のオペランドインスタンスを削除します。
  7. Uninstall をクリックします。

4.12.4.15. RHACM を使用してインストールされた LVM Storage のアンインストール

RHACM を使用してインストールした LVM Storage をアンインストールするには、LVM Storage のインストールと設定用に作成した RHACM Policy カスタムリソース (CR) を削除する必要があります。

前提条件

  • cluster-admin 権限を持つユーザーとして RHACM クラスターにアクセスできる。
  • LVM Storage によってプロビジョニングされた永続ボリューム要求 (PVC)、ボリュームスナップショット、およびボリュームクローンが削除されている。これらのリソースを使用しているアプリケーションも削除されている。
  • RHACM を使用して作成した LVMCluster CR を削除した。

手順

  1. OpenShift CLI (oc) にログインします。
  2. 次のコマンドを使用して、LVM Storage のインストールと設定用に作成した RHACM Policy CR を削除します。

    $ oc delete -f <policy> -n <namespace> 1
    1
    <policy> は、Policy CR YAML ファイルの名前に置き換えます。
  3. LVM Storage をアンインストールするための設定を含む Policy CR YAML ファイルを作成します。

    LVM Storage をアンインストールするための Policy CR の例

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-uninstall-lvms
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
        - key: mykey
          operator: In
          values:
          - myvalue
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-uninstall-lvms
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: placement-uninstall-lvms
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: uninstall-lvms
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
      name: uninstall-lvms
    spec:
      disabled: false
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: uninstall-lvms
          spec:
            object-templates:
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: v1
                kind: Namespace
                metadata:
                  name: openshift-storage
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: operators.coreos.com/v1
                kind: OperatorGroup
                metadata:
                  name: openshift-storage-operatorgroup
                  namespace: openshift-storage
                spec:
                  targetNamespaces:
                  - openshift-storage
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: operators.coreos.com/v1alpha1
                kind: Subscription
                metadata:
                  name: lvms-operator
                  namespace: openshift-storage
            remediationAction: enforce
            severity: low
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: policy-remove-lvms-crds
          spec:
            object-templates:
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: logicalvolumes.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmclusters.lvm.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmvolumegroupnodestatuses.lvm.topolvm.io
            - complianceType: mustnothave
              objectDefinition:
                apiVersion: apiextensions.k8s.io/v1
                kind: CustomResourceDefinition
                metadata:
                  name: lvmvolumegroups.lvm.topolvm.io
            remediationAction: enforce
            severity: high

  4. 次のコマンドを実行して Policy CR を作成します。

    $ oc create -f <policy> -ns <namespace>

4.12.4.16. must-gather を使用したログファイルおよび診断情報のダウンロード

LVM Storage が問題を自動的に解決できない場合、must-gather ツールを使用してログファイルと診断情報を収集し、ユーザーまたは Red Hat サポートが問題を確認して解決策を決定できるようにします。

手順

  • LVM Storage クラスターに接続されているクライアントから must-gather コマンドを実行します。

    $ oc adm must-gather --image=registry.redhat.io/lvms4/lvms-must-gather-rhel9:v4.16 --dest-dir=<directory_name>

4.12.4.17. 永続ストレージのトラブルシューティング

論理ボリュームマネージャー (LVM) ストレージを使用して永続ストレージを設定するときに、トラブルシューティングが必要ないくつかの問題が発生する可能性があります。

4.12.4.17.1. 保留状態でスタックしている PVC を調査する

永続ボリューム要求 (PVC) は、次の理由により Pending 状態のままになることがあります。

  • コンピューティングリソースが足りない
  • ネットワークの問題
  • ストレージクラスまたはノードセレクターが一致していない
  • 利用可能な永続ボリューム (PV) がない
  • PV を持つノードが Not Ready 状態にある

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとして OpenShift CLI (oc) にログインしている。

手順

  1. 次のコマンドを実行して、PVC のリストを取得します。

    $ oc get pvc

    出力例

    NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    lvms-test   Pending                                      lvms-vg1       11s

  2. 次のコマンドを実行して、Pending 状態のままになっている PVC に関連するイベントを検査します。

    $ oc describe pvc <pvc_name> 1
    1
    <pvc_name> を PVC の名前に置き換えます。たとえば、lvms-vg1 です。

    出力例

    Type     Reason              Age               From                         Message
    ----     ------              ----              ----                         -------
    Warning  ProvisioningFailed  4s (x2 over 17s)  persistentvolume-controller  storageclass.storage.k8s.io "lvms-vg1" not found

4.12.4.17.2. ストレージクラスがない状態からの回復

storage class not found というエラーが発生した場合は、LVMCluster カスタムリソース (CR) をチェックし、すべての論理ボリュームマネージャー (LVM) ストレージ Pod が Running 状態であることを確認します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとして OpenShift CLI (oc) にログインしている。

手順

  1. 以下のコマンドを実行して、LVMCluster CR が存在することを確認します。

    $ oc get lvmcluster -n openshift-storage

    出力例

    NAME            AGE
    my-lvmcluster   65m

  2. LVMCluster CR が存在しない場合は、LVMCluster CR を作成します。詳細は、「LVMCluster カスタムリソースを作成する方法」を参照してください。
  3. openshift-storage namespace で、次のコマンドを実行して、すべての LVM ストレージ Pod が Running 状態であることを確認します。

    $ oc get pods -n openshift-storage

    出力例

    NAME                                  READY   STATUS    RESTARTS      AGE
    lvms-operator-7b9fb858cb-6nsml        3/3     Running   0             70m
    topolvm-controller-5dd9cf78b5-7wwr2   5/5     Running   0             66m
    topolvm-node-dr26h                    4/4     Running   0             66m
    vg-manager-r6zdv                      1/1     Running   0             66m

    このコマンドの出力には、以下の Pod の実行中のインスタンスが含まれている必要があります。

    • lvms-operator
    • vg-manager

      設定ファイルの読み込み中に vg-manager Pod が停止する場合は、LVM ストレージが使用できるディスクが見つからないことが原因です。この問題のトラブルシューティングに必要な情報を取得するには、以下のコマンドを実行して vg-manager Pod のログを確認します。

      $ oc logs -l app.kubernetes.io/component=vg-manager -n openshift-storage
4.12.4.17.3. ノード障害からの回復

クラスター内のノード障害が原因で、永続ボリューム要求 (PVC) が Pending 状態のままになることがあります。

障害が発生したノードを特定するには、topolvm-node Pod の再起動回数を調べることができます。再起動回数の増加は、基礎となるノードに潜在的な問題があることを示しており、さらなる調査とトラブルシューティングが必要になる場合があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとして OpenShift CLI (oc) にログインしている。

手順

  • 次のコマンドを実行して、topolvm-node Pod インスタンスの再起動回数を調べます。

    $ oc get pods -n openshift-storage

    出力例

    NAME                                  READY   STATUS    RESTARTS      AGE
    lvms-operator-7b9fb858cb-6nsml        3/3     Running   0             70m
    topolvm-controller-5dd9cf78b5-7wwr2   5/5     Running   0             66m
    topolvm-node-dr26h                    4/4     Running   0             66m
    topolvm-node-54as8                    4/4     Running   0             66m
    topolvm-node-78fft                    4/4     Running   17 (8s ago)   66m
    vg-manager-r6zdv                      1/1     Running   0             66m
    vg-manager-990ut                      1/1     Running   0             66m
    vg-manager-an118                      1/1     Running   0             66m

次のステップ

  • ノードの問題を解決した後も PVC が Pending 状態のままになっている場合は、強制クリーンアップを実行する必要があります。詳細は、「強制クリーンアップの実行」を参照してください。
4.12.4.17.4. ディスク障害からの回復

永続ボリューム要求 (PVC) に関連するイベントの検査中にエラーメッセージが表示された場合は、基になるボリュームまたはディスクに問題がある可能性があります。

ディスクおよびボリュームのプロビジョニングの問題が発生すると、Failed to provision volume with storage class <storage_class_name> などの一般的なエラーメッセージが表示されます。一般的なエラーメッセージの後には、特定のボリューム障害のエラーメッセージが続きます。

以下の表は、ボリューム障害のエラーメッセージを説明しています。

表4.11 ボリューム障害のエラーメッセージ
エラーメッセージ説明

Failed to check volume existence

ボリュームがすでに存在するかどうかを確認する際に問題が発生したことを示します。ボリューム検証の失敗は、ネットワーク接続の問題やその他の障害によって発生する可能性があります。

Failed to bind volume

使用可能な永続ボリューム (PV) が PVC の要件と一致しない場合、ボリュームのバインドに失敗する可能性があります。

FailedMount または FailedAttachVolume

このエラーは、ボリュームをノードにマウントしようとしたときに問題が発生したことを示します。ディスクに障害が発生した場合、Pod が PVC を使用しようとしたときにこのエラーが表示されることがあります。

FailedUnMount

このエラーは、ノードからボリュームをアンマウントしようとしたときに問題が発生したことを示します。ディスクに障害が発生した場合、Pod が PVC を使用しようとしたときにこのエラーが表示されることがあります。

Volume is already exclusively attached to one node and cannot be attached to another

このエラーは、ReadWriteMany アクセスモードをサポートしていないストレージソリューションで発生する可能性があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとして OpenShift CLI (oc) にログインしている。

手順

  1. 次のコマンドを実行して、PVC に関連付けられたイベントを検査します。

    $ oc describe pvc <pvc_name> 1
    1
    <pvc_name> を PVC の名前に置き換えます。
  2. 問題が発生しているホストへの直接接続を確立します。
  3. ディスクの問題を解決します。

次のステップ

  • ディスクの問題を解決した後もボリューム障害メッセージが続く場合や再発する場合は、強制クリーンアップを実行する必要があります。詳細は、「強制クリーンアップの実行」を参照してください。
4.12.4.17.5. 強制クリーンアップの実行

トラブルシューティング手順を完了した後もディスクまたはノード関連の問題が解決しない場合は、強制クリーンアップを実行する必要があります。強制クリーンアップは、永続的な問題に対処し、論理ボリュームマネージャー (LVM) ストレージが確実に適切に機能するために使用されます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとして OpenShift CLI (oc) にログインしている。
  • LVM ストレージを使用して作成されたすべての永続ボリューム要求 (PVC) が削除されている。
  • LVM ストレージを使用して作成された PVC を使用している Pod を停止している。

手順

  1. 次のコマンドを実行して、openshift-storage namespace に切り替えます。

    $ oc project openshift-storage
  2. 以下のコマンドを実行して、LogicalVolume カスタムリソース (CR) が存在するか確認します。

    $ oc get logicalvolume
    1. LogicalVolume CR が存在する場合は、以下のコマンドを実行して削除します。

      $ oc delete logicalvolume <name> 1
      1
      <name>LogicalVolume CR の名前に置き換えます。
    2. LogicalVolume CR を削除した後、以下のコマンドを実行してファイナライザーを削除します。

      $ oc patch logicalvolume <name> -p '{"metadata":{"finalizers":[]}}' --type=merge 1
      1
      <name>LogicalVolume CR の名前に置き換えます。
  3. 以下のコマンドを実行して、LVMVolumeGroup CR が存在するか確認します。

    $ oc get lvmvolumegroup
    1. LVMVolumeGroup CR が存在する場合は、以下のコマンドを実行して削除します。

      $ oc delete lvmvolumegroup <name> 1
      1
      <name>LVMVolumeGroup CR の名前に置き換えます。
    2. LVMVolumeGroup CR を削除した後、以下のコマンドを実行してファイナライザーを削除します。

      $ oc patch lvmvolumegroup <name> -p '{"metadata":{"finalizers":[]}}' --type=merge 1
      1
      <name>LVMVolumeGroup CR の名前に置き換えます。
  4. 以下のコマンドを実行して、LVMVolumeGroupNodeStatus CR を削除します。

    $ oc delete lvmvolumegroupnodestatus --all
  5. 次のコマンドを実行して、LVMCluster CR を削除します。

    $ oc delete lvmcluster --all
    1. LVMCluster CR を削除した後、以下のコマンドを実行してファイナライザーを削除します。

      $ oc patch lvmcluster <name> -p '{"metadata":{"finalizers":[]}}' --type=merge 1
      1
      <name>LVMCluster CR の名前に置き換えます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.