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

Container Service for Kubernetes:動的にプロビジョニングされたディスクボリュームを使用して永続ストレージを実現する

最終更新日:Dec 10, 2025

動的ボリュームプロビジョニングは、アプリケーションのレプリカごとに独立したディスクを自動的に作成し、マウントします。この方法は、高い I/O と低レイテンシーを必要とするデータベース、ミドルウェア、その他のアプリケーションに最適です。また、ストレージのライフサイクル管理も簡素化されます。

仕組み

以下のプロセスは、StatefulSet で動的にプロビジョニングされたディスクボリュームを使用する方法を説明しています。

  1. テンプレートの定義
    新しい StorageClass を作成するか、デフォルトの StorageClass を動的ディスク作成のテンプレートとして使用できます。このテンプレートは、ディスクタイプ、パフォーマンスレベル、リクラメーションポリシーなどの主要なパラメーターを定義します。

  2. アプリケーションでのストレージ要件の宣言

    StatefulSet で volumeClaimTemplates を定義し、StorageClass を参照します。これにより、Pod が使用する永続ボリューム要求 (PVC) の仕様 (ストレージ容量やアクセスモードなど) を宣言します。

  3. ボリュームの作成とマウントの自動化
    StatefulSet が Pod を作成すると、システムはテンプレートに基づいて Pod ごとに一意の PVC を自動的に生成します。Container Storage Interface (CSI) コンポーネントは、StorageClass のルールに基づいて永続ボリューム (PV) を作成し、PV を PVC にバインドします。最後に、ディスクが Pod にマウントされます。

適用範囲

  • ゾーンの制限:リージョン企業向け SSD (ESSD) を除き、他のディスクタイプはゾーンをまたいでマウントすることはできません。同じゾーン内の Pod にのみマウントできます。

  • インスタンスファミリーの制限:一部のディスクタイプは、特定のインスタンスファミリーにのみアタッチできます。

  • CSI コンポーネントの制限:csi-plugin および csi-provisioner コンポーネントがインストールされている必要があります。

    CSI コンポーネントはデフォルトでインストールされています。手動でアンインストールしていないことを確認してください。インストール状況は [アドオン] ページで確認できます。CSI コンポーネントを最新バージョンにアップグレードすることを推奨します。
  • 仮想ノードの制限:仮想ノードでディスクを使用するには、特定のクラスターバージョンと kube-scheduler バージョンの要件を満たす必要があります。

    クリックしてバージョン要件を表示

    クラスターバージョン

    kube-scheduler バージョン

    1.28 以降

    6.9.3 以降

    1.26

    6.8.7

    1.24

    6.4.7

    1.22

    6.4.5

ステップ 1:StorageClass の選択

Container Service for Kubernetes (ACK) は、複数のデフォルト StorageClass を提供します。StorageClass は作成後に変更できません。デフォルトの構成が要件を満たさない場合は、新しいものを作成できます。詳細については、「手動での StorageClass の作成」をご参照ください。

デフォルト StorageClass の使用

以下のデフォルト StorageClass のいずれかを選択し、その名前をアプリケーションの storageClassName フィールドで参照します。

StorageClass 名

動的に作成されるディスクタイプ

alicloud-disk-topology-alltype (推奨)

デフォルトでは、ゾーンの不一致によるマウント失敗を防ぐため、ディスクが作成される前に Pod がスケジュールされます (volumeBindingMode: WaitForFirstConsumer)。システムは、Pod がスケジュールされたノードのゾーンとインスタンスタイプ、およびディスクの在庫状況に基づいて、ESSD、標準 SSD、Ultra ディスクの順でディスクの作成を試みます。デフォルトでは、最小容量 20 GiB の PL1 ESSD の作成が優先されます。

alicloud-disk-essd

企業向け SSD (ESSD)。デフォルトのパフォーマンスレベルは PL1 で、最小ディスク容量は 20 GiB です。

重要

CloudBox の ESSD は PL0 パフォーマンスレベルのみをサポートします。手動で StorageClass を作成し、performanceLevelPL0 に指定する必要があります。

