すべてのプロダクト
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 WaitForFirstConsumerImmediate 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 ディスクの課金について理解します。