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

Container Compute Service:Mount a dynamically provisioned disk volume

最終更新日:May 28, 2025

アプリケーションに高い IOPS と低いレイテンシが必要で、データ共有が不要な場合は、ディスクを永続ボリューム (PV) としてアプリケーションにマウントできます。このトピックでは、動的にプロビジョニングされたディスクボリュームをアプリケーションにマウントし、ディスクボリュームを使用してデータを永続化できるかどうかを確認する方法について説明します。

背景情報

ディスクは、分散マルチレプリカメカニズムを使用して低レイテンシ、高パフォーマンス、高耐久性、高信頼性を確保するブロックレベルのストレージデバイスです。ディスクは、高い IOPS と低いレイテンシが必要で、データ共有が不要なアプリケーションに適しています。詳細については、「ストレージの概要」をご参照ください。

説明

Alibaba Cloud Container Compute Service (ACS) は、動的にプロビジョニングされたディスクボリュームのみをサポートしています。ACS は、静的にプロビジョニングされたディスクボリュームをサポートしていません。

前提条件

managed-csiprovisioner コンポーネントが ACS クラスタにインストールされています。

説明

ACS コンソールの ACS クラスタ管理ページに移動します。クラスタ管理ページの左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。[ストレージ] タブで、managed-csiprovisioner がインストールされているかどうかを確認できます。

制限

  • ディスクは共有できません。ディスクは 1 つのポッドにのみマウントできます。

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

制限事項

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

    説明

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

  • 動的にプロビジョニングされたディスクボリュームをマウントすると、自動的に作成されるディスクは従量課金方式を使用します。

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

    説明

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

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

kubectl

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

ACS は、alicloud-disk-topology-alltype という名前のデフォルト StorageClass を提供します。この StorageClass は、優先順位の高い順に、cloud_essd(ESSD)、cloud_ssd(標準 SSD)、cloud_efficiency(Ultra ディスク)のタイプの PV をプロビジョニングするために使用できます。デフォルトの StorageClass がビジネス要件を満たしていない場合は、次の手順を実行してカスタム StorageClass を作成します。

  1. ACS クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」および「Cloud Shell で kubectl を使用して ACS クラスタを管理する」をご参照ください。

  2. disk-sc.yaml という名前のファイルを作成し、次のテンプレートコンテンツをファイルにコピーします。ビジネス要件に基づいてテンプレートのパラメータを変更します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-essd
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_essd
      fstype: ext4
      performanceLevel: PL1
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true

    次の表は、パラメータについて説明しています。

    パラメータ

    説明

    parameters.type

    ディスクのカテゴリ。有効な値:

    • cloud_essd_entry: ESSD Entry ディスク。

    • cloud_auto: ESSD AutoPL ディスク。

    • cloud_essd: 企業向け SSD(ESSD)。これがデフォルト値です。

    • cloud_ssd: 標準 SSD。

    • cloud_efficiency: Ultra ディスク。

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

    説明

    課金とパフォーマンスの要件に基づいてディスクカテゴリを選択できます。詳細については、「ブロックストレージデバイスの価格」および「ブロックストレージのパフォーマンス」をご参照ください。

    parameters.fstype

    ディスクのファイルシステムタイプ。デフォルト値:ext4。有効な値:ext3ext4xfs

    parameters.performanceLevel

    ESSD のパフォーマンスレベル(PL)。デフォルト値:PL1。有効な値:PL0PL1PL2PL3。詳細については、「ESSD」をご参照ください。

    provisioner

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

    reclaimPolicy

    ディスクの再利用ポリシー。値を Delete に設定する必要があります。これは、永続ボリューム要求(PVC)が削除されると、PV とディスクが自動的に削除されることを示します。

    volumeBindingMode

    ボリュームバインディングモード。クラスタが複数ゾーンにデプロイされている場合は、WaitForFirstConsumer を使用することをお勧めします。

    • WaitForFirstConsumer: ボリュームがバインドされるまで待機する時間。システムはポッドをスケジュールし、ポッドのゾーン情報に基づいてボリュームを作成します。

    • Immediate: システムはポッドを作成する前にボリュームを作成します。

    重要

    ACK クラスタでディスクボリュームがマウントされた ACS ポッドを使用する場合は、nodeSelector を使用するか、ResourcePolicy を作成してポッドを仮想ノードにスケジュールします。alibabacloud.com/acs: "true" ポッドラベルを使用してポッドを仮想ノードにスケジュールする場合、WaitForFirstConsumer StorageClass はサポートされていません。

    allowVolumeExpansion

    ディスクのサイズを自動的に変更するかどうかを指定します。

  3. StorageClass を作成します。

    kubectl create -f disk-sc.yaml
  4. StorageClass を確認します。

    kubectl get sc

    予期される出力:

    NAME                             PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-disk-essd               diskplugin.csi.alibabacloud.com   Delete          WaitForFirstConsumer   true                   78s
    alicloud-disk-topology-alltype   diskplugin.csi.alibabacloud.com   Delete          WaitForFirstConsumer   true                   23d
    ......

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

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOncePod
      volumeMode: Filesystem
      resources:
        requests:
          storage: 20Gi
      storageClassName: alicloud-disk-essd

    次の表は、パラメータについて説明しています。

    パラメータ

    説明

    accessModes

    アクセスモード。値を ReadWriteOncePod に設定する必要があります。

    volumeMode

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

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

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

    storage

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

    storageClassName

    PVC に関連付ける StorageClass の名前。

  2. PVC を作成します。

    kubectl create -f disk-pvc.yaml
  3. PVC を確認します。

    kubectl get pvc

    volumeBindingMode パラメータが WaitForFirstConsumer に設定されているため、次の出力は PVC に PV がバインドされていないことを示しています。

    NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS         VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc   Pending                                      alicloud-disk-essd   <unset>                 7s