alicloud-disk-ssd

標準 SSD。最小ディスク容量は 20 GiB です。

alicloud-disk-efficiency

Ultra ディスク。最小ディスク容量は 20 GiB です。

kubectl describe sc <storageclass-name> コマンドを実行して、StorageClass の詳細な構成を表示します。

手動での StorageClass の作成

kubectl

  1. disk-sc.yaml という名前のファイルを作成します。

    次の例は、volumeBindingMode: WaitForFirstConsumer を使用して PV のバインドを遅延させる StorageClass を示しています。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      # StorageClass の名前
      name: alicloud-disk-wait-for-first-consumer
    # ドライバーのタイプ。Alibaba Cloud ディスク CSI プラグインを使用する場合、この値は固定です。
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      # ディスクタイプ。システムは優先順位に基づいてタイプを選択します。
      type: cloud_auto,cloud_essd,cloud_ssd  
      # ファイルシステムのタイプ
      fstype: ext4
      diskTags: "a:b,b:c"
      encrypted: "false"
      # ESSD のパフォーマンスレベル
      performanceLevel: PL1 
      provisionedIops: "40000"
      burstingEnabled: "false"
    # バインドモード。マルチゾーンシナリオでは WaitForFirstConsumer の使用を推奨します。
    volumeBindingMode: WaitForFirstConsumer
    # リクラメーションポリシー
    reclaimPolicy: Retain
    # ボリューム拡張を許可するかどうかを指定します
    allowVolumeExpansion: true
    # トポロジー制約:指定されたゾーンにディスク作成を制限します
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.diskplugin.csi.alibabacloud.com/zone
        values:
        # 実際のゾーンに置き換えてください
        - cn-hangzhou-i
        - cn-hangzhou-k

    次の表に、主要なパラメーターを説明します。

    パラメーター

    説明

    provisioner

    ドライバーのタイプ。これは必須パラメーターです。Alibaba Cloud ディスク CSI プラグインを使用する場合、値は diskplugin.csi.alibabacloud.com に固定されます。

    parameters

    type

    ディスクタイプ。これは必須パラメーターです。有効な値:

    これらの値を任意に組み合わせて指定できます。例:type: cloud_ssd,cloud_essd,cloud_auto。システムは指定された順序でディスクの作成を試みます。最終的なディスクタイプは、ノードインスタンスやゾーンでサポートされているディスクタイプなどの要因によって決まります。

    resourceGroupId

    ディスクが属するリソースグループ。デフォルト値は "" です。

    regionId

    ディスクが配置されるリージョン。クラスターのリージョンと同じである必要があります。

    fstype

    ディスクが使用するファイルシステム。有効な値:ext4 (デフォルト) と xfs

    mkfsOptions

    ディスクをフォーマットするためのパラメーター。例:mkfsOptions: "-O project,quota"

    diskTags

    ディスクのタグ。例:diskTags: "a:b,b:c"diskTags/a: b 形式でタグを指定することもできます。CSI コンポーネントは v1.30.3 以降である必要があります。

    encrypted

    ディスクを暗号化するかどうかを指定します。デフォルト値は false で、ディスクは暗号化されません。

    performanceLevel

    ESSD パフォーマンスレベル。有効な値は PL0PL1 (デフォルト)、PL2、または PL3 です。

    CloudBox と一緒に使用する場合、これは PL0 に設定する必要があります。

    volumeExpandAutoSnapshot [非推奨]

    このパラメーターは CSI v1.31.4 以降非推奨になりました。

    provisionedIops

    ESSD AutoPL ディスクを使用する際に、ディスクのプロビジョニング済みパフォーマンス (IOPS) を構成するために使用します。

    burstingEnabled

    ESSD AutoPL ディスクのバースト (パフォーマンスバースト) を有効にするかどうかを指定します。デフォルト値は false で、パフォーマンスバーストを無効にします。

    multiAttach

    ディスクのマルチアタッチ機能を有効にするかどうかを指定します。デフォルトは false (無効) です。

    volumeBindingMode

    ディスクのバインドモード。有効な値:

    • Immediate (デフォルト):Pod を作成する前にディスクを作成します。

    • WaitForFirstConsumer:バインドを遅延させます。Pod が最初にスケジュールされ、その後、Pod と同じゾーンにディスクが作成されます。

      マルチゾーンシナリオでは、ディスクと ECS ノードが異なるゾーンにあることによるマウント失敗を防ぐために、WaitForFirstConsumer の使用を推奨します。

      特定のスケジューリング方法を使用したり、特定の Annotation を追加したりして Pod を仮想ノードにスケジュールする場合、WaitForFirstConsumer タイプの StorageClass は使用できません。詳細については、「マウントされたディスクを持つ Pod が仮想ノードにスケジュールされたときに、PVC が Pending 状態のままになる場合の対処法」をご参照ください。

    reclaimPolicy

    ディスクのリクラメーションポリシー。

    • Delete (デフォルト):PVC が削除されると、PV とディスクも削除されます。

    • Retain:PVC が削除されても、PV とディスクデータは削除されません。手動で削除する必要があります。

      データセキュリティが最優先事項である場合は、偶発的なデータ削除を防ぐために Retain の使用を推奨します。

    allowVolumeExpansion

    true に設定すると、サービスを中断することなくディスクボリュームを拡張できます。

    allowedTopologies

    特定のトポロジードメインにディスク作成を制限します。

    • key:トポロジードメインのラベル。以下の値がサポートされています:

      • topology.diskplugin.csi.alibabacloud.com/zone:Alibaba Cloud CSI プラグインが提供する専用のトポロジー key

      • alibabacloud.com/ecs-instance-id:エラスティックエフェメラルディスクを使用する場合、ノードを指定できます。

    • values:ゾーンまたはノード ID を含むリスト。

  2. 次のコマンドを実行して StorageClass を作成します。

    kubectl create -f disk-sc.yaml
  3. 次のコマンドを実行して StorageClass を表示します。

    kubectl get sc

    出力は、StorageClass が作成され、WaitForFirstConsumer バインドモードであることを示しています。

    NAME                                    PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-disk-wait-for-first-consumer   diskplugin.csi.alibabacloud.com   Retain          WaitForFirstConsumer   true                   10s

