すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ENS ディスクの使用

最終更新日:Mar 27, 2026

Edge Node Service (ENS) ディスクは、ACK Edge クラスター内の ENS ノード向けのブロックストレージを提供します。Container Storage Interface (CSI) ドライバーを使用すると、ENS ディスクボリュームを以下の 2 つの方法でマウントできます。1 つ目は**動的プロビジョニング**で、PersistentVolumeClaim (PVC) の作成時にクラスターが自動的にディスクを作成します。2 つ目は**静的プロビジョニング**で、事前に作成済みのディスクを PersistentVolume (PV) に手動でバインドします。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

考慮事項

ハード制限:

  • ENS ディスクは共有できません。1 つのディスクは同時に 1 つの Pod にのみマウントできます。

  • ENS ディスクは、ディスクと同じリージョンにある ENS ノードにのみマウントできます。

  • サポートされる再利用ポリシーは Retain のみです。PVC を削除しても PV およびディスクデータは保持され、Edge Node Service コンソールから手動で削除する必要があります。

  • Pod が再作成された場合、システムは元のディスクを再マウントします。Pod が元のゾーンにスケジュールできない場合、Pending 状態のままになります。

  • 動的プロビジョニングは、従量課金ディスクのみをサポートします。課金の詳細については、「課金概要」をご参照ください。課金の詳細については、「ブロックストレージの課金」をご参照ください。料金の詳細については、ECS 製品ページをご参照ください。

  • 指定するディスクサイズは、対象のディスクタイプの容量範囲内である必要があります。詳細については、「ディスクタイプ」をご参照ください。

仕組み

動的プロビジョニング:

  1. ENS CSI プロビジョナーを指定した StorageClass と、それを参照する PVC を作成します。

  2. Pod がスケジュールされると、CSI ドライバーがノードが存在するゾーンに ENS ディスクを作成します。

  3. CSI ドライバーが PV をプロビジョニングし、PVC にバインドします。

  4. ディスクがノードにアタッチされ、Pod 内にマウントされます。

静的プロビジョニング:

  1. 既存の ENS ディスク ID を参照する PV を作成します。

  2. PV と一致するラベルセレクターを持つ PVC を作成します。

  3. Kubernetes が PVC を PV にバインドします。

  4. PVC を参照するワークロードをデプロイすると、ディスクが Pod 内にマウントされます。

動的プロビジョニングの使用

動的プロビジョニングでは、ディスクの作成および PV のバインドが自動化されます。オンデマンドで ENS ディスクをプロビジョニングするには、StorageClass を使用します。

ステップ 1:StorageClass の作成

ENS CSI では、2 種類のボリュームバインディングモードがサポートされています。デプロイメントに応じて、いずれかを選択してください。

バインディングモード 動作 使用するケース
WaitForFirstConsumer(推奨) Pod のスケジュールが完了するまでディスク作成を遅延し、Pod のゾーンにディスクを作成 クラスターが複数のリージョンにまたがっている場合
Immediate PVC の作成時に即座にディスクを作成 クラスターが単一のリージョンに存在し、regionId

オプション 1:WaitForFirstConsumer(推奨)

  1. 以下の内容で 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
  2. StorageClass を適用します。

    kubectl apply -f storage-class-topology.yaml
  3. StorageClass が正しく作成されたことを確認します。

    kubectl get storageclass alicloud-ens-disk-available

オプション 2: 即時

  1. 以下の内容で 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
  2. StorageClass を適用します。

    kubectl apply -f storage-class-csi.yaml
  3. 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 の作成

  1. 以下の内容で 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
  2. PVC を適用します。

    kubectl create -f pvc-dynamic.yaml
  3. PVC のステータスを確認します。

    kubectl get pvc disk-pvc

    WaitForFirstConsumer を使用した場合、PVC は参照する Pod がスケジュールされるまで Pending 状態のままになります。これは正常な動作です。

ステップ 3:ワークロードのデプロイ

  1. 以下の内容で 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 の名前と一致させる必要があります。
  2. StatefulSet を適用します。

    kubectl create -f pvc-dynamic-workload.yaml
  3. Pod が実行中であり、PVC がバインドされていることを確認します。

    kubectl get pods -l app=nginx
    kubectl get pvc disk-pvc

    Pod がスケジュールされ、ディスクがプロビジョニングされると、PVC のステータスは Bound に変更されます。Pod のスケジューリングには数分かかる場合があります。

静的プロビジョニングの使用

静的プロビジョニングでは、事前に作成・構成済みの ENS ディスクをワークロードにマウントできます。既にディスクを作成済みの場合にこの手法を使用します。

ステップ 1:PV の作成

  1. 以下の内容で 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 コンソールで確認できます。
    nodeAffinity PV を指定リージョンのノードに制限します。ENS ディスクのリージョンに設定してください。
    topology.ensplugin.csi.alibabacloud.com/region ENS ノードのリージョン ID。コマンド kubectl get node <node-name> --show-labels を実行して確認できます。
  2. PV を適用します。

    kubectl create -f pv-static.yaml
  3. PV が正しく作成されたことを確認します。

    kubectl get pv csi-pv

ステップ 2:PVC の作成

  1. 以下の内容で 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-pv

    storageClassName: "" は、Kubernetes に対して動的プロビジョニングではなく、手動で作成した PV にバインドするよう指示します。selector.matchLabels は PV のラベルと一致させる必要があります。要求するストレージ容量(25Gi)は、PV の容量を超えてはなりません。

  2. PVC を適用します。

    kubectl create -f pvc-static.yaml
  3. PVC が PV にバインドされていることを確認します。

    kubectl get pvc csi-pvc

    PVC のステータスは Bound と表示されるはずです。

ステップ 3:ワークロードのデプロイ

  1. 以下の内容で 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
  2. StatefulSet を適用します。

    kubectl apply -f web-static.yaml
  3. Pod が実行中であることを確認します。

    kubectl get pods -l app=nginx
    kubectl get pvc csi-pvc

    Pod が Running ステータスになり、PVC が Bound と表示された場合、ENS ディスクが正常にマウントされています。

次のステップ

  • コンポーネントの管理 — csi-ens-plugin および csi-ens-provisioner コンポーネントの更新またはアンインストールを行います。

  • ディスクタイプ — 利用可能な ENS ディスクタイプおよびその容量範囲を確認します。

  • 課金概要 — 動的にプロビジョニングされたボリュームに対する ENS ディスクの課金について理解します。