Persistent Volumes:
PersistentVolumes are K8s objects that allow you to treat storage as an abstract resource to be consumed by Pods, much like K8s treats compute resources such as memory and CPU. A PersistentVolume uses a set of attributes to describe the underlying storage resource (such as a disk or cloud storage location) which will be used to store data.
kind: PersistentVolume apiVersion: v1 metadata: name: my-pv spec: storageClassName: localdisk capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: /var/output
Storage Classes
Storage Classes allow K8s administrators to specify the types of storage services they offer on their platform. For example, an administrator could create a StorageClass called slow to describe low-performance but inexpensive storage resources, and another called fast for high-performance but more costly resources. This allows users to choose storage resources that fit the needs of their applications.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: localdisk provisioner: kubernetes.io/no-provisioner allowVolumeExpansion: true
Reclaim Policies
A PersistentVolume’s
persistentVolumeReclaimPolicy
determines how the storage resources can be reused when the PersistentVolume’s associated PersistentVolumeClaims are deleted. There are three options:- Retain (Keeps all data)
- Delete (Deletes the underlying storage resource automatically, only works for cloud storage resources)
- Recycle (Automatically deletes all data in the underlying storage resource, allowing the PersistentVolume to be reused).
kind: PersistentVolume apiVersion: v1 metadata: name: my-pv spec: storageClassName: localdisk persistentVolumeReclaimPolicy: Recycle capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: /etc/output
Persistent Volume Claims
A PersistentVolumeClaim represents a user’s request for storage resources. It defines a set of attributes similar to those of a PersistentVolume (StorageClass, etc.). When a PersistentVolumeClaim is created, it will look for a PersistentVolume that is able to meet the requested criteria. If it finds one, it will automatically be bound to the PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: localdisk accessModes: - ReadWriteOnce resources: requests: storage: 100Mi
Using a PersistentVolumeClaim in a Pod
PersistentVolumeClaims can be mounted to a Pod’s containers just like any other volume. If the PersistentVolumeClaim is bound to a PersistentVolume, the containers will use the underlying PersistentVolume storage.
apiVersion: v1 kind: Pod metadata: name: pv-pod spec: containers: - name: busybox image: busybox volumeMounts: - name: pv-storage mountPath: /output volumes: - name: pv-storage persistentVolumeClaim: claimName: my-pvc
Resizing a PersistentVolumeClaim
You can expand PersistentVolumeClaims without interrupting applications that are using them. Simply edit the
spec.resources.requests.storage
attribute of an existing PersistentVolumeClaim, increasing its value. However, the StorageClass must support resizing volumes and must have allowVolumeExpansion
set to true.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: localdisk accessModes: - ReadWriteOnce resources: requests: storage: 200Mi