コンソール

  1. [クラスター] ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ストレージ] > [StorageClass] を選択します。

  2. [作成] をクリックし、PV タイプとして [クラウドディスク] を選択し、パラメーターを設定して [OK] をクリックします。

    パラメーター

    説明

    パラメーター

    • デフォルトパラメーター:type

      ディスクタイプ。これは必須パラメーターです。有効な値:

      これらの値を任意に組み合わせて指定できます。例:type: cloud_ssd,cloud_essd,cloud_auto。システムは指定された順序でディスクの作成を試みます。最終的なディスクタイプは、ノードインスタンスやゾーンでサポートされているディスクタイプなどの要因によって決まります。

    • クリックしてオプションのパラメーターを表示

      • resourceGroupIdディスクが属するリソースグループ。デフォルト値は "" です。

      • regionIdディスクが配置されるリージョン。クラスターのリージョンと同じである必要があります。

      • fstypeディスクが使用するファイルシステム。有効な値:ext4 (デフォルト) と xfs

      • mkfsOptionsディスクをフォーマットするためのパラメーター。例:mkfsOptions: "-O project,quota"

      • diskTagsディスクのタグ。例:diskTags: "a:b,b:c"diskTags/a: b 形式でタグを指定することもできます。CSI コンポーネントは v1.30.3 以降である必要があります。

      • encryptedディスクを暗号化するかどうかを指定します。デフォルト値は false で、ディスクは暗号化されません。

      • performanceLevelESSD パフォーマンスレベル。有効な値:PL0PL1 (デフォルト)、PL2、または PL3

        CloudBox と一緒に使用する場合、これは PL0 に設定する必要があります。
      • provisionedIopsESSD AutoPL ディスクのプロビジョニング済みパフォーマンス (IOPS) を指定します。

      • burstingEnabledESSD AutoPL ディスクのバースト (パフォーマンスバースト) を有効にするかどうかを指定します。デフォルト値は false です。

      • multiAttachディスクのマルチアタッチ機能を有効にするかどうかを指定します。デフォルト値は false です。

    回収ポリシー

    ディスクのリクラメーションポリシー。

    • Delete (デフォルト):PVC が削除されると、PV とディスクも削除されます。

    • Retain:PVC が削除されても、PV とディスクデータは削除されません。手動で削除する必要があります。

      データセキュリティが最優先事項である場合は、偶発的なデータ削除を防ぐために Retain の使用を推奨します。

    バインディングモード

    ディスクのバインドモード。有効な値:

    • Immediate (デフォルト):Pod を作成する前にディスクを作成します。

    • WaitForFirstConsumer:バインドを遅延させます。Pod が最初にスケジュールされ、その後、Pod と同じゾーンにディスクが作成されます。

      マルチゾーンシナリオでは、ディスクと ECS ノードが異なるゾーンにあることによるマウント失敗を防ぐために、WaitForFirstConsumer の使用を推奨します。

      特定のスケジューリング方法を使用したり、特定の Annotation を追加したりして Pod を仮想ノードにスケジュールする場合、WaitForFirstConsumer タイプの StorageClass は使用できません。詳細については、「マウントされたディスクを持つ Pod が仮想ノードにスケジュールされたときに、PVC が Pending 状態のままになる場合の対処法」をご参照ください。

    StorageClass が作成された後、[StorageClass] ページで表示できます。

