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: true
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
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
フィールドで指定された更新後のサイズで再作成する必要があります。StatefulSet で PVC の自動削除が有効になっていない場合、StatefulSet を削除しても StatefulSet Pod のみが削除され、対応する PVC は削除されません。これらの PVC に更新後のサイズを反映するには、PVC を削除して再作成する必要があります。PVC の ReclaimPolicy
によっては、基盤となるストレージも削除されることがあります。
元の Pod を稼働させながら、StatefulSet を調整して新しいボリュームサイズで将来のレプリカをプロビジョニングするには、次の手順を行います。
既存の StatefulSet をファイルに保存します。
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
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 を使用した永続ボリュームのサイズ変更について学習する。