5.6. デフォルトストレージクラスの管理
5.6.1. 概要
デフォルトのストレージクラスを管理すると、複数の異なる目的を達成できます。
- 動的プロビジョニングを無効にして静的プロビジョニングを強制します。
- 他の優先ストレージクラスがある場合に、storage operator による最初のデフォルトストレージクラスの作成を阻止します。
- デフォルトのストレージクラスに名前を付け直すか変更します。
これらの目的を達成するには、ClusterCSIDriver
オブジェクトの spec.storageClassState
フィールドの設定を変更します。このフィールドで可能な設定は以下のとおりです。
- Managed: (デフォルト) コンテナーストレージインターフェイス (CSI) オペレーターがデフォルトのストレージクラスをアクティブに管理しているため、クラスター管理者によってデフォルトのストレージクラスに対して行われた手動変更のほとんどは削除され、デフォルトのストレージクラスは継続的に再作成されます。手動で削除しようとしました。
- Unmanaged: デフォルトのストレージクラスを変更できます。CSI Operator はストレージクラスをアクティブに管理しないため、自動的に作成するデフォルトのストレージクラスを調整します。
- Removed: CSI Operator はデフォルトのストレージクラスを削除します。
デフォルトのストレージクラスの管理は、次の Container Storage Interface (CSI) ドライバー operator によってサポートされています。
5.6.2. Web コンソールを使用したデフォルトのストレージクラスの管理
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- クラスター管理者権限でクラスターにアクセスできる。
手順
Web コンソールを使用してデフォルトのストレージクラスを管理するには、次の手順を実行します。
- Web コンソールにログインします。
- Administration > CustomResourceDefinitions をクリックします。
-
CustomResourceDefinitions ページで、
clustercsidriver
と入力して、ClusterCSIDriver
オブジェクトを見つけます。 - ClusterCSIDriver をクリックし、Instances タブをクリックします。
- 目的のインスタンスの名前をクリックし、YAML タブをクリックします。
spec.storageClassState
フィールドを追加し、値をManaged
、Unmanaged
、またはRemoved
に設定します。例
... spec: driverConfig: driverType: '' logLevel: Normal managementState: Managed observedConfig: null operatorLogLevel: Normal storageClassState: Unmanaged 1 ...
- 1
spec.storageClassState
フィールドが "Unmanaged" に設定されている
- Save をクリックします。
5.6.3. CLI を使用したデフォルトのストレージクラスの管理
前提条件
- クラスター管理者権限でクラスターにアクセスできる。
手順
CLI を使用してストレージクラスを管理するには、次のコマンドを実行します。
oc patch clustercsidriver $DRIVERNAME --type=merge -p "{\"spec\":{\"storageClassState\":\"${STATE}\"}}" 1
- 1
- ここで、
${STATE}
は "削除"、"管理"、または "非管理" です。$DRIVERNAME
はプロビジョナー名です。コマンドoc get sc
を実行すると、プロビジョナー名を見つけることができます。
5.6.4. デフォルトのストレージクラスが存在しないか、複数のデフォルトストレージクラスがある
5.6.4.1. 複数のデフォルトのストレージクラス
デフォルト以外のストレージクラスをデフォルトとしてマークし、既存のデフォルトストレージクラスの設定を解除しない場合、またはデフォルトのストレージクラスがすでに存在するときにデフォルトのストレージクラスを作成した場合は、複数のデフォルトストレージクラスが発生する可能性があります。複数のデフォルトストレージクラスが存在する場合、デフォルトストレージクラス (pvc.spec.storageClassName
=nil) を要求するすべての永続ボリューム要求 (PVC) は、そのストレージクラスのデフォルトステータスと管理者に関係なく、最後に作成されたデフォルトストレージクラスを取得します。アラートダッシュボードで、複数のデフォルトストレージクラス MultipleDefaultStorageClasses
があるというアラートを受け取ります。
5.6.4.2. デフォルトのストレージクラスなし
PVC が存在しないデフォルトのストレージクラスの使用を試みる可能性があるシナリオは 2 つあります。
- 管理者がデフォルトのストレージクラスを削除するか、デフォルト以外としてマークした後、ユーザーがデフォルトのストレージクラスを要求する PVC を作成します。
- インストール時に、インストーラーは、まだ作成されていないデフォルトのストレージクラスを要求する PVC を作成します。
前述のシナリオでは、PVC は無期限に保留状態のままになります。この状況を解決するには、デフォルトのストレージクラスを作成するか、既存のストレージクラスの 1 つをデフォルトとして宣言します。デフォルトのストレージクラスが作成または宣言されるとすぐに、PVC は新しいデフォルトのストレージクラスを取得します。可能であれば、最終的に PVC は通常どおり静的または動的にプロビジョニングされた PV にバインドされ、保留状態から抜け出します。
5.6.5. デフォルトストレージクラスの変更
次の手順を使用して、デフォルトのストレージクラスを変更します。
たとえば、gp3
と standard
の 2 つのストレージクラスがあり、デフォルトのストレージクラスを gp3
から standard
に変更する必要がある場合などです。
前提条件
- クラスター管理者権限でクラスターにアクセスできる。
手順
デフォルトのストレージクラスを変更するには、以下を実行します。
ストレージクラスを一覧表示します。
$ oc get storageclass
出力例
NAME TYPE gp3 (default) kubernetes.io/aws-ebs 1 standard kubernetes.io/aws-ebs
- 1
(default)
はデフォルトのストレージクラスを示します。
目的のストレージクラスをデフォルトにします。
目的のストレージクラスに、次のコマンドを実行して
storageclass.kubernetes.io/is-default-class
アノテーションをtrue
に設定します。$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
注記短期間であれば、複数のデフォルトのストレージクラスを使用できます。ただし、最終的には 1 つのデフォルトのストレージクラスのみが存在することを確認する必要があります。
複数のデフォルトストレージクラスが存在する場合、デフォルトストレージクラス (
pvc.spec.storageClassName
=nil) を要求するすべての永続ボリューム要求 (PVC) は、そのストレージクラスのデフォルトステータスと管理者に関係なく、最後に作成されたデフォルトストレージクラスを取得します。アラートダッシュボードで、複数のデフォルトストレージクラスMultipleDefaultStorageClasses
があるというアラートを受け取ります。古いデフォルトストレージクラスからデフォルトのストレージクラス設定を削除します。
古いデフォルトのストレージクラスの場合は、次のコマンドを実行して
storageclass.kubernetes.io/is-default-class
アノテーションの値をfalse
に変更します。$ oc patch storageclass gp3 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
変更内容を確認します。
$ oc get storageclass
出力例
NAME TYPE gp3 kubernetes.io/aws-ebs standard (default) kubernetes.io/aws-ebs