すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:動的にプロビジョニングされたディスクボリュームの使用

最終更新日:Jun 13, 2025

ディスクボリュームは、高い IOPS と低いレイテンシを必要とするが、データ共有を必要としないアプリケーションに適しています。 Alibaba Cloud アカウント内にクラウドディスクが存在しない場合は、動的にプロビジョニングされたディスクボリュームを作成して、ディスクの作成とマウントを自動化できます。 これにより、データの永続性に関する要件を満たすことができます。 このトピックでは、動的にプロビジョニングされたディスクボリュームを使用する方法と、動的にプロビジョニングされたディスクボリュームを使用してデータを永続化できることを確認する方法について説明します。

シナリオ

ディスクは、以下のシナリオに適しています。

  • 高いディスク I/O スループットを必要とし、データ共有を必要としないアプリケーションを作成する場合。 アプリケーションは、MySQL や Redis などのストレージサービスを使用できます。

  • ログを高速で書き込む場合。

  • ポッドのライフサイクルとは無関係にデータを永続化する場合。

既存のディスクに基づく静的ボリュームのプロビジョニングに加えて、Kubernetes は StorageClasses に基づく動的ボリュームのプロビジョニングをサポートしています。 動的プロビジョニングを使用すると、ストレージリソースを動的に作成および割り当てることができます。 StorageClass を永続ボリューム要求 (PVC) に関連付けると、システムは PVC と StorageClass の構成に基づいて永続ボリューム (PV) を自動的に作成してバインドします。 動的プロビジョニングは、アプリケーションのストレージ要件を満たすために、ストレージリソースの作成と構成を自動化します。 動的プロビジョニングは、ストレージインフラストラクチャのオーケストレーションの複雑さも軽減します。

前提条件

  • Container Storage Interface (CSI) プラグインがクラスタにインストールされていること。

    説明
    • クラスタ管理ページの左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。 [ストレージ] タブで、csi-plugin と csi-provisioner がインストールされているかどうかを確認できます。 特定の機能を使用するために CSI プラグインを更新する方法の詳細については、「csi-plugin と csi-provisioner を更新する」をご参照ください。

    • クラスタで FlexVolume を使用している場合は、FlexVolume は使用できなくなったため、クラスタを CSI プラグインに移行する必要があります。 詳細については、「FlexVolume から CSI にアップグレードする」をご参照ください。

  • 仮想ノードにスケジュールする必要があるポッドにディスクボリュームをマウントする場合は、まず、次の表のバージョンのマッピングに基づいて kube-scheduler をアップグレードする必要があります。

    Kubernetes バージョン

    kube-scheduler バージョン

    ≥ 1.28

    ≥ 6.9.3

    1.26

    ≥ 6.8.7

    1.24

    ≥ 6.4.7

    1.22

    ≥ 6.4.5

使用上の注意

  • ディスクは共有できません。 ディスクでマルチアタッチが有効になっていない場合、各ディスクは 1 つのポッドにのみマウントできます。 マルチアタッチ機能の詳細については、「NVMe ディスクのマルチアタッチ機能と NVMe 予約機能を使用する」をご参照ください。

  • ディスクと同じゾーンにあるポッドにのみディスクをマウントできます。

  • ポッドが再構築されると、元のディスクがポッドにマウントされます。 特定の制限によりポッドを元のゾーンにスケジュールできない場合、ディスクをアタッチできないため、ポッドは保留中の状態のままになります。

  • ディスクは、Deployment ではなく、ポッドまたは StatefulSet にマウントすることをお勧めします。

    説明

    マルチアタッチが無効になっている場合、ディスクは 1 つのポッドにのみマウントできます。 ディスクを Deployment にマウントする場合は、Deployment のポッドレプリカの数を 1 に設定する必要があります。 複数のポッドを構成する場合、各ポッドに個別のディスクボリュームをマウントすることはできません。 また、ポッドのボリュームのマウントとマウント解除の優先順位を指定することもできません。 Deployment 内のポッドを再起動すると、Deployment で使用される更新ポリシーが原因で、再起動されたポッドにディスクがマウントされない場合があります。 ディスクを Deployment にマウントしないことをお勧めします。

  • ディスクボリュームを使用する場合にアプリケーション構成に securityContext.fsgroup パラメータが含まれていると、kubelet はボリュームのマウント後に chmod コマンドと chown コマンドを自動的に実行するため、ボリュームのマウントプロセスが遅くなる可能性があります。

    説明

    アプリケーション構成に securityContext.fsgroup パラメータを追加すると、Container Service for Kubernetes (ACK) はディスクがアプリケーションにマウントされたときにボリューム内のファイルの所有権を自動的に変更します。 所有権の変更に必要な時間は、ボリューム内のファイルの数によって異なります。 ボリューム内に多数のファイルが存在する場合、変更プロセスには長い時間がかかります。 Kubernetes 1.20 以後を実行するクラスタの場合、ポッド構成の fsGroupChangePolicy パラメータを OnRootMismatch に設定できます。 これにより、ACK はポッドが最初に起動されたときにのみファイルの所有権を変更します。 作成後にポッドを更新または再作成する場合、ボリュームのマウントプロセスには所有権の変更は含まれません。 前述の設定がビジネス要件を満たしていない場合は、init コンテナを作成し、関連する操作を実行するための権限を init コンテナに付与することをお勧めします。