ステップ 2:アプリケーションの作成とディスクのマウント

このセクションでは、StatefulSet を例に、ディスクボリュームをマウントする方法を説明します。

重要

ディスクは非共有ストレージです。マルチアタッチが有効になっていない場合、ディスクは一度に 1 つの Pod にしかマウントできません。複数レプリカのデプロイメントで PVC を共有すると、既存の Pod が使用中のディスクをマウントできないため、新しい Pod は失敗します。StatefulSet を使用するか、Pod ごとに個別のディスクをマウントすることを推奨します。

Deployment でクラウドディスクを使用するには、クラウドディスクを一時ストレージボリュームとして使用することを推奨します。マルチアタッチを有効にするには、「マルチアタッチと予約機能付き NVMe クラウドディスクの使用」をご参照ください。

  1. statefulset.yaml という名前のファイルを作成します。

    次の例では、2 つの Pod を持つ StatefulSet を作成します。volumeClaimTemplates を使用して、各 Pod に独立した永続ストレージを自動的に作成し、バインドします。
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          # マウントパフォーマンスを最適化するために、以下の securityContext を設定することを推奨します
          securityContext:
            fsGroup: 1000
            fsGroupChangePolicy: "OnRootMismatch"
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            # データボリュームをコンテナーの /data ディレクトリにマウントします
            # 名前は volumeClaimTemplates で定義された metadata.name と同じである必要があります
            - name: pvc-disk
              mountPath: /data
      # PVC テンプレートを定義します
      volumeClaimTemplates:
      - metadata:
          name: pvc-disk
        spec:
          # アクセスモード
          accessModes: [ "ReadWriteOnce" ]
          # 事前に作成した StorageClass を関連付けます
          storageClassName: "alicloud-disk-wait-for-first-consumer"
          resources:
            requests:
              # 要求されたストレージ容量、つまりディスクサイズ
              storage: 20Gi
    重要

    Pod で securityContext.fsgroup を設定すると、ボリュームがマウントされるときに kubelet が再帰的にファイルの権限を変更 (chmod/chown) します。ボリュームに多数のファイルが含まれている場合、このプロセスはマウント時間を大幅に増加させます。

    Kubernetes 1.20 以降を実行しているクラスターでは、fsGroupChangePolicyOnRootMismatch に設定することを推奨します。この設定は、ボリュームのルートディレクトリの権限が必要な権限と一致しない場合にのみ、最初のマウント時に再帰的な権限変更を実行します。これにより、マウントパフォーマンスが最適化されます。パフォーマンスがまだ要件を満たさない場合や、より詳細な権限制御が必要な場合は、メインのアプリケーションコンテナーが開始する前に initContainer を使用して権限調整コマンドを実行することを推奨します。

  2. 次のコマンドを実行して StatefulSet を作成します。

    kubectl create -f statefulset.yaml
  3. 次のコマンドを実行して、Pod が Running 状態であることを確認します。

    kubectl get pod -l app=nginx
  4. 次のコマンドを実行してマウントパスを確認し、ディスクがマウントされていることを確認します。

    この例では、Pod 名は web-1 です。実際の Pod 名に置き換えてください。
    kubectl exec web-1 -- df -h /data

    次の出力が期待されます:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb         20G   24K   20G   1% /data

