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

Container Service for Kubernetes:ストレージの基本

最終更新日:Mar 26, 2026

Container Service for Kubernetes (ACK) は、クラスター内で実行されるワークロードにマウント可能な複数のストレージバックエンド(クラウドディスク、File Storage NAS (NAS) ファイルシステム、Object Storage Service (OSS) バケット)をサポートしています。本トピックでは、永続ストレージを設定する前に理解しておくべきコアストレージ概念——ボリューム、永続ボリューム (PV)、永続ボリューム要求 (PVC)、およびストレージクラス (StorageClass) ——について説明します。

ボリューム

コンテナのファイルシステムは一時的です。コンテナ内に書き込まれたファイルは、コンテナが再起動すると失われます。Kubernetes では、この課題を解決するためにボリュームという抽象化概念が導入されています。ボリュームは Pod を外部ストレージに接続し、Pod の存続期間中はコンテナの再起動を経ても保持され、同一 Pod 内の複数コンテナ間や、Pod と外部環境との間で共有できます。

ACK では、以下のボリュームタイプをサポートしています:

タイプ説明
ローカルストレージhostPathemptyDir などのノードローカルボリュームです。データは特定のノードに紐づくため、そのノードが停止すると利用できなくなります。再スケジュールが発生する可能性のあるステートフルワークロードには不適切です。
ネットワークストレージCeph、GlusterFS、NFS、iSCSI などのリモートストレージボリュームです。データは特定のノードではなくリモートサービス上に保存されますが、ストレージサービスはローカルにマウントする必要があります。
Secret および ConfigMap認証情報や構成など、クラスター内のオブジェクトデータをファイルとして Pod に公開する特殊なボリュームです。
PVC永続ボリューム要求 (PVC) によって裏付けられたボリュームです。これは基盤となるストレージを独立したオブジェクトとして抽象化します。耐久性・移植性を要するワークロードには PVC を使用してください。

使用上の注意事項:

  • 1 つの Pod は複数のボリューム(異なるタイプを同時に含む)をマウントできます。

  • Pod にマウントされたボリュームは、その Pod 内のすべてのコンテナで共有されます。

  • ボリュームは Pod のライフサイクルと同期します。Pod 削除後に基盤となるデータが保持されるかどうかは、ボリュームの種類およびその構成に依存します。

  • 耐久性のあるデータには、PVC および PV を使用してください。

PV と PVC

Kubernetes のすべてのボリュームが永続的であるわけではありません。耐久性のあるストレージを実現するために、Kubernetes では「*ストレージのプロビジョニング方法*」と「*ストレージの消費方法*」を分離する 2 つのオブジェクトが導入されています:

  • 永続ボリューム (PersistentVolume: PV) は、クラスター内で事前にプロビジョニングされたストレージ領域です。PV をノードと同様に考えると理解しやすいでしょう。つまり、Pod がノードから CPU やメモリを消費するように、PVC が PV からストレージリソースを消費します。PV は、任意の Pod とは独立した独自のライフサイクルを持ちます。

  • 永続ボリューム要求 (PersistentVolumeClaim: PVC) は、ストレージの使用を要求するオブジェクトです。PVC を Pod と同様に考えると理解しやすいでしょう。つまり、Pod がノードから CPU やメモリを要求するように、PVC は PV からストレージ容量およびアクセスモードを要求します。

この分離により、アプリケーション開発者は必要なストレージ(PVC)を宣言するだけで済み、クラスター管理者はそのストレージの提供方法(PV)を管理できます。

PV の例

apiVersion: v1
kind: PersistentVolume
metadata:
  namespace: default
  name: pv-example
spec:
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: diskplugin.csi.alibabacloud.com
    volumeHandle: <disk ID>
  volumeMode: Filesystem

PVC の例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  volumeName: pv-example

バインドルール

PV と PVC は 1 対 1 の関係を持ちます。つまり、1 つの PV は 1 つの PVC にのみバインドされます。PVC を Pod で使用可能にするには、Kubernetes が以下のすべての条件を満たす PV を見つける必要があります:

フィールド要件
volumeModePVC の volumeMode と一致する必要があります
accessModesPVC が要求するアクセスモードを含む必要があります
storageClassNamePVC で指定されている場合、PV は同じストレージクラスを持つ必要があります
ラベルセレクターPV は PVC で定義されたラベルセレクターに一致する必要があります
storagePV の容量は、PVC が要求する容量以上である必要があります

