Kubernetes Storage Operations
Internal
Get Information about Persistent Volumes
kubectl get pv <pv-name> kubectl describe pv <pv-name>
Get Information about Persistent Volumes Claims
kubectl get pvc <pvc-name> kubectl describe pvc <pvc-name>
Get Information about Storage Classes
NFS volume Example
This is an example to setup and use an nfs volume.
TODO: https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs
Local Volumes
Create a Local Volume, the corresponding Persistent Volume and a Persistent Volume Claim that Binds to It
This is the step-by-step procedure to create a persistent volume backed by a local volume and expose it to a pod with a matching persistent volume claim.
Expose a Local Disk
In this context, "exposing a local disk" means exposing a raw block device. TODO.
Expose a Local Directory
Define a local directory that will be exposed as a persistent volume:
mkdir /mnt/disk1/local-volume-0
Define the persistent volume API resource instance:
apiVersion: v1
kind: PersistentVolume
metadata:
name: worker-00-local-volume-0
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: manual-local-storage
local:
path: /mnt/disk1/local-volume-0
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-00
Note that in the persistent volume metadata shown above, "worker-00" is the name of the node, as known to Kubernetes. It can be obtained with:
kubectl get nodes -o wide
If the cluster has more than one node, symmetrical persistent volumes can be created for other nodes as well.
Upon creation, the persistent volumes can be listed with:
kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE worker-00-local-volume-0 10Gi RWO Delete Available manual-local-storage 94s worker-01-local-volume-0 10Gi RWO Delete Available manual-local-storage 2s
Create a Matching Persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-storage-claim
spec:
accessModes:
- ReadWriteOnce
storageClassName: manual-local-storage
resources:
requests:
storage: 10Gi
Aside from attributes like storage amount request access mode, the storage class name must match.
The claim is immediately bound, as it finds a matching persistent volume:
kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE worker-00-local-volume-0 10Gi RWO Delete Bound default/local-storage-claim manual-local-storage 6m37s worker-01-local-volume-0 10Gi RWO Delete Available manual-local-storage 5m5s