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

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

最終更新日:Dec 14, 2024

Alibaba Cloudディスクは、Elastic Compute Service (ECS) のブロックレベルのデータストレージリソースです。 Alibaba Cloudディスクは、低レイテンシ、高性能、高耐久性、高信頼性を提供します。 ACK Serverlessを使用すると、Container Storage Interface (CSI) プラグインを使用して、動的にプロビジョニングされたディスクボリュームを作成できます。 このトピックでは、動的にプロビジョニングされたディスクボリュームを使用する方法と、動的にプロビジョニングされたディスクボリュームが永続ストレージに使用できることを確認する方法について説明します。

前提条件

背景情報

StorageClassesの詳細については、「StorageClasses」をご参照ください。

手順

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

ステップ1: StorageClassの作成

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

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

  3. の右上隅にStorageClassesページをクリックします。作成.

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

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    名前

    StorageClassの名前。

    名前は小文字で始まる必要があり、小文字、数字、ピリオド (.) 、およびハイフン (-) のみを使用できます。

    PVタイプ

    永続ボリューム (PV) のタイプ。 [クラウドディスク] を選択します。

    パラメーター

    デフォルトでは、typeパラメーターが追加され、cloud_essdに設定されます。 typeパラメーターは、ディスクタイプを指定します。 有効な値は、cloud_efficiencycloud_ssdcloud_essdavailableです。 1つ以上の値を指定できます。 ただし、availableを指定した場合、他の値は指定できません。 たとえば、type: cloud_efficiency, cloud_ssd, cloud_essdを指定すると、システムは指定されたタイプのディスクを順番に作成しようとします。 ディスクが作成されると、システムは試行を停止します。 パラメーターを使用可能に設定すると、システムは最初に標準SSDの作成を試みます。 試行が失敗した場合、システムはウルトラディスクの作成を試みます。 ディスクが作成されると、システムは試行を停止します。

    説明

    一部のECSインスタンスタイプは、エンタープライズSSD (ESSD) をサポートしていません。 詳細は、「よくある質問」をご参照ください。

    カスタムパラメーターを追加できます。 たとえば、zoneIdパラメーターを追加して、ディスクを作成するゾーンのIDを指定できます。 クラスターが単一のゾーンにデプロイされている場合は、値をゾーンのIDに設定します。 例: cn-beijing-a クラスターがゾーンにまたがってデプロイされている場合、ビジネス要件に基づいてzoneIdパラメーターを複数のゾーンIDに設定できます。 例: cn-beijing-a, cn-beijing-b

    再利用ポリシー

    ディスクの再利用ポリシー。 デフォルトでは、このパラメーターはDeleteに設定されています。 このパラメーターをRetainに設定することもできます。

    • 削除モード: 永続ボリュームクレーム (PVC) が削除されると、関連するPVとディスクも削除されます。

    • 保持モード: PVCが削除されると、関連するPVとディスクは保持されます。 PVとディスクデータは手動でのみ削除できます。

    より高度なデータセキュリティが必要な場合は、データが誤って削除されないように、保持モードを使用することをお勧めします。

    バインディングモード

    ディスクのマウントモード。 デフォルト値: Immediate。ポッドを作成する前にシステムがディスクを作成することを指定します。

  5. パラメーターの設定後、作成.

    作成したStorageClassは、StorageClassesリストで確認できます。

ステップ2: PVCの作成

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

  2. の右上隅に永続的なボリュームクレームページをクリックします。作成.

  3. では、PVCの作成ダイアログボックスで、次の表で説明するパラメーターを設定します。

    パラメーター

    説明

    PVCタイプ

    PVCのタイプ。 このパラメーターは、Cloud DiskまたはNASに設定できます。 この例では、このパラメーターはクラウドディスクに設定されています。

    名前

    PVCの名前。 名前は名前空間内で一意である必要があります。

    割り当てモード

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

    既存のストレージクラス

    [選択] をクリックします。 [ストレージクラスの選択] ダイアログボックスで、使用するStorageClassを見つけ、[操作] 列の [選択] をクリックします。

    容量

    PVCが主張する容量。

    アクセスモード

    PVのアクセスモード。 デフォルトでは、このパラメーターはReadWriteOnceに設定されています。

  4. クリック作成.

    PVCの作成後、PVCリストでPVCを表示できます。 PVCはPVに結合される。

ステップ3: アプリケーションの作成

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

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

  3. アプリケーションパラメーターを設定します。

    この例では、ボリュームパラメータを設定する方法を示します。 その他のパラメーターの詳細については、「StatefulSetを使用してステートフルアプリケーションを作成する」をご参照ください。

    ACKクラスター用にローカルストレージボリュームとクラウドストレージボリュームを設定できます。 この例では、[クラウドストレージ] が選択されています。

    この例で作成したディスクボリュームをコンテナーの /tmpパスにマウントします。 ディスクボリュームがマウントされた後、/tmpパスに生成されたコンテナデータがディスクボリュームに格納されます。 volume

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

    アプリケーションの作成後、ボリュームを使用してアプリケーションデータを保存できます。

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

ステップ1: StorageClassの作成

