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 は無期限に保留状態のままになります。
OpenShift Container Platform は、PVC が保留状態にならないように、デフォルトのストレージクラスを遡って PVC に割り当てる機能を提供します。この機能を有効にすると、デフォルトのストレージクラスが存在しないときに作成されたデフォルトのストレージクラスを要求する PVC は、デフォルトのストレージクラスが作成されるか、既存のストレージクラスの 1 つがデフォルトとして宣言されるまで、保留状態のままになります。デフォルトのストレージクラスが作成または宣言されるとすぐに、PVC は新しいデフォルトのストレージクラスを取得します。
Retroactive なデフォルトのストレージクラスの割り当ては、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
5.6.4.2.1. 手順
Retroactive のデフォルトストレージクラスの割り当てを有効にするには、以下を実行します。
機能ゲートを有効にします (ノード → クラスターの操作 → 機能ゲートを使用した機能の有効化 を参照してください)。
重要機能ゲートを使用してテクノロジープレビュー機能をオンにした後にそれらをオフにすることはできません。その結果、クラスターのアップグレードはできなくなります。
次の設定例では、Retroactive なデフォルトのストレージクラスの割り当てと、その他すべてのテクノロジープレビュー機能が有効になります。
apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: TechPreviewNoUpgrade 1 ...- 1
- Retroactive のデフォルトストレージクラスの割り当てを有効にします。
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