storage フィールドの動作:

  • Kubernetes は storage を使用して PV と PVC のマッチングおよびバインドを行います。

  • 動的プロビジョニングでは、PVC の storage 値がプロビジョニングされる PV および基盤となるストレージリソース(例:クラウドディスク)の容量を決定します。

  • リサイズをサポートするストレージタイプでは、PVC の storage 値がスケールアウト後のターゲット容量を設定します。

  • storage は論理的な容量制限であり、実際の書き込みスループットは基盤となるストレージ媒体(storage フィールドとは無関係)に依存します。

ボリュームのアクセスモード

accessModes フィールドを使用して、ボリュームのマウント方法を定義します:

アクセスモード略称説明
ReadWriteOnceRWO単一ノードによる読み取り/書き込みAlibaba Cloud ディスク
ReadOnlyManyROX複数ノードによる読み取り専用OSS バケット
ReadWriteManyRWX複数ノードによる読み取り/書き込みNAS ファイルシステム

ボリュームのプロビジョニング方法

ACK では、静的プロビジョニングと動的プロビジョニングの 2 種類のプロビジョニングワークフローをサポートしています。

静的プロビジョニング

image

静的プロビジョニングでは、クラスター管理者が事前に PV を作成します。クラウドディスク、NAS ファイルシステム、OSS バケットを静的にプロビジョニングできます。

  1. 管理者が Pod のストレージ要件を分析し、ストレージリソース(例:クラウドディスクや NAS ファイルシステム)を事前に割り当てます。

  2. 管理者が、それらリソースの容量および構成を含む PV を作成します。

  3. 開発者が、ワークロードの要件を宣言する PVC を作成します。

  4. Pod が作成されると、Kubernetes が PVC を一致する PV にバインドし、Pod にストレージへのアクセスを付与します。

動的プロビジョニング

image

動的プロビジョニングでは、CSI プロビジョナーが PVC が提出された際に自動的に PV を作成します。クラウドディスク、NAS ファイルシステム、OSS バケットを動的にプロビジョニングできます。

  1. 管理者が、ストレージタイプおよびプロビジョナーを定義するストレージクラス (StorageClass) を作成します。たとえば、diskplugin.csi.alibabacloud.com はクラウドディスクをプロビジョニングします。

  2. 開発者が、ストレージクラスを参照する PVC を作成します。手動での PV 作成は不要です。

  3. Pod が作成されると、CSI プロビジョナーがストレージクラスを読み取り、PV および基盤となるストレージリソースを作成し、PV を PVC にバインドします。

動的プロビジョニングには、静的プロビジョニングに対する以下の 3 つの利点があります:

  • 自動化されたライフサイクル管理:プロビジョナーが PV の作成および削除を自動的に処理します。

  • 運用負荷の軽減:管理者は個別の PV ではなくストレージクラスを管理します。

  • 容量の一貫性:PV および基盤となるストレージリソースは、常に PVC が要求する容量に一致してプロビジョニングされます。

ストレージクラス

ストレージクラス (StorageClass) は、動的プロビジョニングで使用されるストレージタイプ、プロビジョナー、およびパラメーターを定義します。PVC がストレージクラスを参照し、一致する PV が存在しない場合、Kubernetes はプロビジョナーをトリガーして PV および基盤となるストレージを自動的に作成します。

ストレージクラスの例

以下の StorageClass は、Alibaba Cloud ディスクをプロビジョニングします。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-topology-alltype
provisioner: diskplugin.csi.alibabacloud.com
parameters:
  type: cloud_auto,cloud_essd,cloud_ssd,cloud_efficiency
  fstype: ext4
  diskTags/a: b
  encrypted: "false"
  performanceLevel: PL1
  provisionedIops: "40000"
  burstingEnabled: "false"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

主なパラメーター