ステップ 3:Pod 障害のシミュレーションと永続ストレージの検証

ディスクに保存されたデータが Pod の再作成後も永続化されることを確認するために、Pod にデータを書き込み、Pod を削除してから、データが残っているかどうかを確認できます。

  1. Pod にテストデータを書き込みます。

    Pod web-1 について、マウントされたディスクパス /datatest ファイルを作成します。

    kubectl exec web-1 -- touch /data/test
    kubectl exec web-1 -- ls /data

    期待される出力:

    lost+found
    test
  2. Pod を削除して Pod 障害をシミュレートします。

    kubectl delete pod web-1

    kubectl get pod -l app=nginx を再度実行します。web-1 という名前の新しい Pod が自動的に作成されます。

  3. 新しい Pod のデータを確認します。

    新しい Pod web-1/data フォルダを再度確認します。

    kubectl exec web-1 -- ls /data

    期待される出力は、test ファイルがまだ存在することを示しています。これにより、Pod が削除されて再作成された後もデータが永続的に保存されることが確認されます。

    lost+found
    test

本番運用時の注意点

  • 高可用性

    • ディスクの選択

      ディスクのパフォーマンス課金方法、ノードのゾーン、およびインスタンスファミリーを評価します。これにより、Pod が互換性のあるノードにスケジュールされることが保証されます。

      ディスクタイプを選択する際、標準 SSD と Ultra ディスクは段階的に廃止されていることに注意してください。Ultra ディスクの代わりに PL0 ESSD または ESSD Entry ディスクを使用し、標準 SSD の代わりに ESSD AutoPL ディスクを使用することを推奨します。

    • クロスゾーンディザスタリカバリソリューションの構築

      • アプリケーションレベルのディザスタリカバリ:データベースなどの重要なサービスについては、複数のゾーンにアプリケーションインスタンスをデプロイします。アプリケーションのデータ同期メカニズムを使用して高可用性を実現します。

      • ストレージレベルのディザスタリカバリ:マルチゾーンディザスタリカバリをサポートするディスクタイプを選択します。同じリージョン内の異なるゾーンにリアルタイムでデータを書き込むことで、クロスゾーンの障害回復を可能にします。詳細については、「リージョン企業向け SSD (ESSD) の使用」をご参照ください。

  • データセキュリティとバックアップ

    • 偶発的なデータ削除の防止:

      データの損失を防ぐには、StorageClass の reclaimPolicyRetain に設定します。PVC が削除されても、バックエンドのディスクは削除されません。これにより、データ復元が簡素化されます。

    • 定期的なバックアップ

      動的ボリュームはリソースのプロビジョニングを簡素化しますが、データバックアップの代わりにはなりません。コアサービスについては、バックアップセンターを使用してデータのバックアップと復元を行います。

    • 保存時暗号化の有効化:機密データを含むアプリケーションについては、StorageClass で encrypted: "true" を設定してディスクを暗号化します。

  • パフォーマンスとコストの最適化

    • 並列アタッチの有効化

      デフォルトでは、単一ノードでのディスク操作はシリアルです。並列ディスクアタッチを使用して、Pod の起動を高速化します。

    • オンラインボリューム拡張の有効化

      StorageClass で allowVolumeExpansion: true を設定します。これにより、ストレージのニーズが増加した場合にオンラインでディスクボリュームを拡張できます。

    • ストレージ監視とアラートの設定

      コンテナーストレージ監視に基づいてアラートを設定し、ボリュームの異常やパフォーマンスボトルネックを迅速に検出します。

