Managing storage classes
Managing storage classes
Creating a storage class
kubectl create namespace nfs-provisioner
kubectl config set-context --current --namespace nfs-provisioner
Context "kubernetes-admin@desotech" modified.
kubectl apply -f \
https://raw.githubusercontent.com/desotech-it/DSK201-public/master/common-storageclass.yaml
Check the ip of NFS already provisioned:
cat ~/listaip.txt
Use the NFS’s IP to control the exported NFS:
showmount -e 10.10.95.100
You should see a NFS export with this path: /nfs/provisioner
Now create a new file and change the IP with the NFS Server’s IP and the export path of the NFS Server:
vi /home/student/nfs-pod-provisioner.yaml
File: /home/student/nfs-pod-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nfs-pod-provisioner
name: nfs-pod-provisioner
namespace: nfs-provisioner
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-pod-provisioner
template:
metadata:
labels:
app: nfs-pod-provisioner
spec:
serviceAccountName: nfs-pod-provisioner-sa # name of service account created in rbac.yaml
containers:
- image: quay.io/external_storage/nfs-client-provisioner:latest
name: nfs-client-provisioner
resources: {}
volumeMounts:
- name: nfs-provisioner-v
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME # do not change
value: nfs-deso-provisioner # SAME AS PROVISONER NAME VALUE IN STORAGECLASS
- name: NFS_SERVER # do not change
value: 10.10.XX.100 # Change with Ip of the NFS SERVER
- name: NFS_PATH # do not change
value: /nfs/provisioner # path to nfs directory setup
volumes:
- name: nfs-provisioner-v # same as volumemouts name
nfs:
server: 10.10.XX.100 # Change with Ip of the NFS SERVER
path: /nfs/provisioner
kubectl apply -f nfs-pod-provisioner.yaml
deployment.apps/nfs-pod-provisioner created
vi /home/student/storageclass.yaml
File: /home/student/storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storageclass # IMPORTANT pvc needs to mention this name
provisioner: nfs-deso-provisioner # name can be anything
parameters:
archiveOnDelete: "false"
volumeBindingMode: WaitForFirstConsumer
kubectl apply -f storageclass.yaml
storageclass.storage.k8s.io/nfs-storageclass created
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-storageclass nfs-deso-provisioner Delete Immediate false 16s
kubectl create ns test-storageclass
namespace/test-storageclass created
kubectl config set-context --current --namespace test-storageclass
Context "kubernetes-admin@desotech" modified.
vi /home/student/pvc01.yaml
File: /home/student/pvc01.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc01
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: nfs-storageclass
Create this PVC:
kubectl apply -f pvc01.yaml
persistentvolumeclaim/pvc01 created
kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/pvc-e62ff4ba-ac2f-4edc-b2a7-b571856739bb 1G RWO Delete Bound test-storageclass/pvc01 nfs-storageclass 16s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/pvc01 Bound pvc-e62ff4ba-ac2f-4edc-b2a7-b571856739bb 1G RWO nfs-storageclass 17s
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-storageclass nfs-deso-provisioner Delete Immediate false 9m13s
vi /home/student/pvc02.yaml
File: /home/student/pvc02.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc02
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
Create this PVC:
kubectl apply -f pvc02.yaml
persistentvolumeclaim/pvc02 created
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc01 Bound pvc-e62ff4ba-ac2f-4edc-b2a7-b571856739bb 1G RWO nfs-storageclass 2m58s pvc02 Pending 18s
Setting a default storage class
Kubernetes v1.6 added the ability to set a default storage class. This is the storage class that will be used to provision a PV if a user does not specify one in a PVC.
You can define a default storage class by setting the annotation storageclass.kubernetes.io/is-default-class to
true in the storage class definition. According to the specification, any other value or absence of the annotation is
interpreted as false.
It is possible to configure an existing storage class to be the default storage class by using the following command:
kubectl patch storageclass nfs-storageclass \
-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-storageclass (default) nfs-deso-provisioner Delete Immediate false 11m
kubectl delete -f pvc02.yaml
persistentvolumeclaim "pvc02" deleted
kubectl apply -f pvc02.yaml
persistentvolumeclaim/pvc02 created
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc01 Bound pvc-e62ff4ba-ac2f-4edc-b2a7-b571856739bb 1G RWO nfs-storageclass 4m42s pvc02 Bound pvc-b9af9093-a3d6-46d4-9e84-72bc86c77c1a 1G RWO nfs-storageclass 3s
Clean up
kubectl delete ns test-storageclass
namespace "test-storageclass" deleted
kubectl config set-context --current --namespace default
Context "kubernetes-admin@desotech" modified.