StorageClasses

StorageClass は、使用するストレージのクラスを定義します。 StorageClass にさまざまなパラメータを指定して、パラメータに基づいてストレージリソースの供給と調整を自動化できます。 詳細については、「ストレージの基本」をご参照ください。

CSI プラグインをインストールすると、ACK はクラウドディスクのデフォルト StorageClasses を提供します。 デフォルトの StorageClasses がビジネス要件を満たしていない場合は、カスタム StorageClass を作成できます。

  • 既存の StorageClass のプロパティを変更することはできません。 StorageClass のプロパティを更新する場合は、使用するプロパティを使用して新しい StorageClass を作成する必要があります。 StorageClass の構成は、ACK コンソールで、または kubectl describe sc <storageclass-name> コマンドを実行することで表示できます。 StorageClass パラメータの詳細については、「StorageClass パラメータ」をご参照ください。

  • クラウドボックスの企業向け SSD (ESSD) は、パフォーマンスレベル 0 (PL0) である必要があります。 クラウドボックスを使用する場合は、ESSD の StorageClass を構成するときに、performanceLevelPL0 に設定する必要があります。 ESSD のデフォルト StorageClass は、PL1 ESSD を作成するために使用されます。 クラウドボックスを使用する場合は、ESSD の新しい StorageClass を作成する必要があります。

  • 標準 SSD、Ultra ディスク、および基本ディスクは、以前の世代のクラウドディスクであり、特定のリージョンおよびゾーンでは購入できません。 Ultra ディスクと基本ディスクの代わりにパフォーマンスレベル 0 の ESSD (PL0 ESSD) または ESSD Entry ディスクを使用し、標準 SSD の代わりに ESSD AutoPL ディスクを使用することをお勧めします。

デフォルト StorageClass

ディスクカテゴリ

alicloud-disk-topology-alltype

高可用性 (HA) 構成。 StorageClass を使用してディスクをポッドにマウントすると、システムはポッドをホストする Elastic Compute Service (ECS) が存在するゾーンにディスクを作成します。 ゾーン内のディスクカテゴリの在庫が十分であり、ディスクカテゴリがポッドをホストする ECS インスタンスのインスタンスタイプでサポートされている必要があります。 システムは最初に ESSD を作成しようとします。 ESSD の作成に失敗した場合、システムは標準 SSD の作成を試みます。 標準 SSD の作成に失敗した場合、システムは Ultra ディスクの作成を試みます。

重要

StorageClass 構成で volumeBindingMode: WaitForFirstConsumer を指定すると、システムはディスクを必要とするポッドがノードにスケジュールされた後にディスクを作成します。 これにより、ポッドをホストするノードが存在するゾーンにディスクが作成され、ゾーンの不整合によるマウントの失敗を防ぎます。

alicloud-disk-essd

ESSD を作成します。 デフォルトの PL は PL1 です。

alicloud-disk-ssd

標準 SSD を作成します。

alicloud-disk-efficiency

Ultra ディスクを作成します。

StorageClasses に基づく動的プロビジョニングを使用して作成されたディスクは、従量課金制を使用します。

kubectl を使用して動的にプロビジョニングされたディスクボリュームをマウントする

ステップ 1:StorageClass を作成する

デフォルトの StorageClasses がビジネス要件を満たしていない場合は、カスタム StorageClass を作成できます。既存の StorageClass のプロパティを変更することはできません。 StorageClass のプロパティを更新する場合は、使用するプロパティを使用して新しい StorageClass を作成する必要があります。

