Kubernetes Storage Operations: Difference between revisions
Line 100: | Line 100: | ||
The claim is immediately bound, as it finds a matching persistent volume: | The claim is immediately bound, as it finds a matching persistent volume: | ||
<syntaxhighlight lang='bash'> | |||
kubectl get pvc | kubectl get pvc | ||
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE | NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE | ||
Line 107: | Line 108: | ||
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE | 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-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 | |||
</syntaxhighlight> | |||
The pod gets access to the volume content by declaring a [[Kubernetes_Storage_Concepts#persistentVolumeClaim|persistentVolumeClaim volume]]: | |||
<syntaxhighlight lang='yaml'> | |||
apiVersion: v1 | |||
kind: Pod | |||
metadata: | |||
name: test | |||
spec: | |||
containers: | |||
- name: test | |||
... | |||
volumeMounts: | |||
- mountPath: "/something" | |||
name: local-storage | |||
volumes: | |||
- name: local-storage | |||
persistentVolumeClaim: | |||
claimName: local-storage-claim | |||
</syntaxhighlight> |
Revision as of 02:56, 12 December 2019
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 pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
local-storage-claim Bound worker-00-local-volume-0 10Gi RWO manual-local-storage 2m19s
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
The pod gets access to the volume content by declaring a persistentVolumeClaim volume:
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: test
...
volumeMounts:
- mountPath: "/something"
name: local-storage
volumes:
- name: local-storage
persistentVolumeClaim:
claimName: local-storage-claim