デフォルトのStorageClassを変更する

このページでは、特別な要件を持たないPersistentVolumeClaimのボリュームをプロビジョニングするために使用される、デフォルトのStorage Classを変更する方法を示します。

始める前に

Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:

バージョンを確認するには次のコマンドを実行してください: kubectl version.

なぜデフォルトのストレージクラスを変更するのか?

インストール方法によっては、Kubernetesクラスターがデフォルトとしてマークされた既存のStorageClassと共にデプロイされる場合があります。 このデフォルトのStorageClassは、特定のストレージクラスを必要としないPersistentVolumeClaimのストレージを動的にプロビジョニングするために使用されます。 詳細はPersistentVolumeClaimのドキュメントを参照してください。

プリインストールされたデフォルトのStorageClassは、想定されるワークロードに適合しない場合があります。 たとえば、高価すぎるストレージをプロビジョニングする可能性があります。 このような場合、デフォルトのStorageClassを変更するか、ストレージの動的プロビジョニングを回避するために完全に無効にすることができます。

デフォルトのStorageClassを削除しても、機能しない場合があります。 クラスター内で実行されているアドオンマネージャーによって自動的に再作成される可能性があるためです。 アドオンマネージャーと個々のアドオンを無効にする方法の詳細については、インストールのドキュメントを参照してください。

デフォルトのStorageClassを変更する

  1. クラスター内のStorageClassをリストします:

    kubectl get storageclass
    

    出力は次のようになります:

    NAME                 PROVISIONER               AGE
    standard (default)   kubernetes.io/gce-pd      1d
    gold                 kubernetes.io/gce-pd      1d
    

    デフォルトのStorageClassは(default)でマークされています。

  2. デフォルトのStorageClassを非デフォルトとしてマークします:

    デフォルトのStorageClassには、storageclass.kubernetes.io/is-default-classアノテーションがtrueに設定されています。 その他の値やアノテーションの欠如はfalseとして解釈されます。

    StorageClassを非デフォルトとしてマークするには、その値をfalseに変更する必要があります:

    kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    

    ここで、standardは選択したStorageClassの名前です。

  3. StorageClassをデフォルトとしてマークします:

    前のステップと同様に、アノテーションstorageclass.kubernetes.io/is-default-class=trueを追加/設定する必要があります。

    kubectl patch storageclass gold -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    

    複数のStorageClassをデフォルトとしてマークできることに注意してください。 複数のStorageClassがデフォルトとしてマークされている場合、storageClassNameが明示的に定義されていないPersistentVolumeClaimは、最も新しく作成されたデフォルトのStorageClassを使用して作成されます。 PersistentVolumeClaimが指定されたvolumeNameで作成された場合、静的ボリュームのstorageClassNamePersistentVolumeClaimStorageClassと一致しないと、保留状態のままになります。

  4. 選択したStorageClassがデフォルトであることを確認します:

    kubectl get storageclass
    

    出力は次のようになります:

    NAME             PROVISIONER               AGE
    standard         kubernetes.io/gce-pd      1d
    gold (default)   kubernetes.io/gce-pd      1d
    

次の項目