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

Container Compute Service:動的にプロビジョニングされたディスクボリュームのマウント

最終更新日:Dec 27, 2024

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

背景情報

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

説明

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

前提条件

managed-csiprovisionerの最新バージョンがAlibaba Cloud Container Compute Service(ACS)クラスターにインストールされていること。

説明

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

制限

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

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

制限事項

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

    説明

    ディスクは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 (ウルトラディスク) のタイプの 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

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

    パラメータ

    説明

    type

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

    • cloud_essd_entry: ESSD エントリーディスク。

    • cloud_auto: ESSD AutoPL ディスク。

    • cloud_essd: エンタープライズ SSD (ESSD)。これがデフォルト値です。

    • cloud_ssd: 標準 SSD。

    • cloud_efficiency: ウルトラディスク。

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

    説明

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

    fstype

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

    performanceLevel

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

    provisioner

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

    reclaimPolicy

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

    volumeBindingMode

    ディスクのバインディングモード。値は WaitForFirstConsumer に設定する必要があります。これは、PVC を使用するポッドが作成されるまで、PV のバインディングとプロビジョニングが遅延されることを示します。ポッドがノードにスケジュールされると、ノードがデプロイされているゾーンにディスクが作成され、PV としてプロビジョニングされます。

    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 (ウルトラディスク) のタイプの PV を優先順位の高い順にプロビジョニングするために使用できます。デフォルトの StorageClass がビジネス要件を満たしていない場合は、次の手順を実行してカスタム StorageClass を作成します。

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

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

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

  4. StorageClass を作成します。

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

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

      パラメータ

      説明

      名前

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

      alicloud-disk-essd

      PV タイプ

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

      クラウドディスク

      パラメータ

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

      • cloud_essd_entry: ESSD エントリーディスク。

      • cloud_auto: ESSD AutoPL ディスク。

      • cloud_essd: エンタープライズ SSD (ESSD)。これがデフォルト値です。

      • cloud_ssd: 標準 SSD。

      • cloud_efficiency: ウルトラディスク。

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

      説明

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

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

      • fstype

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

      • performanceLevel

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

      type:cloud_essd

      再利用ポリシー

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

      削除

      バインディングモード

      ディスクのバインディングモード。値は WaitForFirstConsumer に設定する必要があります。これは、PVC を使用するポッドが作成されるまで、PV のバインディングとプロビジョニングが遅延されることを示します。ポッドがノードにスケジュールされると、ノードがデプロイされているゾーンにディスクが作成され、PV としてプロビジョニングされます。

      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 は保留中状態になり、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. ポッド タブで、ポッドが実行中状態かどうかを確認します。

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

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

    • 永続ボリュームクレーム ページで、PVC がバインド状態であり、上記の 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