このトピックでは、ステートフルアプリケーションで動的にプロビジョニングされたディスクを使用するタイミングと方法について説明します。
背景情報
動的にプロビジョニングされたディスクを使用する場合:
Container Service for Kubernetes (ACK) クラスターにアプリケーションをデプロイするときに使用可能なディスクがない場合、システムは自動的にディスクを作成し、動的ボリュームとして使用します。
動的にプロビジョニングされたディスクを使用する方法:
- 永続ボリュームクレーム (PVC) を手動で作成し、PVCでStorageClassを指定します。
- アプリケーションをデプロイすると、指定された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リソースが使い果たされた場合、システムはウルトラディスクの作成を試みます。
- を作成します。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を削除するとディスクが自動的に削除されます。 ディスクデータを復元できません。タイプ
ディスクのタイプ。 有効な値は、cloud、cloud_efficiency、cloud_ssd、availableです。 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 です。 - 次のコマンドを実行してStorageClassを作成します。
kubectl create -f storageclass.yaml
PVC の作成
- を作成します。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
- 次のコマンドを実行してPVCを作成します。
kubectl create -f pvc-ssd.yaml
クラスターの詳細ページで、[ボリューム] をクリックし、左側のナビゲーションウィンドウで [ボリュームクレーム] を選択します。 [永続的なボリュームクレーム] ページでは、作成されたPVCとそのPVCにバインドされているPVを表示できます。 PVCのStorageClass
はalicloud-disk-ssd-hangzhou-bです。
デプロイの作成
- を作成します。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
- 次のコマンドを実行して、展開を作成します。
kubectl create -f nginx-dynamic.yaml
クラスターの詳細ページで、[ワークロード] をクリックし、左側のナビゲーションウィンドウで [デプロイ] を選択します。 [デプロイメント] ページで、作成したデプロイメントを表示できます。
永続ストレージにディスクを使用する
- 次のコマンドを実行して、デプロイをホストするポッドを照会します。
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
- 次のコマンドを実行して、dynamicファイルを /dataパスに作成します。
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamic
- 次のコマンドを実行して、/dataパスのファイルを照会します。
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data
次の出力が返されます。
dynamic lost+found
- 次のコマンドを実行して、ポッド
nginx-dynamic-5c74594ccb-zl9pf
を削除します。kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf
次の出力が返されます。
pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
- 別の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
- 次のコマンドを実行して、再作成されたポッドの名前を照会します。
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