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 のプラグインはサポートしています)。
ReadOnlyManyアクセスモードを使用している場合、ボリューム拡張は使用できません。
ボリューム拡張の使用
ボリューム拡張を使用するには、次の操作を行います。
StorageClass にまだフィールドがない場合は、
allowVolumeExpansion: trueを StorageClass に追加します。次に例を示します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: truePersistentVolumeClaim の
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: 40GiPVC を表示して変更を確認します。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 を稼働させながら、StatefulSet を調整して新しいボリュームサイズで将来のレプリカをプロビジョニングするには、次の手順を行います。
既存の StatefulSet をファイルに保存します。
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yamlStatefulSet 内の PersistentVolumeClaim ごとに、テキスト エディタで
PersistentVolumeClaimオブジェクトを開きます。kubectl edit pvc PVC_NAME次の例のように、
spec.resources.requests.storageフィールドを新しいボリューム サイズに更新します。apiVersion: v1 kind: PersistentVolumeClaim metadata: # lines omitted for clarity spec: resources: requests: storage: 14Gi # lines omitted for clarity詳細については、永続ボリュームの要求の拡張をご覧ください。
変更を保存し、テキスト エディタを終了します。Kubernetes が変更内容で PersistentVolumeClaim を更新するまで待ちます。
Pod をスタンドアロン Pod として実行したまま、クラスタから StatefulSet オブジェクトを削除します。
kubectl delete sts statefulset-name --cascade=orphanローカルに保存された
sts-backup.yamlファイルの新しいボリューム ストレージ サイズ(具体的には、spec.volumeClaimTemplates.spec.resources.requests.storageの値)を編集します。クラスタに StatefulSet を再作成します。
kubectl apply -f sts-backup.yaml
次のステップ
- ボリュームについて学習する。
- Kubernetes を使用した永続ボリュームのサイズ変更について学習する。