重要

クラウドディスクとは異なるゾーンにあるノードにクラウドディスクをマウントすることはできません。 また、クラウドディスクをマウントできる ECS インスタンスタイプは、ディスクのカテゴリによって異なります。 動的にプロビジョニングされたディスクボリュームをポッドにマウントする場合は、ディスクとポッドをホストするノードが同じゾーンにあることを確認してください。 また、ノードの ECS インスタンスタイプがディスクのカテゴリでサポートされている必要があります。 ディスクカテゴリと ECS インスタンスタイプの間の一致ルールの詳細については、「インスタンスファミリの概要」をご参照ください。

  1. disk-sc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

    重要
    • クラスタが複数のゾーンにデプロイされている場合は、クラウドディスクと ECS ノード間のゾーンの不整合によるマウントの失敗を防ぐために、WaitForFirstConsumer モード を使用する StorageClass を作成することをお勧めします。

    • 次のスケジュール方法またはアノテーションを使用して、クラウドディスクをマウントするポッドを仮想ノードにスケジュールする場合、WaitForFirstConsumer モード を使用する StorageClasses はサポートされません。

      • alibabacloud.com/eci: "true" ラベルを Elastic Container Instance ベースのポッドまたはポッドの名前空間に追加します。

      • alibabacloud.com/acs: "true" ラベルを ACS ポッドに追加します。

      • ポッド構成で nodeName パラメータを指定して、ポッドを仮想ノードにスケジュールします。 仮想ノードには、virtual-kubelet というプレフィックスが付いています。

      • k8s.aliyun.com/eci-vswitch アノテーションを追加して、Elastic Container Instance ベースのポッドの vSwitch を指定します。

      • k8s.aliyun.com/eci-fail-strategy: "fail-fast" アノテーションを追加して、Elastic Container Instance ベースのポッドのエラー処理ポリシーを fail-fast に設定します。

    WaitForFirstConsumer モード (ディスクを作成する前にポッドをスケジュールする)

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-wait-for-first-consumer
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_auto,cloud_essd,cloud_ssd # システムは、指定されたディスクカテゴリの優先順位に基づいてディスクの作成を試みます。 実際に作成されるディスクのカテゴリは、ディスクがマウントされる ECS インスタンスのインスタンスタイプと、ECS インスタンスがデプロイされているゾーンでサポートされているディスクカテゴリによって異なります。
      fstype: ext4
      diskTags: "a:b,b:c"
      encrypted: "false"
      performanceLevel: PL1 # クラウドボックスを使用する場合は、値を PL0 に設定する必要があります。
      provisionedIops: "40000"
      burstingEnabled: "false"
    volumeBindingMode: WaitForFirstConsumer
    reclaimPolicy: Retain
    allowVolumeExpansion: true

    即時モード (ポッドを作成する前にディスクを作成する)

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-immediate
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_essd,cloud_ssd,cloud_efficiency # システムは、指定されたディスクカテゴリの優先順位に基づいてディスクの作成を試みます。 実際に作成されるディスクのカテゴリは、ディスクがマウントされる ECS インスタンスのインスタンスタイプと、ECS インスタンスがデプロイされているゾーンでサポートされているディスクカテゴリによって異なります。
      regionId: cn-beijing
      zoneId: cn-beijing-b
      encrypted: "false"
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    volumeBindingMode: Immediate

    次の表に、StorageClass のパラメータを示します。

    パラメータ

    説明

    name

    StorageClass の名前。 名前は小文字で始まり、小文字、数字、ピリオド (.)、およびハイフン (-) のみを含めることができます。

    provisioner

    ドライバのタイプ。 この例では、パラメータは diskplugin.csi.alibabacloud.com に設定されており、これは Alibaba Cloud によって提供される CSI プラグインが使用されていることを示します。

    parameters

    type パラメータは必須です。 このパラメータは、使用されるディスクカテゴリを指定します。 有効値:

    • cloud_auto: ESSD AutoPL ディスク。

    • cloud_essd: ESSD。 これはデフォルト値です。

    • cloud_essd_entry: ESSD Entry ディスク。

    • cloud_ssd: 標準 SSD。

    • cloud_efficiency: Ultra ディスク。

    • elastic_ephemeral_disk_standard: 標準エラスティック一時ディスク。

    • elastic_ephemeral_disk_premium: プレミアムエラスティック一時ディスク。

    • cloud_regional_disk_auto: リージョン ESSD。

    このパラメータは、前述の値の任意の組み合わせに設定できます。 たとえば、このパラメータを type: cloud_ssd,cloud_essd,cloud_auto に設定できます。 この場合、システムはカテゴリの指定された順序でディスクの作成を試みます。 ディスクが作成されると、システムは試行を停止します。

    重要

    クラスタ内のノードのゾーンとインスタンスタイプ、およびディスクの課金とパフォーマンスの要件に基づいて、ディスクカテゴリを指定できます。 詳細については、以下のトピックをご参照ください。

    次のオプションパラメータを追加して、ディスク構成をカスタマイズできます。

    • resourceGroupId: ディスクが属するリソースグループ。 デフォルト値: ""

    • regionId: ディスクが作成されるリージョンの ID。 値は、クラスタのリージョン ID に設定する必要があります。

    • zoneId: ディスクが作成されるゾーンの ID。

      • クラスタが 1 つのゾーンにのみデプロイされている場合は、値をゾーンの ID に設定します。

      • クラスタが複数のゾーンにデプロイされている場合は、複数のゾーン ID を指定できます。 例: cn-beijing-a,cn-beijing-b

    • fstype: ディスクのファイルシステム。 有効値: ext4 および xfs。 デフォルト値: ext4

    • mkfsOptions: ディスクのフォーマットに指定されるパラメータ。 例: mkfsOptions: "-O project,quota"

    • diskTags: ディスクに追加するタグ。 例: diskTags: "a:b,b:c"。 インストールされている CSIバージョンが 1.30.3 以降の場合は、diskTags/a: b 形式で値を指定することもできます。

    • encrypted: ディスクを暗号化するかどうかを指定します。 デフォルト値: false。 デフォルト値は、ディスクが暗号化されていないことを示します。

    • performanceLevel: ESSD の PL。 有効値: PL0PL1PL2、および PL3。 デフォルト値: PL1。 詳細については、「容量と PL」をご参照ください。

      説明

      クラウドボックスの ESSD は PL0 である必要があります。 クラウドボックスを使用する場合は、ESSD の StorageClass を構成するときに、パラメータを PL0 に設定する必要があります。

    • volumeExpandAutoSnapshot。 このパラメータは、CSI 1.31.4 以降では非推奨です。

    • provisionedIops: ディスクのプロビジョニングされた読み取り/書き込み IOPS。 このパラメータは、ESSD AutoPL ディスク でのみサポートされています。 有効値: 0 ~ min{50000, 1000 x 容量 - ベースライン IOPS}。ここで、ベースライン IOPS = min{1800 + 50 x 容量, 50000} です。

    • burstingEnabled: ディスクのパフォーマンスバーストを有効にするかどうかを指定します。 このパラメータは、ESSD AutoPL ディスク でのみサポートされています。 デフォルト値: false。 デフォルト値は、パフォーマンスバーストを無効にします。

    • multiAttach: ディスクのマルチアタッチ機能を有効にするかどうかを指定します。 デフォルト値: false。 デフォルト値は、マルチアタッチ機能を無効にします。 詳細については、「クラウドディスクのマルチアタッチ」をご参照ください。

    volumeBindingMode

    ディスクのバインディングモード。 デフォルト値: ImmediateWaitForFirstConsumer に設定することもできます。

    • Immediate: StorageClass を使用する PVC が作成されるときにディスクを作成します。 これにより、ディスクを使用するポッドを作成する前に、ディスクが作成およびプロビジョニングされます。

    • WaitForFirstConsumer: PVC を使用するポッドが作成されるまで、PV のバインディングとプロビジョニングを遅らせます。 ポッドがノードにスケジュールされると、ノードがデプロイされているゾーンにディスクが作成され、PV としてプロビジョニングされます。

    システムは、ボリュームバインディングモードに基づいてディスクが作成されるゾーンを選択します。

    • WaitForFirstConsumer モードが使用されている場合、システムは PVC を使用する最初のポッドがデプロイされているゾーンにディスクを作成します。

    • Immediate モードが使用されている場合、システムは zoneId パラメータの値に基づいてディスクが作成されるゾーンを選択します。 zoneId パラメータに 1 つのゾーン ID のみが指定されている場合、システムは指定されたゾーンにディスクを作成します。 zoneId パラメータに複数のゾーン ID が指定されている場合、システムは指定されたゾーンからラウンドロビン方式でゾーンを選択します。

    reclaimPolicy

    ディスクの再利用ポリシー。 デフォルト値: DeleteRetain に設定することもできます。

    • Delete: PVC が削除されると、PV とクラウドディスクも削除されます。

    • Retain: PVC が削除されると、PV とクラウドディスクは保持されます。 PV とクラウドディスクは手動で削除する必要があります。

    データセキュリティの要件が高い場合は、誤って削除されないように、値を Retain に設定することをお勧めします。

    allowVolumeExpansion

    ディスクボリュームの自動拡張を有効にするには、値を true に設定します。

  2. StorageClass を作成します。

    kubectl create -f disk-sc.yaml
  3. StorageClass を表示します。

    kubectl get sc

    予期される出力:

    NAME                                    PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-disk-efficiency                diskplugin.csi.alibabacloud.com   Delete          Immediate              true                   158m
    alicloud-disk-essd                      diskplugin.csi.alibabacloud.com   Delete          Immediate              true                   158m
    alicloud-disk-ssd                       diskplugin.csi.alibabacloud.com   Delete          Immediate              true                   158m
    alicloud-disk-topology-alltype          diskplugin.csi.alibabacloud.com   Delete          WaitForFirstConsumer   true                   158m
    alicloud-disk-wait-for-first-consumer   diskplugin.csi.alibabacloud.com   Retain          WaitForFirstConsumer   true                   10s