課金

StorageClass を使用して動的に作成されたディスクは、従量課金制で課金されます。詳細については、「Elastic Block Storage の課金」および「Elastic Block Storage の料金」をご参照ください。

よくある質問

マウントされたディスクを持つ Pod が仮想ノードにスケジュールされたときに、PVC が Pending 状態のままになる場合の対処法

この問題は、仮想ノードへのスケジューリングをサポートしていない StorageClass を使用した場合に発生する可能性があります。特定のラベルやアノテーションを使用して Pod を仮想ノードにスケジュールする場合、volumeBindingMode: WaitForFirstConsumer モードの StorageClass はサポートされません。

  • 理由:
    WaitForFirstConsumer モードは、kube-scheduler が Pod の物理ノードを選択することに依存しています。これにより Pod のゾーンが決定され、そのゾーンを使用してディスクが作成されます。しかし、仮想ノードの一部のスケジューリングメカニズムはこのプロセスに従いません。これにより、Container Storage Interface (CSI) はゾーン情報を取得できません。その結果、PV を作成できず、PVC は Pending 状態のままになります。

  • この問題が発生した場合は、Pod またはその名前空間に次のいずれかの構成が含まれているかどうかを確認してください:

    • ラベル:

      • alibabacloud.com/eci: "true":Pod を ECI Pod にスケジュールします。

      • alibabacloud.com/acs: "true":Pod を ACS Pod にスケジュールします。

    • ノード指定:

      • Pod が spec.nodeName を使用して直接ノードを指定している。ノード名のプレフィックスが virtual-kubelet である。

    • アノテーション:

      • k8s.aliyun.com/eci-vswitch:ECI Pod の vSwitch を指定します。

      • k8s.aliyun.com/eci-fail-strategy: "fail-fast":ECI Pod の障害処理ポリシーを fail-fast に設定します。

単一の Pod または単一レプリカの Deployment にディスクボリュームをマウントする方法

複数レプリカのスケーリングや安定したネットワーク ID を必要としない単純なアプリケーションの場合、手動で PVC を作成し、それを Pod または Deployment にマウントして永続ストレージを有効にします。