マルチゾーンクラスターでは、まずクラウドディスクを作成してからポッドを作成することで、StorageClassを作成できます。

  1. 次のテンプレートを使用して、storage-class-csi.yamlという名前のファイルを作成します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    メタデータ:
      名前: alicloud-disk-ssd-b
    provisioner: diskplugin.csi.alibabacloud.com
    パラメータ:
      type: cloud_ssd
      encrypted: "false"
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    volumeBindingMode: 即時 

    パラメーター

    説明

    provisioner

    値をdiskplugin.csi.alibabacloud.comに設定します。 これは、Alibaba Cloudディスク用のプロビジョニングプラグインを使用してStorageClassを作成することを指定します。

    タイプ

    ディスクのタイプ。 有効な値は、cloud_efficiencycloud_ssdcloud_essdavailableです。 1つ以上の値を指定できます。 ただし、availableを指定した場合、他の値は指定できません。 たとえば、type: cloud_efficiency, cloud_ssd, cloud_essdを指定すると、システムは指定されたタイプのディスクを順番に作成しようとします。 ディスクが作成されるまで、システムはディスクの作成を停止します。 このパラメーターを使用可能に設定すると、システムは最初に標準SSDの作成を試みます。 試行が失敗した場合、システムはウルトラディスクの作成を試みます。 ディスクが作成されるまで、システムはディスクの作成を停止します。

    説明

    一部のECSインスタンスタイプはESSDをサポートしていません。 詳細は、「よくある質問」をご参照ください。

    暗号化

    オプションです。 ディスクを暗号化するかどうかを指定します。 デフォルト値はfalseです。これは、ディスクが暗号化されていないことを示します。

    reclaimPolicy

    ディスクの再利用ポリシー。 デフォルトでは、このパラメーターはDeleteに設定されています。 このパラメーターをRetainに設定することもできます。

    • 削除モード: PVCが削除されると、関連するPVとディスクも削除されます。

    • 保持モード: PVCが削除されると、関連するPVとディスクは保持されます。 PVとディスクデータは手動でのみ削除できます。

    高度なデータセキュリティが必要な場合は、データが誤って削除されないように、[保持] モードを使用することを推奨します。

    allowVolumeExpansion

    このパラメーターをtrueに設定すると、ディスクを自動的に展開できます。

    volumeBindingMode

    ディスクのマウントモード。 デフォルト値: Immediate。ポッドを作成する前にシステムがディスクを作成することを指定します。

  2. 次のコマンドを実行してStorageClassを作成します。

    kubectl apply -f storage-class-csi.yaml
  3. 作成したStorageClassを表示します。

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

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

    3. 作成したStorageClassは、[StorageClasses] ページで表示できます。

ステップ2: PVCの作成

  1. 次のテンプレートを使用して、pvc-ssd.yamlという名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    メタデータ:
      名前: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: ファイルシステム
      resources:
        requests:
          storage: 25 Gi
      storageClassName: alicloud-disk-ssd-b 

    パラメーター

    説明

    name

    PVCの名前。

    accessModes

    PVのアクセスモード。

    volumeMode

    オプションです。 ディスクがマウントされる形式。 ファイルシステムがサポートされています。

    storageClassName

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

    ストレージ

    PVCが主張するディスクサイズ。 最小容量は20 GiBです。

  2. 次のコマンドを実行してPVCを作成します。

    kubectl create -f pvc-ssd.yaml
  3. 作成したPVCを表示します。

    クラスターの詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [ボリュームクレームの永続化] を選択します。 作成したPVCは、[ボリュームクレームの永続化] ページで確認できます。

ステップ3: アプリケーションの作成

  1. という名前のファイルを作成します。pvc-dynamic.yaml.

    次のテンプレートを使用して、nginx-dynamicという名前のアプリケーションを作成し、PVCをアプリケーションにマウントします。

    apiVersion: apps/v1
    kind: StatefulSet
    メタデータ:
      名前: nginx-dynamic
    spec:
      セレクタ:
        matchLabels:
          アプリ:nginx
      template:
        metadata:
          labels:
            アプリ:nginx
        仕様:
          containers:
          - name: nginx
            image: nginx
            ポート:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc 

    パラメーター

    説明

    mountPath

    ディスクがマウントされるパス。

    claimName

    アプリケーションにマウントされているPVCの名前。

  2. 次のコマンドを実行して、アプリケーションをデプロイし、PVCをアプリケーションにマウントします。

    kubectl create -f pvc-dynamic.yaml
  3. デプロイされたアプリケーションを表示します。

    詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [StatefulSets] を選択します。 作成したアプリケーションは、[StatefulSets] ページで確認できます。

動的にプロビジョニングされたディスクボリュームを使用してデータを永続化できるかどうかのテスト

ポッドが削除されて再作成された後も、ポッドは削除される前に書き込まれたデータを保存します。 次の手順を実行して、データがディスクに永続化されているかどうかをテストします。

  1. 次のコマンドを実行して、新しいディスクが /var/lib /MySQLパスにマウントされているかどうかを確認して、ディスクがmysqlアプリケーションにマウントされていることを確認します。

    kubectl exec mysql-0 -- df -h /var/lib/mysql

    期待される出力:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdd         25G  213M   25G   1% /var/lib/mysql
  2. ディスクにファイルを作成します。

    1. 次のコマンドを実行して、/var/lib/mysqlパスにtest-persistentという名前のファイルを作成します。

      kubectl exec mysql-0 -- touch /var/lib/mysql/test-persistent
    2. 次のコマンドを実行して、ファイルが作成されていることを確認します。

      kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent

      期待される出力:

      /var/lib/mysql/test-persistent
  3. 次のコマンドを実行して、mysql-0という名前のポッドを削除します。

    kubectl delete pod mysql-0

    期待される出力:

    pod "mysql-0" deleted
  4. ポッドの削除後もファイルがまだ存在するかどうかをテストします。

    1. 次のコマンドを実行して、ポッドが期待どおりに実行されるかどうかを確認します。

      kubectl get pod mysql-0

      期待される出力:

      NAME      READY   STATUS    RESTARTS   AGE
      mysql-0   1/1     Running   0          12s
    2. 次のコマンドを実行して、作成されたファイルを照会します。

      kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent

      期待される出力:

      /var/lib/mysql/test-persistent

      test-persistentファイルはまだ存在します。 これは、データが動的にプロビジョニングされたディスクに保持されることを示します。