ステップ 2:PVC を作成する

  1. disk-pvc.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 20Gi
      storageClassName: alicloud-disk-wait-for-first-consumer # この例では、PVC-PV バインディングの遅延を使用する StorageClass が指定されています。

    次の表に、パラメータを示します。

    パラメータ

    説明

    accessModes

    ボリュームのアクセスモード。 詳細については、「ボリュームアクセスモード」をご参照ください。

    有効値: ReadWriteOnceReadOnlyMany、および ReadWriteMany。 サポートされているアクセスモードは、StorageClass の multiAttach パラメータと PVC の volumeMode パラメータによって異なります。

    • multiAttach パラメータが false に設定され、volumeMode パラメータが空でない場合、ReadWriteOnce アクセスモードのみがサポートされます。

    • multiAttach パラメータが true に設定され、volumeMode パラメータが Filesystem に設定されている場合、ReadWriteOnce または ReadOnlyMany アクセスモードがサポートされます。

    • multiAttach パラメータが true に設定され、volumeMode パラメータが Block に設定されている場合、3 つのボリュームモードすべてがサポートされます。

    説明

    multiAttach パラメータは、[マルチアタッチ] 機能を有効にするかどうかを指定するために使用されます。 デフォルト値: false。 デフォルト値は、マルチアタッチ機能を無効にします。 詳細については、「クラウドディスクのマルチアタッチ」をご参照ください。

    volumeMode

    ボリュームのモード。 有効値:

    • Filesystem: ファイルシステムモード。 これはデフォルト値です。

    • Block: ブロックデバイスモード。

    storage

    ポッドに割り当てるストレージ容量。 これはディスクの容量でもあります。

    説明

    さまざまなディスクカテゴリでサポートされている容量範囲の詳細については、「ブロックストレージのパフォーマンス」をご参照ください。

    storageClassName

    関連付ける StorageClass の名前。

  2. PVC を作成します。

    kubectl create -f disk-pvc.yaml
  3. PVC を表示します。

    kubectl get pvc

    出力は、PVC が Pending 状態であることを示しています。 この場合、StorageClass は PVC-PV バインディングの遅延を使用するため、PV は作成されません。

    NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS                            VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc   Pending                                      alicloud-disk-wait-for-first-consumer   <unset>                 14s

