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

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

最終更新日:Aug 29, 2026

Kubernetes は、どのクラウドディスクをワークロードにプロビジョニングするかを自動的に判断しません。ディスクタイプとゾーンの優先設定を対応付けるストレージクラスを定義し、それを PersistentVolumeClaim (PVC) で参照する必要があります。PVC が作成されると、Disk-Controller はディスクを自動的にプロビジョニングし、PersistentVolume (PV) としてバインドします。

前提条件

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

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

  • クラスター内でストレージクラスと PersistentVolumeClaim (PVC) リソースを作成する権限

デフォルトのストレージクラス

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

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

ストレージクラスの作成

クラスターの設定に基づいてストレージクラスのタイプを選択します:

ゾーン ID を指定したストレージクラスの作成

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

  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 (ウルトラディスク)、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. ストレージクラスを適用します:

    kubectl apply -f storage-class.yaml
  3. ストレージクラスが作成されたことを確認します:

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

    出力には、プロビジョナーとして alicloud/disk を持つストレージクラスが表示されます。

WaitForFirstConsumer モードでのストレージクラスの作成

マルチゾーンクラスターでは、Pod がスケジューリングされる前に PersistentVolume (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

ストレージクラスを適用します:

kubectl apply -f storage-class-topology.yaml

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

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

PersistentVolumeClaim (PVC) と Pod の作成

以下のマニフェストは、alicloud-disk-ssd-hangzhou-b ストレージクラスを使用する PersistentVolumeClaim (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

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

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

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

複数インスタンスの StatefulSet の作成

volumeClaimTemplates を使用して、StatefulSet の各レプリカに対して個別の PersistentVolumeClaim (PVC) と PersistentVolume (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、PersistentVolumeClaim (PVC) がすべて作成されたことを確認します:

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

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

次のステップ