ここでは、ステートフルサービスの作成のために動的クラウドディスクが必要とされる典型的なシナリオおよび、動的クラウドディスクの使用手順を解説します。
シナリオと方法
動的クラウドディスクを利用するシナリオ
アプリケーションのデプロイ前に手動でクラウドディスクを購入するよりも、アプリケーションのデプロイ時に自動的にクラウドディスクを購入するようにシステムを設定する場合。
動的クラウドディスクの使用方法
- 手動でPVC を作成し、作成した PVC でStorageClass を指定します。
- 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 クラウドディスクが完売の場合、システムはベーシッククラウドディスクを作成します。
- 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 つを使いクラウドディスクのタイプを指定します: cloud、cloud_efficiency、cloud_ssd および available。regionid
: (オプション) クラウドディスクが自動的に作成されるリージョンを設定します。 ここで指定するリージョンはお使いのクラスターがあるリージョンと同一のものである必要があります。zoneid
: (オプション) クラウドディスクが自動的に作成されるゾーンを設定します。- シングルゾーンクラスターに対してこのパラメーターを設定する場合、値はクラスターがあるゾーンと同一のものである必要があります。
- マルチゾーンクラスターに対してこのパラメーターを設定する場合、複数の値を設定できます。 たとえば以下のようになります。
zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
fstype
: (オプション) 自動的に作成されるクラウドディスクのファイルシステムを設定します。 デフォルト設定は、ext4 となります。readonly
: (オプション) 自動的に作成されるクラウドディスクを読み取り専用にするかどうかを選択します。 このパラメーターを true に設定した場合、クラウドディスクは読み取り専用になります。 このパラメーターを false に設定した場合、クラウドディスクは読み書き可能になります。 デフォルト設定は、false となります。encrypted
: (オプション) 自動的に作成されるクラウドディスクを暗号化するかどうかを設定します。 このパラメーターを true に設定した場合、クラウドディスクは暗号化されます。 このパラメーターを false に設定した場合、クラウドディスクは暗号化されません。 デフォルト設定は、false となります。
- 以下のコマンドを実行し、StorageClass を作成します。
$ kubectl create -f storageclass.yaml
PVC の作成
- pvc-ssd.yaml ファイルを作成します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-ssd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-ssd-hangzhou-b resources: requests: storage: 20Gi
- 以下のコマンドを実行し、PVC を作成します。
$ kubectl create -f pvc-ssd.yaml
結果
Kubernetes で、左側のナビゲーションウィンドウから
をクリックします。対象となるクラスターおよび名前空間を選択し、PVC に関連付けられた StorageClass 名が StorageClass
で設定された alicloud-disk-ssd-hangzhou-b であること、および PVC がボリュームに関連付けられていることを確認します。アプリケーションの作成
- 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
- 以下のコマンドを実行し、デプロイを作成します。
$ kubectl create -f nginx-dynamic.yaml
結果
Kubernetes で、左側のナビゲーションウィンドウから
をクリックします。対象となるクラスターおよび名前空間を選択し、作成されたデプロイを確認します。動的クラウドの永続ストレージ
- 以下のコマンドを実行し、作成されたデプロイにあるポッドを表示します。
$ kubectl get pod | grep dynamic nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 3m
- 以下のコマンドを実行し、新しいディスクが /data パスにマウントされていることを確認します。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf df | grep data /dev/vdh 20511312 45080 20449848 1% /data
- 以下のコマンドを実行し、/data パスのファイルを表示します。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf ls /data lost+found
- 以下のコマンドを実行し、/data パスに dynamic という名称のファイルを作成します。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf touch /data/dynamic
- 以下のコマンドを実行し、/data パスのファイルを表示します。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf ls /data dynamic lost+found
- 以下のコマンドを実行し、
nginx-dynamic-78c7dcb9d7-g9lll
という名前のポッドを削除します。$ kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
- もう 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
- 以下のコマンドを実行し、Kubernetes により新たに作成されたポッドを表示します。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 2m
- 以下のコマンドを実行し、/data パスにある作成した
dynamic
という名称のファイルが削除されていないことを確認します。これは、動的クラウドディスク上のデータが永続的に保存されることを示します。$ kubectl exec nginx-dynamic-5c74594ccb-45sd4 ls /data dynamic lost+found