ステップ 3:アプリケーションを作成し、ディスクをアプリケーションにマウントする

  1. disk-test.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    次のコードブロックは、1 つのポッドをプロビジョニングする StatefulSet の構成を指定します。 ポッドは、disk-pvc PVC を使用してストレージリソースをリクエストします。これは、ポッドの /data パスにマウントされます。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: disk-test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            - name: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc
  2. StatefulSet を作成し、ディスクを StatefulSet にマウントします。

    kubectl create -f disk-test.yaml
  3. StatefulSet によってプロビジョニングされたポッドがデプロイされているかどうかを確認します。

    kubectl get pod -l app=nginx

    次の出力は、StatefulSet に 1 つのポッドがデプロイされていることを示しています。

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          14s
  4. マウントパス内のファイルを表示して、ディスクがマウントされているかどうかを確認します。

    kubectl exec disk-test-0 -- df -h /data

    予期される出力:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb         20G   24K   20G   1% /data

ACK コンソールで動的にプロビジョニングされたディスクボリュームをマウントする

ステップ 1:StorageClass を作成する

デフォルトの StorageClasses がビジネス要件を満たしていない場合は、カスタム StorageClass を作成できます。既存の StorageClass のプロパティを変更することはできません。 StorageClass のプロパティを更新する場合は、使用するプロパティを使用して新しい StorageClass を作成する必要があります。

