Edge Node Service (ENS) ディスクは、ACK Edge クラスター内の ENS ノード向けのブロックストレージを提供します。Container Storage Interface (CSI) ドライバーを使用すると、ENS ディスクボリュームを以下の 2 つの方法でマウントできます。1 つ目は**動的プロビジョニング**で、PersistentVolumeClaim (PVC) の作成時にクラスターが自動的にディスクを作成します。2 つ目は**静的プロビジョニング**で、事前に作成済みのディスクを PersistentVolume (PV) に手動でバインドします。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
ACK Edge クラスターが存在すること。詳細については、「ACK Edge クラスターの作成」をご参照ください。
-
エッジノードが作成され、クラスターに追加済みであること。詳細については、「インスタンスの作成」および「エッジノードの追加」をご参照ください。
-
csi-ens-pluginおよびcsi-ens-provisionerコンポーネントがインストール済みであること。詳細については、「コンポーネントの管理」をご参照ください。 -
クラスターに接続された kubectl クライアント。詳細については、「クラスターの kubeconfig ファイルを取得して kubectl を使用してクラスターに接続する」をご参照ください。
-
(静的プロビジョニングのみ)従量課金の ENS ディスクが既に作成済みであり、そのディスク ID が記録済みであること。
考慮事項
ハード制限:
-
ENS ディスクは共有できません。1 つのディスクは同時に 1 つの Pod にのみマウントできます。
-
ENS ディスクは、ディスクと同じリージョンにある ENS ノードにのみマウントできます。
-
サポートされる再利用ポリシーは
Retainのみです。PVC を削除しても PV およびディスクデータは保持され、Edge Node Service コンソールから手動で削除する必要があります。 -
Pod が再作成された場合、システムは元のディスクを再マウントします。Pod が元のゾーンにスケジュールできない場合、
Pending状態のままになります。 -
動的プロビジョニングは、従量課金ディスクのみをサポートします。課金の詳細については、「課金概要」をご参照ください。課金の詳細については、「ブロックストレージの課金」をご参照ください。料金の詳細については、ECS 製品ページをご参照ください。
-
指定するディスクサイズは、対象のディスクタイプの容量範囲内である必要があります。詳細については、「ディスクタイプ」をご参照ください。
仕組み
動的プロビジョニング:
-
ENS CSI プロビジョナーを指定した StorageClass と、それを参照する PVC を作成します。
-
Pod がスケジュールされると、CSI ドライバーがノードが存在するゾーンに ENS ディスクを作成します。
-
CSI ドライバーが PV をプロビジョニングし、PVC にバインドします。
-
ディスクがノードにアタッチされ、Pod 内にマウントされます。
静的プロビジョニング:
-
既存の ENS ディスク ID を参照する PV を作成します。
-
PV と一致するラベルセレクターを持つ PVC を作成します。
-
Kubernetes が PVC を PV にバインドします。
-
PVC を参照するワークロードをデプロイすると、ディスクが Pod 内にマウントされます。
動的プロビジョニングの使用
動的プロビジョニングでは、ディスクの作成および PV のバインドが自動化されます。オンデマンドで ENS ディスクをプロビジョニングするには、StorageClass を使用します。
ステップ 1:StorageClass の作成
ENS CSI では、2 種類のボリュームバインディングモードがサポートされています。デプロイメントに応じて、いずれかを選択してください。
| バインディングモード | 動作 | 使用するケース |
|---|---|---|
WaitForFirstConsumer(推奨) |
Pod のスケジュールが完了するまでディスク作成を遅延し、Pod のゾーンにディスクを作成 | クラスターが複数のリージョンにまたがっている場合 |
Immediate |
PVC の作成時に即座にディスクを作成 | クラスターが単一のリージョンに存在し、regionId |
オプション 1:WaitForFirstConsumer(推奨)
-
以下の内容で
storage-class-topology.yamlというファイルを作成します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-ens-disk-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available fsType: ext4 volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: false -
StorageClass を適用します。
kubectl apply -f storage-class-topology.yaml -
StorageClass が正しく作成されたことを確認します。
kubectl get storageclass alicloud-ens-disk-available
オプション 2: 即時
-
以下の内容で
storage-class-csi.yamlというファイルを作成します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-ens-disk-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available regionId: <your-region-id> reclaimPolicy: Retain allowVolumeExpansion: false volumeBindingMode: Immediate -
StorageClass を適用します。
kubectl apply -f storage-class-csi.yaml -
StorageClass が正しく作成されたことを確認します。
kubectl get storageclass alicloud-ens-disk-available
StorageClass のパラメーター:
| パラメーター | 値 | デフォルト値 | 説明 |
|---|---|---|---|
provisioner |
ensplugin.csi.alibabacloud.com |
— | ENS CSI ドライバー識別子。この値に設定する必要があります。 |
type |
available |
— | プロビジョニングするディスクタイプ。 |
fsType |
ext4 |
ext4 |
ディスク上に作成するファイルシステムの種類。 |
regionId |
有効な ENS リージョン ID | — | 任意。ディスクを自動作成するリージョン。 |
reclaimPolicy |
Retain |
Retain |
ディスクの再利用ポリシー。サポートされるのは Retain のみです。 |
volumeBindingMode |
WaitForFirstConsumer、Immediate |
Immediate |
ディスク作成および PV バインドのタイミングを制御します。 |
allowVolumeExpansion |
false |
false |
ボリュームの拡張はサポートされていません。 |
ステップ 2:PVC の作成
-
以下の内容で
pvc-dynamic.yamlというファイルを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-ens-disk-available -
PVC を適用します。
kubectl create -f pvc-dynamic.yaml -
PVC のステータスを確認します。
kubectl get pvc disk-pvcWaitForFirstConsumerを使用した場合、PVC は参照する Pod がスケジュールされるまでPending状態のままになります。これは正常な動作です。
ステップ 3:ワークロードのデプロイ
-
以下の内容で
pvc-dynamic-workload.yamlというファイルを作成します。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: /tmp volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvcパラメーター 説明 mountPathコンテナ内でのディスクマウント先パス。 claimNameマウントする PVC の名前。前のステップで作成した PVC の名前と一致させる必要があります。 -
StatefulSet を適用します。
kubectl create -f pvc-dynamic-workload.yaml -
Pod が実行中であり、PVC がバインドされていることを確認します。
kubectl get pods -l app=nginx kubectl get pvc disk-pvcPod がスケジュールされ、ディスクがプロビジョニングされると、PVC のステータスは
Boundに変更されます。Pod のスケジューリングには数分かかる場合があります。
静的プロビジョニングの使用
静的プロビジョニングでは、事前に作成・構成済みの ENS ディスクをワークロードにマウントできます。既にディスクを作成済みの場合にこの手法を使用します。
ステップ 1:PV の作成
-
以下の内容で
pv-static.yamlというファイルを作成します。apiVersion: v1 kind: PersistentVolume metadata: name: csi-pv labels: alicloud-pvname: static-disk-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: ensplugin.csi.alibabacloud.com volumeHandle: "<your-disk-id>" # ご自身の ENS ディスク ID に置き換えてください nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ensplugin.csi.alibabacloud.com/region operator: In values: - "<your-node-region-id>" # 実行コマンド: kubectl get node <node-name> --show-labelsパラメーター 説明 volumeHandle既存の ENS ディスクのディスク ID。Edge Node Service コンソールで確認できます。 nodeAffinityPV を指定リージョンのノードに制限します。ENS ディスクのリージョンに設定してください。 topology.ensplugin.csi.alibabacloud.com/regionENS ノードのリージョン ID。コマンド kubectl get node <node-name> --show-labelsを実行して確認できます。 -
PV を適用します。
kubectl create -f pv-static.yaml -
PV が正しく作成されたことを確認します。
kubectl get pv csi-pv
ステップ 2:PVC の作成
-
以下の内容で
pvc-static.yamlというファイルを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi storageClassName: "" selector: matchLabels: alicloud-pvname: static-disk-pvstorageClassName: ""は、Kubernetes に対して動的プロビジョニングではなく、手動で作成した PV にバインドするよう指示します。selector.matchLabelsは PV のラベルと一致させる必要があります。要求するストレージ容量(25Gi)は、PV の容量を超えてはなりません。 -
PVC を適用します。
kubectl create -f pvc-static.yaml -
PVC が PV にバインドされていることを確認します。
kubectl get pvc csi-pvcPVC のステータスは
Boundと表示されるはずです。
ステップ 3:ワークロードのデプロイ
-
以下の内容で
web-static.yamlというファイルを作成します。apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx-static spec: selector: matchLabels: app: nginx serviceName: "nginx" template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: pvc-disk mountPath: /tmp volumes: - name: pvc-disk persistentVolumeClaim: claimName: csi-pvc -
StatefulSet を適用します。
kubectl apply -f web-static.yaml -
Pod が実行中であることを確認します。
kubectl get pods -l app=nginx kubectl get pvc csi-pvcPod が
Runningステータスになり、PVC がBoundと表示された場合、ENS ディスクが正常にマウントされています。
次のステップ
-
コンポーネントの管理 —
csi-ens-pluginおよびcsi-ens-provisionerコンポーネントの更新またはアンインストールを行います。 -
ディスクタイプ — 利用可能な ENS ディスクタイプおよびその容量範囲を確認します。
-
課金概要 — 動的にプロビジョニングされたボリュームに対する ENS ディスクの課金について理解します。