このトピックでは、ACK Serverless でステートフルアプリケーション向けに Alibaba Cloud のディスクボリュームを動的にプロビジョニングしてマウントする方法と、その永続ストレージ特性を検証する方法について説明します。
ユースケース
ディスクボリュームは、専用の高性能なブロックストレージを必要とするワークロードに適しています。
-
Pod 間のデータ共有を伴わない、高いディスク I/O 要件を持つステートフルアプリケーション (例:MySQL、Redis)
-
高スループットのログ書き込み
-
Pod のライフサイクルから独立したデータ永続化
動的プロビジョニングの仕組み
PersistentVolumeClaim (PVC) が StorageClass を参照すると、Kubernetes は Alibaba Cloud のディスクをバックエンドとする PersistentVolume (PV) を自動的に作成してバインドするため、手動でのディスク作成が不要になります。
ACK Serverless クラスターには、デフォルトの StorageClass は含まれていません。ストレージをプロビジョニングする前に作成する必要があります。
Kubernetes はデフォルトのStorageClass をサポートしています。PVC が StorageClass を省略した場合、Kubernetes はデフォルトの StorageClass を使用して PV をプロビジョニングします。詳細については、「ストレージの基礎」をご参照ください。
前提条件
以下を確認してください。
-
ACK Serverless クラスターが作成されていること。
-
kubectl がクラスターに接続されていること。
-
CSI プラグインがインストールされていること。
ディスクボリュームのプロビジョニング
以下の手順を順番に実行します。
-
StorageClass を作成し、ディスクタイプとプロビジョニングの動作を定義します。
-
PVC を作成し、StorageClass からストレージを要求します。
-
アプリケーションをデプロイし、PVC をマウントします。
ACKコンソール
手順1:StorageClassの作成
-
ACK コンソールにログインし、左側メニューで [クラスター] をクリックします。
-
[クラスター] ページで対象のクラスター名をクリックし、[ボリューム] > [StorageClass] を選択します。
-
[StorageClass] ページで、[作成] をクリックします。
-
[作成] ダイアログボックスで、パラメーターを設定します。
特定の ECS インスタンスタイプは、ESSD または弾性エフェメラルディスクをサポートしていません。詳細については、「Elastic Block Storageに関するFAQ」をご参照ください。
パラメーター 必須 説明 [名前] はい StorageClass 名。 [PVタイプ] はい [クラウドディスク] を選択します。 [パラメーター] はい ディスクカテゴリ。デフォルト: cloud_essd。有効な値:cloud_auto(ESSD AutoPLディスク)、cloud_essd(ESSD)、cloud_essd_entry(ESSD Entryディスク)、cloud_ssd(標準 SSD)、cloud_efficiency(Ultra Disk)、elastic_ephemeral_disk_standard(標準弾性エフェメラルディスク)、elastic_ephemeral_disk_premium(プレミアム弾性エフェメラルディスク)、cloud_regional_disk_auto(リージョナル ESSD)。フォールバック用に複数の値を設定できます (例:type: cloud_ssd,cloud_essd)。システムは各値を順番に試行します。zoneIdを追加して特定のゾーンに固定できます (例: または )。[リクレームポリシー] はい PVC 削除時の PV とディスクの動作。デフォルト: [削除] (両方とも削除)。両方を保持するには [保持] に設定します。データの損失が許容できない場合に推奨されます。 [バインディングモード] いいえ デフォルト: [即時] (Pod がスケジューリングされる前にディスクを作成します)。 -
[作成] をクリックします。StorageClass が [StorageClass] ページに表示されます。
手順2:PersistentVolumeClaim (PVC) の作成
-
左側メニューで、[ボリューム] > [PersistentVolumeClaim] を選択します。
-
[PersistentVolumeClaim] ページで、[作成] をクリックします。
-
[PVCの作成] ダイアログボックスで、パラメーターを設定します。
パラメーター 必須 説明 [PVCタイプ] はい [クラウドディスク] を選択します。 [名前] はい PVC 名。名前空間内で一意である必要があります。 [割り当てモード] はい [StorageClassの使用] を選択します。 [既存のStorageClass] はい [選択] をクリックし、手順1で作成した StorageClass を見つけ、[操作] 列の [選択] をクリックします。 [容量] はい 要求するストレージ容量。最小:20 GiB。 [アクセスモード] いいえ デフォルト: [ReadWriteOnce] (単一ノードでの読み書き)。 -
[作成] をクリックします。PVC が [PersistentVolumeClaim] ページに表示され、PV がバインドされます。
手順3:アプリケーションのデプロイ
-
左側メニューで、[ワークロード] > [StatefulSet] を選択します。
-
[StatefulSet] ページで、[イメージから作成] をクリックします。
-
アプリケーションを設定します。[クラウドストレージ] を選択し、手順2で作成した PVC をマウントします。この例では、ディスクは
/tmpにマウントされ、/tmpに書き込まれたデータが永続化されます。詳細については、「StatefulSetを使用したステートフルアプリケーションの作成」をご参照ください。 -
[作成] をクリックします。アプリケーションが永続ディスクストレージとともにデプロイされます。
kubectl
手順1:StorageClassの作成
マルチゾーンクラスターでは、StorageClass が Pod のスケジューリング前にディスクタイプを決定します。
-
storage-class-csi.yamlというファイルを作成します。パラメーター 必須 説明 provisionerはい diskplugin.csi.alibabacloud.comに設定します。typeはい ディスクカテゴリ。有効な値: cloud_auto(ESSD AutoPLディスク)、cloud_essd(ESSD、デフォルト)、cloud_essd_entry(ESSD Entryディスク)、cloud_ssd(標準 SSD)、cloud_efficiency(Ultra Disk)、elastic_ephemeral_disk_standard(標準弾性エフェメラルディスク)、elastic_ephemeral_disk_premium(プレミアム弾性エフェメラルディスク)、cloud_regional_disk_auto(リージョナル ESSD)。フォールバックとして、複数の値をカンマ区切りで指定できます。詳細については、「EBSの料金」、「ブロックストレージのパフォーマンス」、「インスタンスファミリーの概要」をご参照ください。encryptedいいえ ディスクを暗号化するかどうか。デフォルト: false。reclaimPolicyはい PVC 削除時の PV とディスクの動作。 Delete:両方とも削除。Retain:両方とも保持 — データの損失が許容できない場合はRetainを使用します。デフォルト:Delete。allowVolumeExpansionいいえ オンラインでのディスク拡張を許可するには trueに設定します。volumeBindingModeいいえ デフォルト: Immediate(Pod がスケジューリングされる前にディスクをプロビジョニングします)。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-ssd-b # Alibaba Cloud ディスクのプロビジョナーとして diskplugin.csi.alibabacloud.com を使用します。 provisioner: diskplugin.csi.alibabacloud.com parameters: # ディスクカテゴリのフォールバック順序:ESSD → 標準 SSD → Ultra Disk。 # システムは各値を順番に試行し、ディスクが作成されると停止します。 type: cloud_essd,cloud_ssd,cloud_efficiency # オプション。ディスクを保存時に暗号化するには "true" に設定します。 encrypted: "false" # Retain:PVC が削除されたときに PV とディスクを保持します (手動でのクリーンアップが必要)。 # Delete:PVC が削除されると、PV とディスクが自動的に削除されます。 reclaimPolicy: Retain # ダウンタイムなしでオンラインでのディスク拡張を許可します。 allowVolumeExpansion: true # Immediate:Pod がスケジューリングされる前にディスクをプロビジョニングします。 volumeBindingMode: Immediate -
StorageClass を適用します。
kubectl apply -f storage-class-csi.yaml -
ACK コンソールで確認します。ログインし、[クラスター] をクリックし、対象のクラスター名をクリックした後、[ボリューム] > [StorageClass] を選択します。
手順2:PersistentVolumeClaim (PVC) の作成
-
pvc-ssd.yamlというファイルを作成します。パラメーター 必須 説明 nameはい PVC 名。 accessModesはい PV のアクセスモード。 volumeModeいいえ ディスクのマウント形式。 Filesystemがサポートされています。storageClassNameはい プロビジョニング用の StorageClass。 storageはい 要求するストレージ容量。最小:20 GiB。 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-ssd-b -
PVC を作成します。
kubectl create -f pvc-ssd.yaml -
ACK コンソールで確認します。[ボリューム] > [PersistentVolumeClaim] を選択します。
手順3:アプリケーションのデプロイ
-
pvc-dynamic.yamlというファイルを作成します。パラメーター 説明 mountPathディスクマウント用のコンテナパス。 claimNamePVC 名。手順2の PVC と一致する必要があります。 apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx-dynamic spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: pvc-disk mountPath: /data # ディスクがマウントされるコンテナ内のパス。 volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc # 手順2で作成した PVC 名と一致させる必要があります。 -
アプリケーションをデプロイします。
kubectl create -f pvc-dynamic.yaml -
ACK コンソールで確認します。[ワークロード] > [StatefulSet] を選択します。
次のステップ
-
エラーのトラブルシューティングは、「ディスクボリュームに関するFAQ」をご参照ください。
-
容量が不足している ディスクボリュームを拡張します。
-
コンテナストレージモニタリング 機能でディスク使用量を監視します。