重要

クラウドディスクとは異なるゾーンにあるノードにクラウドディスクをマウントすることはできません。 また、クラウドディスクをマウントできる ECS インスタンスタイプは、ディスクのカテゴリによって異なります。 動的にプロビジョニングされたディスクボリュームをポッドにマウントする場合は、ディスクとポッドをホストするノードが同じゾーンにあることを確認してください。 また、ノードの ECS インスタンスタイプがディスクのカテゴリでサポートされている必要があります。 ディスクカテゴリと ECS インスタンスタイプの間の一致ルールの詳細については、「インスタンスファミリの概要」をご参照ください。

  1. ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。 左側のウィンドウで、[ボリューム] > [StorageClasses] を選択します。

  3. [StorageClasses] ページで、[作成] をクリックします。

  4. [作成] ダイアログボックスで、パラメータを構成し、[作成] をクリックします。

    パラメータ

    説明

    [名前]

    StorageClass のカスタム名を入力します。 名前は、ACK コンソールに表示される形式の要件に従う必要があります。

    alicloud-disk-wait-for-first-consumer

    [PV タイプ]

    [クラウドディスク] を選択します。

    クラウドディスク

    [パラメータ]

    デフォルトでは、type パラメータが追加されます。 このパラメータは、ディスクカテゴリを指定します。 有効値:

    • cloud_auto: ESSD AutoPL ディスク。

    • cloud_essd: ESSD。 これはデフォルト値です。

    • cloud_essd_entry: ESSD Entry ディスク。

    • cloud_ssd: 標準 SSD。

    • cloud_efficiency: Ultra ディスク。

    • elastic_ephemeral_disk_standard: 標準エラスティック一時ディスク。

    • elastic_ephemeral_disk_premium: プレミアムエラスティック一時ディスク。

    • cloud_regional_disk_auto: リージョン ESSD。

    このパラメータは、前述の値の任意の組み合わせに設定できます。 たとえば、このパラメータを type: cloud_ssd,cloud_essd,cloud_auto に設定できます。 この場合、システムはカテゴリの指定された順序でディスクの作成を試みます。 ディスクが作成されると、システムは試行を停止します。

    重要

    クラスタ内のノードのゾーンとインスタンスタイプ、およびディスクの課金とパフォーマンスの要件に基づいて、ディスクカテゴリを指定できます。 詳細については、以下のトピックをご参照ください。

    次のオプションパラメータを追加して、ディスク構成をカスタマイズできます。

    • resourceGroupId: ディスクが属するリソースグループ。 デフォルト値: ""

    • regionId: ディスクが作成されるリージョンの ID。 値は、クラスタのリージョン ID に設定する必要があります。

    • zoneId: ディスクが作成されるゾーンの ID。

      • クラスタが 1 つのゾーンにのみデプロイされている場合は、値をゾーンの ID に設定します。

      • クラスタが複数のゾーンにデプロイされている場合は、複数のゾーン ID を指定できます。 例: cn-beijing-a,cn-beijing-b

    • fstype: ディスクのファイルシステム。 有効値: ext4 および xfs。 デフォルト値: ext4

    • mkfsOptions: ディスクのフォーマットに指定されるパラメータ。 例: mkfsOptions: "-O project,quota"

    • diskTags: ディスクに追加するタグ。 例: diskTags: "a:b,b:c"。 インストールされている CSI バージョンが 1.30.3 以降の場合は、diskTags/a: b 形式で値を指定することもできます。

    • encrypted: ディスクを暗号化するかどうかを指定します。 デフォルト値: false。 デフォルト値は、ディスクが暗号化されていないことを示します。

    • performanceLevel: ESSD の PL。 有効値: PL0PL1PL2、および PL3。 デフォルト値: PL1。 詳細については、「容量と PL」をご参照ください。

      説明

      クラウドボックスの ESSD は PL0 である必要があります。 クラウドボックスを使用する場合は、ESSD の StorageClass を構成するときに、パラメータを PL0 に設定する必要があります。

    • volumeExpandAutoSnapshot。 このパラメータは、CSI 1.31.4 以降では非推奨です。

    • provisionedIops: ディスクのプロビジョニングされた読み取り/書き込み IOPS。 このパラメータは、ESSD AutoPL ディスク でのみサポートされています。 有効値: 0 ~ min{50000, 1000 x 容量 - ベースライン IOPS}。ここで、ベースライン IOPS = min{1800 + 50 x 容量, 50000} です。

    • burstingEnabled: ディスクのパフォーマンスバーストを有効にするかどうかを指定します。 このパラメータは、ESSD AutoPL ディスク でのみサポートされています。 デフォルト値: false。 デフォルト値は、パフォーマンスバーストを無効にします。

    • multiAttach: ディスクのマルチアタッチ機能を有効にするかどうかを指定します。 デフォルト値: false。 デフォルト値は、マルチアタッチ機能を無効にします。 詳細については、「クラウドディスクのマルチアタッチ」をご参照ください。

    type: cloud_auto,cloud_essd,cloud_ssd

    [再利用ポリシー]

    ディスクの再利用ポリシー。 デフォルト値: DeleteRetain に設定することもできます。

    • Delete: PVC が削除されると、PV とクラウドディスクも削除されます。

    • Retain: PVC が削除されると、PV とクラウドディスクは保持されます。 PV とクラウドディスクは手動で削除する必要があります。

    データセキュリティの要件が高い場合は、値を Retain に設定することをお勧めします。

    Retain

    [バインディングモード]

    ディスクのバインディングモード。 デフォルト値: ImmediateWaitForFirstConsumer に設定することもできます。

    • Immediate: StorageClass を使用する PVC が作成されるときにディスクを作成します。 これにより、ディスクを使用するポッドを作成する前に、ディスクが作成およびプロビジョニングされます。

    • WaitForFirstConsumer: PVC を使用するポッドが作成されるまで、PV のバインディングとプロビジョニングを遅らせます。 ポッドがノードにスケジュールされると、ノードがデプロイされているゾーンにディスクが作成され、PV としてプロビジョニングされます。

    システムは、ボリュームバインディングモードに基づいてディスクが作成されるゾーンを選択します。

    • WaitForFirstConsumer モードが使用されている場合、システムは PVC を使用する最初のポッドがデプロイされているゾーンにディスクを作成します。

    • Immediate モードが使用されている場合、システムは zoneId パラメータの値に基づいてディスクが作成されるゾーンを選択します。 zoneId パラメータに 1 つのゾーン ID のみが指定されている場合、システムは指定されたゾーンにディスクを作成します。 zoneId パラメータに複数のゾーン ID が指定されている場合、システムは指定されたゾーンからラウンドロビン方式でゾーンを選択します。

    重要
    • クラスタが複数のゾーンにデプロイされている場合は、クラウドディスクと ECS ノード間のゾーンの不整合によるマウントの失敗を防ぐために、WaitForFirstConsumer モード を使用する StorageClass を作成することをお勧めします。

    • 次のスケジュール方法またはアノテーションを使用して、クラウドディスクをマウントするポッドを仮想ノードにスケジュールする場合、WaitForFirstConsumer モード を使用する StorageClasses はサポートされません。

      • alibabacloud.com/eci: "true" ラベルを Elastic Container Instance ベースのポッドまたはポッドの名前空間に追加します。

      • alibabacloud.com/acs: "true" ラベルを ACS ポッドに追加します。

      • ポッド構成で nodeName パラメータを指定して、ポッドを仮想ノードにスケジュールします。 仮想ノードには、virtual-kubelet というプレフィックスが付いています。

      • k8s.aliyun.com/eci-vswitch アノテーションを追加して、Elastic Container Instance ベースのポッドの vSwitch を指定します。

      • k8s.aliyun.com/eci-fail-strategy: "fail-fast" アノテーションを追加して、Elastic Container Instance ベースのポッドのエラー処理ポリシーを fail-fast に設定します。

    WaitForFirstConsumer

    StorageClass を作成した後、[StorageClass] ページで StorageClass を表示できます。