パラメーター説明
provisionerストレージリソースを作成する CSI ドライバーです。diskplugin.csi.alibabacloud.com をクラウドディスク、nasplugin.csi.alibabacloud.com を NAS ファイルシステム、ossplugin.csi.alibabacloud.com を OSS バケットに使用します。
parametersディスクタイプ、ファイルシステムタイプ、パフォーマンス設定など、ドライバー固有のパラメーターです。
reclaimPolicyPVC が削除された際の PV および基盤となるストレージの処理方法です。Delete(デフォルト)では PV およびクラウドディスクの両方が削除されます。Retain では両方を保持し、手動で削除する必要があります。データセキュリティが最優先事項である場合は、Retain を設定してください。
allowVolumeExpansiontrue を設定すると、オンラインディスク拡張が有効になります。
volumeBindingModePV が作成されるタイミングです。下記の表をご参照ください。

volumeBindingMode の選択:

モードPV の作成タイミング推奨される用途
Immediate(デフォルト)PVC 作成時(Pod のスケジュール前)シングルゾーンクラスター
WaitForFirstConsumerPVC を使用する Pod がノードにスケジュールされた後マルチゾーンクラスター

マルチゾーンクラスターでは WaitForFirstConsumer を使用してください。クラウドディスクはゾーンを跨いでマウントできません。PV がゾーン A でプロビジョニングされたにもかかわらず Pod がゾーン B にスケジュールされた場合、Pod は起動に失敗します。WaitForFirstConsumer を使用すると、プロビジョナーは Pod のスケジュールを待ってから、Pod が実行されるゾーンにディスクを作成します。

WaitForFirstConsumer の動作:

PVC が作成されても、プロビジョナーは即座に PV を作成しません。代わりに、PVC を使用する Pod がスケジュールされるまで待ちます。スケジューラが Pod をノードに配置すると、そのスケジューリング結果(リージョンおよびノード)が PVC のメタデータに書き込まれます。プロビジョナーはこの情報を読み取り、正しいゾーンに PV および基盤となるディスクを作成します。

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

Kubernetes では、ストレージクラス名を指定しない PVC に対して自動的に PV をプロビジョニングするデフォルトのストレージクラスをサポートしています。

重要

ACK クラスターでは、初期状態でデフォルトのストレージクラスは設定されていません。デフォルトのストレージクラスは、storageClassName を省略したすべてのPVC に適用されます。クラスターで複数のストレージタイプを使用している場合、デフォルトのストレージクラスが PVC に対して誤ったストレージタイプをプロビジョニングする可能性があります。すべての PVC が同じストレージタイプを使用する場合にのみ有効化してください。

デフォルトのストレージクラスを設定する:

以下のコマンドを実行して、alicloud-disk-topology-alltype をデフォルトとしてマークします:

kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=true

変更を確認する:

kubectl get sc

期待される出力:

NAME                                        PROVISIONER                       AGE
alicloud-disk-topology-alltype (default)    diskplugin.csi.alibabacloud.com   96m

ストレージクラスを指定せずに PVC を作成する:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: disk-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

クラスターは、alicloud-disk-topology-alltype を使用してクラウドディスクの PV を自動的に作成します。

kubectl get pvc

期待される出力:

NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES    STORAGECLASS                      AGE
disk-pvc   Bound    d-bp18pbai447qverm****   20Gi       RWO             alicloud-disk-topology-alltype    49s

デフォルトのストレージクラスを解除する:

kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-

ACK が提供するストレージクラス

ストレージクラスディスクタイプ備考
alicloud-disk-efficiencyUltra ディスク旧世代のクラウドディスク
alicloud-disk-ssd標準 SSD旧世代のクラウドディスク
alicloud-disk-essdESSDパフォーマンスレベル 1 (PL1) のエンタープライズ SSD
alicloud-disk-topology-alltypeマルチタイプESSD を最初に試行し、次に標準 SSD、最後に Ultra ディスクを試行します。マルチゾーンクラスターに推奨されます。
alibabacloud-cnfs-nasNAS(Container Network File System)コンテナネットワークファイルシステム (CNFS) で管理される NAS ボリュームを作成します。

alicloud-disk-topology-alltype ストレージクラスは、プロビジョニング時に利用可能な最適なディスクタイプを選択します:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-disk-topology-alltype
parameters:
  type: cloud_essd,cloud_ssd,cloud_efficiency
provisioner: diskplugin.csi.alibabacloud.com
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

次のステップ

利用可能なストレージオプションの完全な一覧および操作手順については、「ストレージ」をご参照ください。

特定のストレージタイプのプロビジョニング手順については、以下をご参照ください: