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

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

最終更新日:Nov 09, 2025

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

シナリオ

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

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

  • 高速でログを書き込みたい場合。

  • Pod のライフサイクルとは独立した方法でデータを永続化したい場合。

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

前提条件

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

    説明
    • クラスター管理ページの左側のナビゲーションウィンドウで、[運用管理] > > [コンポーネント管理] を選択します。[ストレージ] タブで、csi-plugin および csi-provisioner コンポーネントのインストールステータスを確認します。特定の機能を使用するために CSI プラグインをアップグレードするには、「CSI プラグインをアップグレードする」をご参照ください。

    • クラスターが FlexVolume コンポーネントを使用している場合、FlexVolume は非推奨であるため、CSI プラグインに移行する必要があります。詳細については、「FlexVolume から CSI への移行」をご参照ください。

  • 仮想ノードにスケジュールする必要がある Pod にディスクボリュームをマウントする場合は、まず、次の表のバージョンマッピングに基づいて 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 つの Pod にしかマウントできません。マルチアタッチの詳細については、「NVMe ディスクのマルチアタッチ機能と予約機能を使用する」をご参照ください。

  • ディスクは、ディスクと同じゾーンにある Pod にのみマウントできます。ゾーンをまたいだマウントはサポートされていません。

  • Pod が再構築されると、元のディスクが再マウントされます。他の制約のために Pod を元のゾーンにスケジュールできない場合、ディスクをマウントできないため、Pod は Pending 状態のままになります。

  • ディスクは、デプロイメントではなく、StatefulSet または個々の Pod にマウントすることをお勧めします。

    説明

    マルチアタッチが無効になっている場合、ディスクは 1 つの Pod にしかマウントできません。ディスクをデプロイメントにマウントする場合は、レプリカ数を 1 に設定する必要があります。Pod ごとに個別のボリュームを構成したり、マウントとアンマウントの優先順位を保証したりすることはできません。さらに、デプロイメントのアップグレードポリシーにより、再起動時に新しい Pod がディスクのマウントに失敗する可能性があります。したがって、ディスクをデプロイメントにマウントすることはお勧めしません。

  • ディスクボリュームを使用する場合、アプリケーションの YAML ファイルで securityContext.fsgroup を構成すると、kubelet はマウント完了後に chmod および chown コマンドを実行します。これにより、マウント時間が増加します。

    説明

    securityContext.fsgroup を構成すると、ディスクのマウント時にボリューム内のファイルの所有者が自動的に変更されます。これにより、ファイルの数によっては準備時間が増加する可能性があります。Kubernetes バージョン 1.20 以降のクラスターでは、fsGroupChangePolicyOnRootMismatch に設定できます。これにより、コンテナーが初めて起動するときにのみファイル所有者が変更されるようになります。その後の Pod のアップグレードや再構築では、マウント時間は影響を受けません。これがニーズに合わない場合は、initContainer を使用して権限を調整することをお勧めします。

StorageClass

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

CSI プラグインをインストールすると、ACK はクラウドディスク用のデフォルトの StorageClass を提供します。デフォルトの StorageClass がビジネス要件を満たさない場合は、カスタム 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 を使用してディスクを Pod にマウントすると、システムは Pod をホストする Elastic Compute Service (ECS) が存在するゾーンにディスクを作成します。ゾーン内のディスクカテゴリの在庫が十分であり、ディスクカテゴリが Pod をホストする ECS インスタンスのインスタンスタイプでサポートされている必要があります。システムはまず ESSD の作成を試みます。ESSD の作成に失敗した場合、標準 SSD の作成を試みます。標準 SSD の作成に失敗した場合、Ultra ディスクの作成を試みます。

重要

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

alicloud-disk-essd

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

alicloud-disk-ssd

標準 SSD を作成します。

alicloud-disk-efficiency

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

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

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

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

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

