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

Container Service for Kubernetes:ステートフルアプリケーションに動的にプロビジョニングされたディスクを使用する

最終更新日:Dec 10, 2024

このトピックでは、ステートフルアプリケーションで動的にプロビジョニングされたディスクを使用するタイミングと方法について説明します。

背景情報

動的にプロビジョニングされたディスクを使用する場合:

Container Service for Kubernetes (ACK) クラスターにアプリケーションをデプロイするときに使用可能なディスクがない場合、システムは自動的にディスクを作成し、動的ボリュームとして使用します。

動的にプロビジョニングされたディスクを使用する方法:
  1. 永続ボリュームクレーム (PVC) を手動で作成し、PVCでStorageClassを指定します。
  2. アプリケーションをデプロイすると、指定されたStorageClassの永続ボリューム (PV) が自動的に作成されます。

前提条件

  • ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
  • kubectlを介してクラスターに接続しています。 詳細については、「手順2: クラスター資格情報の種類の選択」をご参照ください。
  • クラスタ用のプロビジョニングがインストールされています。 プロビジョニングは、指定されたStorageClassのディスクを自動的に作成できます。

Provisioner

デフォルトでは、各ACKクラスターにプロビジョニングが自動的にインストールされます。

StorageClass の作成

デフォルトでは、システムの初期化時にACKは4つのStorageClassesを作成します。 すべてのStorageClassesはデフォルト設定を使用します。 シングルゾーンクラスターのみが、4つのStorageClassesを使用してディスクを動的にプロビジョニングできます。 クラスターが複数のゾーンにデプロイされている場合は、新しいStorageClassesを作成してディスクを動的ボリュームとしてマウントする必要があります。 次のリストでは、4つのStorageClassesについて説明します。
  • alicloud-disk-common: 基本ディスクを作成します。
  • alicloud-disk-efficiency: ウルトラディスクを作成します。
  • alicloud-disk-ssd: SSDを作成します。
  • alicloud-disk-available: 高可用性モード。 このモードでは、システムはSSDの作成を試みます。 SSDリソースが使い果たされた場合、システムはウルトラディスクの作成を試みます。
  1. を作成します。Create astorageclass.yamlファイルを作成します。
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: alicloud-disk-ssd-hangzhou-b
    provisioner: alicloud/disk
    reclaimPolicy: Retain
    parameters:
      type: cloud_ssd
      regionId: cn-hangzhou
      zoneId: cn-hangzhou-b
      fstype: "ext4"
      readonly: "false"
    パラメーター説明
    provisioner値はalicloud/diskに設定され、プロビジョニングを使用して自動的にディスクを作成します。
    reclaimPolicy対応するPVCを削除した後のディスクの処理方法を指定します。 有効な値: DeleteおよびRetain。 デフォルト値: Delete
    説明 値をDeleteに設定すると、PVCを削除するとディスクが自動的に削除されます。 ディスクデータを復元できません。
    タイプディスクのタイプ。 有効な値は、cloudcloud_efficiencycloud_ssdavailableです。
    regionIdディスクが属するリージョンの ID 。 値は、クラスターのリージョンIDに設定する必要があります。 このパラメーターはオプションです。
    zoneIdディスクが属するゾーンのID。 このパラメーターはオプションです。
    • クラスターが1つのゾーンにデプロイされている場合は、値をゾーンのIDに設定します。
    • クラスターが複数のゾーンにデプロイされている場合は、値をゾーンのIDに設定します。 例:
      zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
    fstypeディスクのファイルシステム。 このパラメーターはオプションです。 デフォルト値: ext4
    readonlyディスクが読み取り専用かどうかを指定します。 このパラメーターはオプションです。 有効な値は、true および false です。 true: ディスクは読み取り専用です。 false: ディスクに対して読み取りおよび書き込み操作を実行できます。 デフォルト値は false です。
    暗号化ディスクを暗号化するかどうかを指定します。 このパラメーターはオプションです。 有効な値は、true および false です。 true: ディスクを暗号化します。 false: ディスクを暗号化しません。 デフォルト値は false です。
  2. 次のコマンドを実行してStorageClassを作成します。
    kubectl create -f storageclass.yaml

