Persistent Volume Storage¶
Volume storage is a storage solution based on Kubernetes PV and PVC used for persistent storage. This creates a disk that is attached to the cluster and can be mounted as a volume in a pod.
Volume storage is considered a last resort for storage and only if the existing other storage solutions are not suitable for your use case. Please make sure you have considered all other options first.
Volume storage has the following limitations:
- Only available in GCP.
- There is no automatic backup and restore of data.
- There is no automatic scaling of the volume size.
A volume can only be mounted to one pod at a time. Which means that if you have multiple pods they can not share a single volume.
It also means that if you have only one instance it needs to be completely stopped before a new instance can be started with the same volume resulting in downtime.
Even though you can request very large volumes, it is not a good solution for storing large amounts of data. We do not recommended storing more than 100GB of data in a single volume.
An example app
myapp with a volume of
apiVersion: apps/v1 kind: StatefulSet metadata: name: myapp spec: serviceName: myapp replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:latest volumeMounts: - name: myapp-storage mountPath: /data volumeClaimTemplates: - metadata: name: myapp-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
By default, dynamically provisioned
PersistentVolumes use the
StorageClass and are backed by standard hard disks. If you need faster SSDs, you can use the
ssd-storage storage class.
To set the storage class for a volume, add the
storageClassName field to the
apiVersion: apps/v1 kind: StatefulSet metadata: name: myapp spec: ... volumeClaimTemplates: - metadata: name: myapp-storage spec: storageClassName: ssd-storage ...
In Kubernetes, a VolumeSnapshot represents a snapshot of a volume on a storage system. We recommend you to already be familiar with Kubernetes persistent volumes before using this.
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: new-snapshot-test spec: volumeSnapshotClassName: csi-hostpath-snapclass source: persistentVolumeClaimName: pvc-test
You can resize a volume by editing the
spec.resources.requests.storage field of the PersistentVolumeClaim object.
This will resize the volume to
2Gi. The volume will be resized when the pod is restarted.