重要

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

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

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

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

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

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

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

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

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

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

    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

    Immediate モード (Pod を作成する前にディスクを作成する)

    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
      encrypted: "false"
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    volumeBindingMode: Immediate
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.diskplugin.csi.alibabacloud.com/zone
        values:
        - cn-beijing-a
        - cn-beijing-b
    

    次の表に、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。(このパラメーターは非推奨です。allowedTopologies を代わりに使用してください。)

      • クラスターが 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 × 容量 - ベースライン IOPS}、ここでベースライン IOPS = min{1800 + 50 × 容量, 50000}

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

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

    volumeBindingMode

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

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

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

    reclaimPolicy

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

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

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

    データセキュリティに対する要件が高い場合は、誤った削除を防ぐために値を Retain に設定することをお勧めします。

    allowVolumeExpansion

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

    allowedTopologies

    ブロックストレージをマウントできるトポロジーを制限します

    • 次のキーを使用して、ブロックストレージのゾーンを制限できます。

      • topology.diskplugin.csi.alibabacloud.com/zone

      • topology.kubernetes.io/zone (csi-provisioner コンポーネント v1.33.2 以降に適用可能)

    • 弾性エフェメラルディスクについては、alibabacloud.com/ecs-instance-id キーを使用してノードを指定できます。

  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

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

    説明

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

    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 という名前のファイルを作成します。

    次の YAML の例では、1 つの Pod を持つ StatefulSet を作成します。Pod は 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 を作成し、ディスクをマウントします。

    kubectl create -f disk-test.yaml
  3. StatefulSet 内の Pod のステータスを確認します。

    kubectl get pod -l app=nginx

    期待される出力は、StatefulSet のレプリカ数が 1 であるため、1 つの Pod が作成されたことを示しています。

    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 を作成する

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

重要

クラウドディスクを、ディスクとは異なるゾーンにあるノードにマウントすることはできません。さらに、クラウドディスクをマウントできる ECS インスタンスタイプは、ディスクのカテゴリによって異なります。動的にプロビジョニングされたディスクボリュームを Pod にマウントする場合は、ディスクと Pod をホストするノードが同じゾーンにあることを確認してください。さらに、ノードの 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。(このパラメーターは非推奨です。allowedTopologies を代わりに使用してください。)

      • クラスターが 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 × 容量 - ベースライン IOPS}、ここでベースライン IOPS = min{1800 + 50 × 容量, 50000}

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

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

    type: cloud_auto,cloud_essd,cloud_ssd

    再利用ポリシー

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

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

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

    データセキュリティに対する要件が高い場合は、誤った削除を防ぐために値を Retain に設定することをお勧めします。

    Retain

    バインドモード

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

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

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

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

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

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

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

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

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

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

    WaitForFirstConsumer

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

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

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

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

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

    パラメーター

    説明

    ストレージ要求タイプ

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

    クラウドディスク

    名前

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

    diks-pvc

    割り当てモード

    [StorageClass を使用] を選択します。

    StorageClass を使用

    既存のストレージクラス

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

    alicloud-disk-topology-alltype

    容量

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

    説明

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

    20Gi

    アクセスモード

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

    ReadWriteOnce

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

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

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

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

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

    次の表に主要なパラメーターを示します。必要に応じて他のパラメーターを設定します。詳細については、「StatefulSet を作成する」をご参照ください。

    設定ページ

    パラメーター

    説明

    基本情報

    アプリケーション名

    StatefulSet のカスタム名を入力します。フォーマット要件については、インターフェイスのプロンプトを参照してください。

    disk-test

    レプリカ数

    StatefulSet のレプリカ数を設定します。

    1

    コンテナー設定

    イメージ名

    アプリケーションのデプロイに使用するイメージのアドレスを入力します。

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

    必須リソース

    必要な vCPU、メモリ、およびエフェメラルストレージリソースを設定します。

    • CPU: 0.25 コア

    • メモリ: 512 MiB

    • エフェメラルストレージ: 設定しない

    ボリューム

    [既存の要求を追加] をクリックします。次に、パラメーターを設定します。

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

    • コンテナーパス: ディスクをマウントするコンテナーパスを入力します。

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

    • コンテナーパス: /data

  4. アプリケーションのステータスを確認します。

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

    2. [Pod] タブで、Pod が Running 状態であることを確認します。

kubectl を使用してディスク上のデータの永続性を確認する

前の例で作成した StatefulSet には、マウントされたディスクを持つ 1 つの Pod が含まれています。この Pod が削除されると、新しい Pod が自動的に作成され、元のディスクが新しい Pod に再マウントされます。ディスク上のデータは保持されます。次のようにして、ディスクのデータの永続性を確認できます。

  1. ディスクのマウントパス内のデータを確認します。

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

    期待される出力:

    lost+found
  2. ディスクにファイルを書き込みます。

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

    kubectl delete pod disk-test-0
    説明

    StatefulSet 内の Pod を削除すると、システムは自動的に新しい Pod を作成します。

  4. 新しい Pod のステータスを確認します。

    kubectl get pod -l app=nginx

    期待される出力は、新しい Pod が削除された Pod と同じ名前を持つことを示しています。これは StatefulSet の特徴です。

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          27s
  5. 新しい Pod がディスクを再マウントしたこと、およびデータが完全であることを確認します。

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

    期待される出力は、test ファイルがディスクに残っていることを示しています。

    lost+found  
    test

リファレンス