ここでは、ステートフルサービスの作成のために動的クラウドディスクが必要とされる典型的なシナリオおよび、動的クラウドディスクの使用手順を解説します。

シナリオと方法

動的クラウドディスクを利用するシナリオ

アプリケーションのデプロイ前に手動でクラウドディスクを購入するよりも、アプリケーションのデプロイ時に自動的にクラウドディスクを購入するようにシステムを設定する場合。

動的クラウドディスクの使用方法
  1. 手動でPVC を作成し、作成した PVC でStorageClass を指定します。
  2. StorageClass を使用し、アプリケーションのデプロイの際にシステムが自動的に PV を作成できるように設定します。

前提条件

  • Kubernetes クラスターの作成が必要です。 詳しくは、「Kubernetes クラスターの作成」をご参照ください。
  • kubectl を利用して Kubernetes クラスターへ接続されている必要があります。「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
  • Kubernetes クラスターにプロビジョナープラグインがインストールされている必要があります。 プラグインにより指定した StorageClass に応じたクラウドディスクが自動的に作成されます。

プロビジョナープラグイン

Alibaba Cloud Container Service for Kubernetes によりクラスターを作成した際、デフォルトでプロビジョナープラグインがクラスターにインストールされます。

StorageClass の作成

デフォルトでは、Alibaba Cloud Container Service for Kubernetes により、クラスターの初期化中に 4 つの StorageClass が作成されます。StorageClass はデフォルト設定を使用します。 さらに、4 つのデフォルト StorageClass は 1 つのゾーンを持つクラスターに対してのみ作成されます。 複数ゾーンのあるクラスタに対しては、手動で StorageClass を作成する必要があります。 デフォルトでは、以下のように 4 つの StorageClass が作成されます。
  • alicloud-disk-common は自動的に作成されるベーシッククラウドディスクです。
  • alicloud-disk-efficiency は自動的に作成される Ultra クラウドディスクです。
  • alicloud-disk-ssd は自動的に作成される SSD クラウドディスクです。
  • alicloud-disk-available はディスク選択の体系的な方法です。 具体的には、初めにシステムは Ultra クラウドディスクの作成を試みます。 指定されたゾーンで Ultra ディスクが完売している場合、システムは SSD クラウドディスクの作成を試みます。 SSD クラウドディスクが完売の場合、システムはベーシッククラウドディスクを作成します。
  1. storageclass.yaml ファイルの作成
    kind: StorageClass
    apiVersion: storage.k8s.io/v1beta1
    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" に設定します。プロビジョナープラグインを使用して StorageClass により Alibaba Cloud クラウドディスクが作成されます。
    • reclaimPolicy: ポリシーを設定し、クラウドディスクを再要求します。 このパラメーターで利用できる値は、Delete および Retain です。 デフォルト設定は、Delete となっています。
      デフォルト設定 Delete のままにする場合、クラウドディスク上のデータは、PVC の削除後に復元することはできません。これは、クラウドディスクも削除されてしまうためです。
    • type: 以下の値のうち 1 つを使いクラウドディスクのタイプを指定します: cloudcloud_efficiencycloud_ssd および available
    • regionid: (オプション) クラウドディスクが自動的に作成されるリージョンを設定します。 ここで指定するリージョンはお使いのクラスターがあるリージョンと同一のものである必要があります。
    • zoneid: (オプション) クラウドディスクが自動的に作成されるゾーンを設定します。
      • シングルゾーンクラスターに対してこのパラメーターを設定する場合、値はクラスターがあるゾーンと同一のものである必要があります。
      • マルチゾーンクラスターに対してこのパラメーターを設定する場合、複数の値を設定できます。 たとえば以下のようになります。
        zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
    • fstype: (オプション) 自動的に作成されるクラウドディスクのファイルシステムを設定します。 デフォルト設定は、ext4 となります。
    • readonly: (オプション) 自動的に作成されるクラウドディスクを読み取り専用にするかどうかを選択します。 このパラメーターを true に設定した場合、クラウドディスクは読み取り専用になります。 このパラメーターを false に設定した場合、クラウドディスクは読み書き可能になります。 デフォルト設定は、false となります。
    • encrypted: (オプション) 自動的に作成されるクラウドディスクを暗号化するかどうかを設定します。 このパラメーターを true に設定した場合、クラウドディスクは暗号化されます。 このパラメーターを false に設定した場合、クラウドディスクは暗号化されません。 デフォルト設定は、false となります。
  2. 以下のコマンドを実行し、StorageClass を作成します。
    $ kubectl create -f storageclass.yaml

PVC の作成

  1. pvc-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

結果

Kubernetes で、左側のナビゲーションウィンドウから [アプリケーション] > [ボリューム要求] をクリックします。対象となるクラスターおよび名前空間を選択し、PVC に関連付けられた StorageClass 名が StorageClass で設定された alicloud-disk-ssd-hangzhou-b であること、および PVC がボリュームに関連付けられていることを確認します。

アプリケーションの作成

  1. pvc-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

結果

Kubernetes で、左側のナビゲーションウィンドウから [アプリケーション] > [デプロイ] をクリックします。対象となるクラスターおよび名前空間を選択し、作成されたデプロイを確認します。

動的クラウドの永続ストレージ

  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. 以下のコマンドを実行し、/data パスに dynamic という名称のファイルを作成します。
    $ 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-78c7dcb9d7-g9lll という名前のポッドを削除します。
    $ kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf
    pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
  7. もう 1 つの Kubernetes インターフェイスを開きます。以下のコマンドを実行し、上記のポッドが削除された処理、および Kubernetes により新しいポッドが作成されたことを確認します。
    $ 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. 以下のコマンドを実行し、Kubernetes により新たに作成されたポッドを表示します。
    $ 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