ボリューム拡張の使用


Google Kubernetes Engine(GKE)バージョン 1.24 以降では、Kubernetes ボリューム拡張機能を使用して、永続ボリュームの作成後に容量を変更できます。

ボリューム拡張の詳細については、オープンソースの Kubernetes ドキュメントをご覧ください。

前提条件

ボリューム拡張には次の前提条件があります。

  • サイズを変更するボリュームが CSI ドライバによって管理されている場合:
    • GKE クラスタのバージョンが 1.16 以上であることを確認します。クラスタに Windows ノードプールがある場合は、GKE クラスタのバージョンが 1.18 以降であることを確認します。マネージド GKE Filestore CSI ドライバを使用している場合は、クラスタのバージョンが 1.21 以降である必要があります。
    • ストレージ ベンダーのドキュメントで、CSI ドライバがボリューム拡張をサポートしていることを確認します。Compute Engine Persistent Disk の CSI ドライバと Filestore CSI ドライバは、ボリューム拡張をサポートしています。
  • サイズを変更するボリュームがツリー内ボリューム プラグインによって管理されている場合:
    • GKE クラスタのバージョンが 1.11 以上であることを確認します。GKE クラスタ バージョン 1.11-1.14 では、ツリー内プラグインによって管理されているボリュームの拡張をサポートしますが、ボリューム拡張を完了するには、ボリュームを使用するすべての Pod を終了する必要があります。
    • ストレージ ベンダーのドキュメントを参照して、ツリー内ボリューム プラグインがボリューム拡張をサポートしていることを確認します(Compute Engine Persistent Disk のプラグインはサポートしています)。

ボリューム拡張の使用

ボリューム拡張を使用するには、次の操作を行います。

  1. StorageClass にまだフィールドがない場合は、allowVolumeExpansion: true を StorageClass に追加します。次に例を示します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. PersistentVolumeClaim の spec.resources.requests.storage フィールドを編集して、ボリューム容量の変更をリクエストします。

     kubectl edit pvc pvc-name
    

    たとえば、次の PVC のディスクを 30 ギビバイト(GiB)から 40 GiB に変更できます。

    編集前:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    編集後:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. PVC を表示して変更を確認します。PVC を表示するには、次のコマンドを実行します。

    kubectl get pvc pvc-name -o yaml
    

    最終的に、status.capacity フィールドに新しいボリュームが表示されます。例:

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

PersistentVolume の容量を直接変更すると、コンテナ ファイルシステムが不正になる可能性があります。これらの問題を解決するには、ボリューム拡張の変更のトラブルシューティングをご覧ください。

StatefulSet でのボリューム拡張の管理

Kubernetes の StatefulSet 内の Pod で使用されるボリュームのサイズを増やす必要がある場合は、Pod に関連付けられた PersistentVolumeClaim(PVC)の spec.resources.requests.storage フィールドを調整する必要があります。StatefulSet オブジェクトで volumeClaimTemplates フィールドを直接変更しようとすると、エラーが発生します。

また、StatefulSet のレプリカ数を増やしても、元のサイズの PVC が作成されます。StatefulSet によって管理される Pod 用にプロビジョニングされたボリュームのサイズを永続的に変更するには、StatefulSet オブジェクトを削除して、volumeClaimTemplates フィールドで指定された更新後のサイズで再作成する必要があります。このプロセスでは、古い Pod とそれに対応する PVC が削除されます。ReclaimPolicy によっては、基盤となるストレージも削除されることがあります。

元の Pod を稼働させながら、StatefulSet を調整して新しいボリュームサイズで将来のレプリカをプロビジョニングするには、次の手順を行います。

  1. 既存の StatefulSet をファイルに保存します。

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Pod をスタンドアロン Pod として実行したまま、クラスタから StatefulSet オブジェクトを削除します。

    kubectl delete sts statefulset-name --cascade=orphan
    
  3. ローカルに保存された sts-backup.yaml ファイルの新しいボリューム ストレージ サイズ(具体的には、spec.volumeClaimTemplates.spec.resources.requests.storage の値)を編集します。

  4. クラスタに StatefulSet を再作成します。

    kubectl apply -f sts-backup.yaml
    

次のステップ