プロセスは次のとおりです:StorageClass を選択し、PVC を作成し、アプリケーションで PVC をマウントします。

  1. StorageClass を準備します

  2. PVC を作成してストレージリソースを要求します。

    kubectl

    1. disk-pvc.yaml という名前のファイルを作成します。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-pvc
      spec:
        # アクセスモード
        accessModes:
        - ReadWriteOnce
        volumeMode: Filesystem
        resources:
          requests:
            # 要求されたストレージ容量、つまりディスクサイズ
            storage: 20Gi
        # 事前に作成した StorageClass に関連付けます
        storageClassName: alicloud-disk-topology-alltype 

      次の表にパラメーターを説明します。

      パラメーター

      説明

      accessModes

      ボリュームのアクセスモード。有効な値:ReadWriteOnceReadOnlyMany、または ReadWriteMany。サポートされる値は、StorageClass の multiAttach 設定と PVC の volumeMode 設定によって異なります。

      multiAttach は、ディスクのマルチアタッチを有効にするかどうかを指定します。デフォルト値は false です。
      • multiAttachfalse で、volumeMode が任意の値に設定されている場合、ReadWriteOnce のみがサポートされます。

      • multiAttachtrue で、volumeModeFilesystem の場合、ReadWriteOnceReadOnlyMany のみがサポートされます。

      • multiAttachtrue で、volumeModeBlock の場合、3 つすべてのアクセスモードがサポートされます。

      重要

      このシナリオでは、アクセスモードは通常 ReadWriteOnce (RWO) であり、ボリュームは一度に 1 つの Pod によってのみマウントできることを意味します。したがって、デプロイメントのレプリカ数は 1 を超えることはできません。デプロイメントをスケールアウトしようとすると、新しい Pod はすでに使用中のディスクをマウントできないため、Pending 状態のままになります。

      volumeMode

      永続ボリュームのモード。有効な値:

      • Filesystem (デフォルト):ボリュームはフォーマットされ、ディレクトリとしてマウントされます。

      • Block:ボリュームはフォーマットされていないブロックデバイスとして Pod に提供されます。

      storage

      要求されたストレージ容量。異なるディスクタイプで容量範囲は異なります。storage の値が、参照される StorageClass に対応するディスクタイプの容量制限に準拠していることを確認して、ディスク作成の失敗を防ぎます。

      storageClassName

      バインドする StorageClass。

    2. PVC を作成します。

      kubectl create -f disk-pvc.yaml
    3. PVC を表示します。

      kubectl get pvc

      出力では、StorageClass が WaitForFirstConsumer モードを使用しているため、PVC はそれを使用する最初の Pod が正常にスケジュールされるまで Pending 状態になります。

      NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS                            VOLUMEATTRIBUTESCLASS   AGE
      disk-pvc   Pending                                      alicloud-disk-wait-for-first-consumer   <unset>                 14s

    コンソール

    1. クラスター管理ページの左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。

    2. [永続ボリューム要求] ページで、[作成] をクリックします。[PVC タイプ][クラウドディスク] に設定し、プロンプトに従ってパラメーターを設定します。

      パラメーター

      説明

      割り当てモード

      [StorageClass を使用] を選択します。

      既存のストレージクラス

      デフォルトまたは手動で作成された StorageClass。

      容量

      要求されたストレージ容量。異なるディスクタイプで容量範囲は異なります。storage の値が、参照される StorageClass に対応するディスクタイプの容量制限に準拠していることを確認して、ディスク作成の失敗を防ぎます。

      アクセスモード

      [ReadWriteOnce] のみがサポートされています。これは、ボリュームが単一の Pod によって読み書き可能としてマウントできることを意味します。

      PVC が作成された後、[永続ボリューム要求] ページで表示できます。

  3. アプリケーションで PVC をマウントします。

    1. disk-deployment.yaml という名前のファイルを作成します。

      クリックしてサンプル YAML ファイルを表示

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: single-pod-app
      spec:
        # レプリカ数が 1 であることを確認します
        replicas: 1
        selector:
          matchLabels:
            app: nginx-single
        template:
          metadata:
            labels:
              app: nginx-single
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              # コンテナー内のマウントポイントを定義します
              volumeMounts:
              - name: my-persistent-storage  # 以下の volumes で定義された名前と一致する必要があります
                mountPath: /data  # コンテナーの /data ディレクトリにマウントします
            # Pod レベルで PVC を宣言し、参照します
            volumes:
            - name: my-persistent-storage # コンテナーによって参照されるボリューム
              persistentVolumeClaim:
                claimName: disk-pvc # 事前に作成した PVC を参照します
    2. 次のコマンドを実行してデプロイメントをデプロイします。

      kubectl create -f disk-deployment.yaml
  4. マウント結果を確認します。

    1. Pod が正しく実行されていることを確認します。

      kubectl get pods -l app=nginx-single
    2. Pod にログインし、ディスクが /data ディレクトリにマウントされているかどうかを確認します。

      # Pod 名を取得します
      POD_NAME=$(kubectl get pods -l app=nginx-single -o jsonpath='{.items[0].metadata.name}')
      
      # df -h コマンドを実行します
      kubectl exec $POD_NAME -- df -h /data

      次の出力は、20 GiB のディスクが正常にマウントされたことを示しています。

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vdb         20G   24K   20G   1% /data

関連ドキュメント