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

Container Service for Kubernetes:コマンドラインからの動的プロビジョニングボリュームの使用

最終更新日:Mar 27, 2026

Kubernetes は、ワークロードにどのクラウドディスクをプロビジョニングするかを自動的に認識しません。ディスクタイプとゾーンのプリファレンスをマッピングする StorageClass を定義し、それを永続ボリューム要求 (PVC) で参照する必要があります。PVC が作成されると、Disk-Controller はディスクを自動的にプロビジョニングし、永続ボリューム (PV) としてバインドします。

前提条件

作業を開始する前に、以下をご確認ください。

  • kubectl が設定された実行中の Container Service for Kubernetes (ACK) クラスター

  • クラスター内に StorageClass および PVC リソースを作成する権限

デフォルトの StorageClass

シングルゾーンクラスターには、以下の StorageClass がデフォルトで含まれています。マルチゾーンクラスターでは、ターゲットゾーンを指定するために手動で StorageClass を作成する必要があります。

StorageClass ディスクタイプ 最適な用途
alicloud-disk-efficiency Ultra ディスク 中程度の I/O 要件を持つコスト重視のワークロード
alicloud-disk-ssd 標準 SSD 信頼性の高いパフォーマンスを必要とする汎用ワークロード
alicloud-disk-essd Enhanced SSD (ESSD) 低レイテンシー、高スループットの本番ワークロード
alicloud-disk-available 高可用性モード ディスクタイプよりもディスクの可用性が優先されるワークロード
alicloud-disk-topology WaitForFirstConsumer モード Pod のスケジューリングによってディスクゾーンが決定されるマルチゾーンクラスター
alicloud-disk-available の場合、システムはまず標準 SSD の作成を試み、SSD リソースが枯渇した場合は Ultra ディスクにフォールバックします。v1.14.8.44-c23b62c5-aliyun より前のバージョンの Disk-Controller の場合、フォールバック順序は Enhanced SSD (ESSD) → 標準 SSD → Ultra ディスクです。

StorageClass の作成

クラスター構成に基づいて StorageClass タイプを選択します。

ゾーン ID を持つ StorageClass の作成

このアプローチは、シングルゾーンクラスター、またはディスク作成を特定のゾーンに固定したい場合に使用します。

  1. storage-class.yaml という名前のファイルに以下の内容で作成します。

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: alicloud-disk-ssd-hangzhou-b
    provisioner: alicloud/disk
    parameters:
      type: cloud_ssd
      regionId: cn-hangzhou
      zoneId: cn-hangzhou-b
    reclaimPolicy: Retain  # デフォルトは Delete です。偶発的なデータ損失を防ぐために Retain に設定します。

    以下の表でパラメーターについて説明します。

    パラメーター 説明 必須 デフォルト
    provisioner ディスクをプロビジョニングするためのボリュームプラグインです。alicloud/disk に設定します。 はい
    type ディスクタイプです。有効な値:cloud_efficiency (Ultra ディスク)、cloud_ssd (標準 SSD)、cloud_essd (ESSD)、available (利用可能な最適なタイプを自動的に選択する高可用性モード)。 はい
    regionId ディスクが作成されるリージョンです。 はい
    zoneId ディスクが作成されるゾーンです。マルチゾーンクラスターの場合、cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c のように、複数のゾーンをカンマで区切って指定します。 はい
    reclaimPolicy PVC が削除されたときにディスクを再利用するためのポリシーです。Retain はディスクを保持し、Delete は削除します。データ損失を防ぐために Retain に設定します。 いいえ Delete
    encrypted ディスクを暗号化するかどうか。 いいえ false
  2. StorageClass を適用します。

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

    kubectl get storageclass alicloud-disk-ssd-hangzhou-b

    出力には、プロビジョナーとして alicloud/disk を持つ StorageClass が表示されるはずです。

WaitForFirstConsumer モードでの StorageClass の作成

マルチゾーンクラスターでは、Pod がスケジューリングされる前に PV がプロビジョニングされることがあり、その結果、ディスクが Pod の最終的な実行場所とは異なるゾーンに配置されることがあります。その場合、Pod は別のゾーンのディスクをアタッチできないため、起動に失敗します。WaitForFirstConsumer モードは、消費する Pod がスケジューリングされるまでディスクのプロビジョニングを遅延させることでこの問題を解決し、ディスクが常に Pod と同じゾーンに作成されるようにします。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-topology-ssd
provisioner: alicloud/disk
parameters:
  type: cloud_ssd
reclaimPolicy: Retain  # デフォルトは Delete です。
volumeBindingMode: WaitForFirstConsumer

StorageClass を適用します。

kubectl apply -f storage-class-topology.yaml

ゾーン選択の仕組み — 次の表は、StorageClass 構成に基づいたディスク配置の動作をまとめたものです。

構成 ディスク配置
zoneId なし、WaitForFirstConsumer Disk-Controller コンポーネントがデプロイされているゾーン
zoneId が設定されている、WaitForFirstConsumer 指定されたゾーン (ラウンドロビンで選択)
WaitForFirstConsumer が有効 消費する Pod がスケジューリングされるノードのゾーン

PVC と Pod の作成

以下のマニフェストは、alicloud-disk-ssd-hangzhou-b StorageClass に裏付けられた PVC と、そのディスクをマウントする Pod を作成します。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: disk-ssd
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: alicloud-disk-ssd-hangzhou-b
  resources:
    requests:
      storage: 20Gi
---
kind: Pod
apiVersion: v1
metadata:
  name: disk-pod-ssd
spec:
  containers:
  - name: disk-pod
    image: nginx
    volumeMounts:
      - name: disk-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: disk-pvc
      persistentVolumeClaim:
        claimName: disk-ssd

マニフェストを適用します。

kubectl apply -f pvc-pod.yaml

PVC がバインドされ、Pod が実行中であることを確認します。

kubectl get pvc disk-ssd
kubectl get pod disk-pod-ssd

正常にバインドされた PVC は STATUS: Bound と表示されます。実行中の Pod は STATUS: Running と表示されます。

マルチインスタンス StatefulSet の作成

volumeClaimTemplates を使用して、各 StatefulSet レプリカに対して個別の PVC と PV を動的に作成します。次の例では、レプリカごとに 20 GiB のディスクを持つ 2 レプリカの nginx StatefulSet を作成します。

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: disk-ssd
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: disk-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd-hangzhou-b"
      resources:
        requests:
          storage: 20Gi

マニフェストを適用します。

kubectl apply -f statefulset.yaml

StatefulSet、Pod、および PVC がすべて作成されたことを確認します。

kubectl get statefulset web
kubectl get pods -l app=nginx
kubectl get pvc -l app=nginx

各 Pod (web-0web-1) は、それぞれ独立してプロビジョニングされたディスクに裏付けられた独自の PVC (disk-ssd-web-0disk-ssd-web-1) を取得します。

次のステップ