ステップ 2:PVC を作成する

  1. ACK コンソールのクラスタ詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。

  2. [永続ボリューム要求] ページの右上隅にある [作成] をクリックします。

  3. [作成] ダイアログボックスで、パラメータを構成し、[作成] をクリックします。

    パラメータ

    説明

    [PVC タイプ]

    [クラウドディスク] を選択します。

    クラウドディスク

    [名前]

    PVC のカスタム名を入力します。 名前は、ACK コンソールに表示される形式の要件に従う必要があります。

    diks-pvc

    [割り当てモード]

    この例では、[StorageClass を使用する] が選択されています。

    StorageClass を使用する

    [既存のストレージクラス]

    PVC に関連付ける StorageClass を選択します。

    alicloud-disk-topology-alltype

    [容量]

    ポッドに割り当てるストレージ容量を指定します。 これはディスクの容量でもあります。

    説明

    さまざまなディスクカテゴリでサポートされている容量範囲の詳細については、「ブロックストレージのパフォーマンス」をご参照ください。

    20Gi

    [アクセスモード]

    [ReadWriteOnce] を選択する必要があります。これは、ボリュームが読み取り/書き込みモードで 1 つのポッドにのみマウントされることを示します。

    ReadWriteOnce

    PVC を作成した後、[永続ボリューム要求] ページで PVC を表示できます。