ステップ 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: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            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
    重要

    StatefulSet のデプロイプロセス中に、システムは StatefulSet 構成で指定された PVC と StorageClass に基づいて、従量課金ディスクと PV を自動的に作成します。

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

    kubectl get pod | grep disk-test

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

    disk-test-0   1/1     Running   0          52s
  4. PVC を確認します。

    kubectl get pvc

    次の出力は、ディスクタイプの PV が自動的に作成され、PVC にバインドされていることを示しています。

    NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS         VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc   Bound    d-uf698s3h14isyj6b****   20Gi       RWOP           alicloud-disk-essd   <unset>                 111s
  5. マウントパス内のファイルを表示して、ディスクがマウントされているかどうかを確認します。

    kubectl exec disk-test-0 -- df | grep data

    予期される出力:

    /dev/vdb        20466256      24  20449848   1% /data

コンソール

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

ACS は、alicloud-disk-topology-alltype という名前のデフォルト StorageClass を提供します。この StorageClass を使用すると、cloud_essd (ESSD)、cloud_ssd (標準 SSD)、cloud_efficiency (Ultra ディスク) のタイプの PV を優先順位の高い順にプロビジョニングできます。デフォルトの StorageClass がビジネス要件を満たしていない場合は、次の手順を実行してカスタム StorageClass を作成します。

  1. ACS コンソール にログオンします。

  2. [クラスタ] ページで、クラスタの名前をクリックして、クラスタ管理ページに移動します。

  3. クラスタ管理ページの左側のナビゲーションウィンドウで、[ボリューム] > [StorageClass] を選択します。

  4. StorageClass を作成します。

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

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

      パラメータ

      説明

      [名前]

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

      alicloud-disk-essd

      [PV タイプ]

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

      クラウドディスク

      [パラメータ]

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

      • cloud_essd_entry: ESSD Entry ディスク。

      • cloud_auto: ESSD AutoPL ディスク。

      • cloud_essd: 企業向け SSD (ESSD)。これがデフォルト値です。

      • cloud_ssd: 標準 SSD。

      • cloud_efficiency: Ultra ディスク。

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

      説明

      課金とパフォーマンスの要件に基づいてディスクカテゴリを選択できます。詳細については、「ブロックストレージデバイスの価格」および「ブロックストレージのパフォーマンス」をご参照ください。

      次のパラメータを追加できます。

      • fstype

        ディスクのファイルシステムタイプ。デフォルト値:ext4。有効な値:ext3ext4xfs

      • performanceLevel

        ESSD のパフォーマンスレベル(PL)。デフォルト値:PL1。有効な値:PL0PL1PL2、および PL3。詳細については、「ESSD」をご参照ください。

      type:cloud_essd

      [再利用ポリシー]

      ディスクの再利用ポリシー。値は Delete に設定する必要があります。これは、永続ボリューム要求 (PVC) が削除されると、PV とディスクが自動的に削除されることを示します。

      Delete

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

      ボリュームのバインディングモード。クラスターが複数のゾーンにデプロイされている場合は、WaitForFirstConsumer を使用することをお勧めします。

      • WaitForFirstConsumer: ボリュームがバインドされるまで待機する時間。システムはポッドをスケジュールしてから、ポッドのゾーン情報に基づいてボリュームを作成します。

      • Immediate: システムはポッドを作成する前にボリュームを作成します。

      重要

      ACK クラスターのディスクボリュームがマウントされた ACS ポッドを使用する場合は、nodeSelector を使用するか、ResourcePolicy を作成して仮想ノードにポッドをスケジュールします。alibabacloud.com/acs: "true" ポッドラベルを使用して仮想ノードにポッドをスケジュールする場合、WaitForFirstConsumer ストレージクラスはサポートされていません。

      WaitForFirstConsumer

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

  1. クラスタ管理ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリュームクレーム] を選択します。

  2. [永続ボリュームクレーム] ページで、[作成] をクリックします。

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

    パラメータ

    説明

    [PVC タイプ]

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

    クラウドディスク

    [名前]

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

    disk-pvc

    [割り当てモード]

    デフォルトでは、[StorageClass を使用する] が選択されています。

    StorageClass を使用する

    [既存の StorageClass]

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

    alicloud-disk-essd

    [容量]

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

    20Gi

    アクセスモード

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

    ReadWriteOnce

    PVC を作成した後、[永続ボリューム要求] ページで PVC を表示できます。PVC に関連付けられた StorageClass で WaitForFirstConsumer バインディングモードが指定されているため、PVC は Pending 状態になり、PV は PVC にマウントされません。

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

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

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

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

    次の表では、いくつかのパラメータについて説明します。その他のパラメータにはデフォルト値を使用します。詳細については、「StatefulSet を使用してステートフル アプリケーションを作成する」をご参照ください。

    ウィザードページ

    パラメータ

    説明

    [基本情報]

    [名前]

    StatefulSet のカスタム名を入力します。名前は、コンソールに表示される形式要件を満たしている必要があります。

    disk-test

    [レプリカ]

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

    1

    [コンテナ]

    [イメージ名]

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

    registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest

    [必要なリソース]

    アプリケーションに必要な vCore の数とメモリ量を指定します。

    0.25 vCore と 0.5 GiB のメモリ

    [ボリューム]

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

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

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

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

    • コンテナパス: /data

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

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

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

  5. PV と PVC を確認します。

    • [永続ボリューム] ページで、システムによって作成された PV を表示できます。PV には、マウントされたディスクの ID にちなんだ名前が付けられます。

    • [永続ボリューム要求] ページで、PVC が Bound 状態であり、上記の PV が PVC にバインドされていることを確認できます。

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

前の例で作成した 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

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

    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