サーバーレス Kubernetes (ACK Serverless) は、Container Storage Interface (CSI) プラグインを使用して、オンデマンドで Alibaba Cloud のディスクボリュームを自動的にプロビジョニングします。このトピックでは、StorageClass の作成、永続ボリューム要求 (PVC) を用いたストレージの要求、およびステートフルアプリケーションへのボリュームのマウント方法について説明します。
利用シーン
ディスクボリュームは、パフォーマンス専有型の高性能ブロックストレージを必要とするワークロードに適しています。
-
Pod 間でデータを共有しない、ディスク I/O 要件が高いステートフルアプリケーション (例:MySQL、Redis)
-
高スループットのログ書き込み
-
Pod のライフサイクルから独立したデータの永続化
動的プロビジョニングの仕組み
StorageClass を参照する PVC を作成すると、Kubernetes は Alibaba Cloud ディスクをバックエンドとする永続ボリューム (PV) を自動的に作成し、バインドします。これにより、手動でのディスク作成が不要になり、ストレージインフラのオーバーヘッドが削減されます。
ACK Serverless クラスターには、デフォルトの StorageClass は含まれていません。ストレージをプロビジョニングする前に作成してください。
Kubernetes はデフォルトの StorageClass 機能をサポートしています。PVC が StorageClass を参照しない場合、Kubernetes はデフォルトの StorageClass を使用して PV をプロビジョニングします。Kubernetes のストレージの基本概念については、「ストレージの基本」をご参照ください。
前提条件
開始する前に、以下を確認してください。
-
ACK Serverless クラスターがあること。詳細については、「ACK Serverless クラスターの作成」をご参照ください。
-
kubectl がクラスターに接続されていること。詳細については、「kubectl を使用した ACK クラスターへの接続」をご参照ください。
-
CSI プラグインがインストールされていること。詳細については、「csi-provisioner のインストールと更新」をご参照ください。
ディスクボリュームのプロビジョニング
以下の手順を順番に実行します。
-
StorageClass を作成して、ディスクタイプとプロビジョニングの動作を定義します。
-
PVC を作成して、StorageClass からストレージを要求します。
-
アプリケーションをデプロイし、PVC をマウントします。
ACK コンソール
ステップ 1: StorageClass の作成
-
ACK コンソールにログインし、左側のナビゲーションウィンドウで [クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスター名をクリックします。左側のペインで、[ボリューム] > [ストレージクラス] を選択します。
-
[ストレージクラス] ページの右上隅にある [作成] をクリックします。
-
[作成] ダイアログボックスで、パラメーターを設定します。
特定の ECS インスタンスタイプは、ESSD またはエラスティック一時ディスクをサポートしていません。詳細については、「Elastic Block Storage に関するよくある質問」をご参照ください。
パラメーター 必須 説明 名前 はい StorageClass の名前。コンソールに表示されるフォーマット要件に従ってください。 PV タイプ はい [クラウドディスク] を選択します。 パラメーター はい typeキーを使用してディスクカテゴリを指定します。デフォルト:cloud_essd。有効な値:cloud_essd(ESSD (エンタープライズ SSD))、cloud_regional_disk_auto(リージョン ESSD)、elastic_ephemeral_disk_premium(プレミアムエラスティック一時ディスク)、elastic_ephemeral_disk_standard(標準エラスティック一時ディスク)、cloud_ssd(標準 SSD)、cloud_efficiency(Ultra ディスク)。フォールバックカテゴリを指定するには、プリファレンスの順に複数の値を設定します (例:type: cloud_ssd,cloud_essd)。システムは各カテゴリを順番に試行し、ディスクが作成された時点で停止します。ディスク作成を 1 つ以上のゾーンに固定するには、zoneIdパラメーターを追加します (例:シングルゾーンの場合はcn-beijing-a、マルチゾーンの場合はcn-beijing-a, cn-beijing-b)。リクレームポリシー はい PVC が削除されたときに PV およびディスクに対して実行される操作を制御します。デフォルト値: 削除(PV およびディスクが削除されます)。PV およびディスクを手動クリーンアップ用に保持するには、[保持] に設定します — データ損失のコストが高い場合に推奨されます。 バインディングモード いいえ 即時デフォルト: (Pod がスケジューリングされる前にディスクが作成されます)。 -
[作成] をクリックします。新しい StorageClass が [ストレージクラス] ページに表示されます。
ステップ 2: PVC の作成
-
クラスター詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。
-
[永続ボリューム要求] ページの右上隅にある [作成] をクリックします。
-
[PVC の作成] ダイアログボックスで、パラメーターを設定します。
パラメーター 必須 説明 PVC タイプ はい [クラウドディスク] を選択します。 名前 はい PVC の名前。名前空間内で一意である必要があります。 割り当てモード はい [ストレージクラスを使用] を選択します。 既存のストレージクラス はい [選択] をクリックし、ステップ 1 で作成した StorageClass を見つけ、[操作] 列の [選択] をクリックします。 容量 はい 要求するストレージ容量。最小: 20 GiB。 アクセスモード いいえ ReadWriteOnceデフォルト: (シングルノードでの読み取り/書き込み)。 -
[作成] をクリックします。PVC が [永続ボリューム要求] ページに表示され、PV がバインドされます。
ステップ 3: アプリケーションのデプロイ
-
クラスター詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [StatefulSet] を選択します。
-
[StatefulSet] ページの右上隅にある [イメージから作成] をクリックします。
-
アプリケーションを設定します。ボリュームを設定する際は、[クラウドストレージ] を選択し、手順 2 で作成した PVC をマウントします。この例では、ディスクボリュームが
/tmpにマウントされています —/tmpに書き込まれたコンテナデータはディスクボリュームに保存されます。その他のアプリケーションのパラメーターについては、「StatefulSet を使用してステートフルアプリケーションを作成する」をご参照ください。
-
[作成] をクリックします。アプリケーションがデプロイされ、永続ストレージとしてディスクボリュームを使用します。
kubectl
ステップ 1: StorageClass の作成
マルチゾーンクラスターでは、StorageClass は Pod をスケジューリングする前にプロビジョニングするディスクタイプを決定します。
-
storage-class-csi.yamlという名前のファイルを以下の内容で作成します。パラメーター 必須 説明 provisionerはい diskplugin.csi.alibabacloud.comに設定します。これは Alibaba Cloud ディスク CSI プロビジョナーを識別します。typeはい ディスクカテゴリ。有効な値: cloud_auto(ESSD AutoPL ディスク)、cloud_essd(ESSD、デフォルト)、cloud_essd_entry(ESSD エントリーディスク)、cloud_ssd(標準 SSD)、cloud_efficiency(Ultra ディスク)、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 ディスク。 # システムは各値を順番に試行し、ディスクが作成された時点で停止します。 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 を確認します。ログインし、[クラスター] をクリックし、対象のクラスター名をクリックしてから、[ボリューム] > [ストレージクラス] を選択します。新しい StorageClass がリストに表示されます。
ステップ 2: 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 コンソールで PVC を確認します。クラスター詳細ページで、[ボリューム] > [永続ボリューム要求] を選択します。PVC がリストに表示され、PV がバインドされます。
ステップ 3: アプリケーションのデプロイ
-
pvc-dynamic.yamlという名前のファイルを以下の内容で作成します。パラメーター 説明 mountPathディスクボリュームがマウントされるコンテナ内のパス。 claimNameマウントする PVC の名前。ステップ 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] を選択します。アプリケーションがリストに表示されます。
次のステップ
-
ディスクボリュームでエラーが発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。
-
容量が不足しているディスクの容量拡張を行うには、「ディスクボリュームの容量拡張」をご参照ください。
-
ディスク使用率をリアルタイムでモニターするには、「コンテナストレージモニタリングの概要」をご参照ください。