ステップ 3:アプリケーションを作成し、ディスクをアプリケーションにマウントする

  1. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [StatefulSet] を選択します。

  2. [StatefulSet] ページの右上隅にある [イメージから作成] をクリックします。

  3. StatefulSet のパラメータを構成し、[作成] をクリックします。

    次の表に、いくつかのパラメータを示します。 ビジネス要件に基づいて他のパラメータを構成します。 詳細については、「StatefulSet を使用してステートフルアプリケーションを作成する」をご参照ください。

    ウィザードページ

    パラメータ

    説明

    [基本情報]

    [名前]

    StatefulSet のカスタム名を入力します。 名前は、UI に表示される形式の要件に従う必要があります。

    disk-test

    [レプリカ]

    StatefulSet によってプロビジョニングされるポッドレプリカの数。

    1

    [コンテナ]

    [イメージ名]

    アプリケーションのデプロイに使用されるイメージのアドレス。

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    [必要なリソース]

    アプリケーションに必要な vCore の数、メモリ量、および一時ストレージ量を指定します。

    • CPU: 0.25 vCore

    • メモリ: 512 MiB

    • 一時ストレージ: スキップ

    [ボリューム]

    [PVC を追加] をクリックして、パラメータを構成します。

    • [マウントソース]: ステップ 2 で作成した PVC を選択します。

    • [コンテナパス]: ディスクをマウントするコンテナパスを指定します。

    • マウントソース: disk-pvc。

    • コンテナパス: /data

  4. アプリケーションがデプロイされているかどうかを確認します。

    1. [StatefulSet] ページで、作成したアプリケーションの名前をクリックします。

    2. [ポッド] タブで、ポッドが Running 状態かどうかを確認します。

kubectl を使用して、ディスクに基づいてデータの永続性が有効になっているかどうかを確認する

前の例で作成した StatefulSet は 1 つのポッドをプロビジョニングし、ディスクがポッドにマウントされます。 ポッドを削除すると、システムは自動的にポッドを再作成します。 元のディスクは新しいポッドにマウントされ、データはディスクに保持されます。 データがディスクに永続化されているかどうかをテストするには、次の手順を実行します。

  1. マウントパス内のファイルを表示して、ディスク上のファイルを表示できるかどうかを確認します。

    kubectl exec disk-test-0 -- ls /data

    予期される出力:

    lost+found
  2. ディスクにファイルを作成します。

    kubectl exec disk-test-0 -- touch /data/test
  3. ポッドを削除します。

    kubectl delete pod disk-test-0
    説明

    ポッドを削除すると、システムは自動的にポッドを再作成します。

  4. 新しいポッドを確認します。

    kubectl get pod -l app=nginx

    次の出力は、新しいポッドの名前が削除したポッドと同じであることを示しています。

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          27s
  5. 元のディスクがポッドにマウントされていて、ファイルがディスクに保持されているかどうかを確認します。

    kubectl exec disk-test-0 -- ls /data

    次の出力は、test ファイルがディスクに保持されていることを示しています。

    lost+found  
    test

参考資料