PVC の作成

  1. を作成します。Create apvc-ssd.yamlファイルを作成します。
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: disk-ssd
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: alicloud-disk-ssd-hangzhou-b
      resources:
        requests:
          storage: 20Gi
  2. 次のコマンドを実行してPVCを作成します。
    kubectl create -f pvc-ssd.yaml

クラスターの詳細ページで、[ボリューム] をクリックし、左側のナビゲーションウィンドウで [ボリュームクレーム] を選択します。 [永続的なボリュームクレーム] ページでは、作成されたPVCとそのPVCにバインドされているPVを表示できます。 PVCのStorageClassalicloud-disk-ssd-hangzhou-bです。

デプロイの作成

  1. を作成します。Create apvc-dynamic.yamlファイルを作成します。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-dynamic
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
              - name: disk-pvc
                mountPath: "/data"
          volumes:
            - name: disk-pvc
              persistentVolumeClaim:
                claimName: disk-ssd
  2. 次のコマンドを実行して、展開を作成します。
    kubectl create -f nginx-dynamic.yaml

クラスターの詳細ページで、[ワークロード] をクリックし、左側のナビゲーションウィンドウで [デプロイ] を選択します。 [デプロイメント] ページで、作成したデプロイメントを表示できます。

永続ストレージにディスクを使用する

  1. 次のコマンドを実行して、デプロイをホストするポッドを照会します。
    kubectl get pod | grep dynamic

    次の出力が返されます。

    nginx-dynamic-5c74594ccb-zl9pf     2/2     Running     0          3m
  2. 次のコマンドを実行して、新しいディスクが /dataパスにマウントされているかどうかを確認します。
    kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- df | grep data

    次の出力が返されます。

    /dev/vdh        20511312    45080  20449848   1% /data
  3. 次のコマンドを実行して、/dataパスのファイルを照会します。
    kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data

    次の出力が返されます。

    lost+found
  4. 次のコマンドを実行して、dynamicファイルを /dataパスに作成します。
    kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamic
  5. 次のコマンドを実行して、/dataパスのファイルを照会します。
    kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data

    次の出力が返されます。

    dynamic
    lost+found
  6. 次のコマンドを実行して、ポッドnginx-dynamic-5c74594ccb-zl9pfを削除します。
    kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf

    次の出力が返されます。

    pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
  7. 別のkubectlコマンドラインインターフェイス (CLI) を開き、次のコマンドを実行して、ポッドの削除方法と再作成方法を照会します。
    kubectl get pod -w -l app=nginx
    次の出力が返されます。
    NAME                               READY   STATUS    RESTARTS   AGE
    nginx-dynamic-5c74594ccb-zl9pf     2/2     Running   0          6m48s
    nginx-dynamic-5c74594ccb-zl9pf   2/2   Terminating   0     7m32s
    nginx-dynamic-5c74594ccb-45sd4   0/2   Pending   0     0s
    nginx-dynamic-5c74594ccb-45sd4   0/2   Pending   0     0s
    nginx-dynamic-5c74594ccb-45sd4   0/2   Init:0/1   0     0s
    nginx-dynamic-5c74594ccb-zl9pf   0/2   Terminating   0     7m32s
    nginx-dynamic-5c74594ccb-zl9pf   0/2   Terminating   0     7m33s
    nginx-dynamic-5c74594ccb-zl9pf   0/2   Terminating   0     7m33s
    nginx-dynamic-5c74594ccb-45sd4   0/2   PodInitializing   0     5s
    nginx-dynamic-5c74594ccb-45sd4   2/2   Running   0     22s
  8. 次のコマンドを実行して、再作成されたポッドの名前を照会します。
    kubectl get pod 

    次の出力が返されます。

    NAME                               READY   STATUS      RESTARTS   AGE
    nginx-dynamic-5c74594ccb-45sd4     2/2     Running     0          2m
  9. 次のコマンドを実行して、/dataパスのdynamicファイルが削除されていないことを確認します。 これは、ディスクデータが永続的に格納されていることを示します。
    kubectl exec nginx-dynamic-5c74594ccb-45sd4 -- ls /data

    次の出力が返されます。

    dynamic
    lost+found