Here are the notes on how I enabled dynamic provisioning for persistent volumes in my garage Kubernetes cluster, using a combination of:
- NFS server
- CSI driver for NFS
- PersistentVolumeClaim
NFS server
I used a typical installation of NFS server on Ubuntu Linux. Here’s the documentation from Ubuntu.
CSI driver for NFS
From the Github repo there are Helm templates provided to install csi-driver-nfs easily into a Kubernetes cluster. Since I rely on ArgoCD to deploy stuff in my cluster, I created an ArgoCD application for csi-driver-nfs:
# csi-driver-nfs.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: csi-driver-nfs
namespace: argocd
spec:
destination:
namespace: kube-system
server: https://kubernetes.default.svc
project: default
source:
chart: csi-driver-nfs
repoURL: https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
targetRevision: v4.9.0
helm:
values: |
# avoid deploying onto master node
controller:
tolerations: []
node:
tolerations: []
# create the default storage class using local NFS driver settings
storageClass:
create: true
name: nfs-csi
annotations:
storageclass.kubernetes.io/is-default-class: "true"
parameters:
server: 192.168.1.101
share: /var/nfs
# set to Retain if files are to be preserved after the volume's deletion.
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
syncPolicy:
automated:
prune: true
syncOptions:
- CreateNamespace=trueOnce checked in and deployed by ArgoCD, I confirmed it’s running properly
> k get storageclass -A NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-csi (default) nfs.csi.k8s.io Delete Immediate false 2d5h
PersistentVolumeClaim
Here’s an example PVC to create a volume dynamically
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: raytest
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: nfs-csiLet’s see how it works when deployed
> k apply -f pvc.yaml persistentvolumeclaim/raytest created > k get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE raytest Bound pvc-ef9ecd8f-2ca2-4b96-8dc1-c7bb2e5c96ea 10Gi RWX nfs-csi <unset> 9s > k get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-ef9ecd8f-2ca2-4b96-8dc1-c7bb2e5c96ea 10Gi RWX Delete Bound default/raytest nfs-csi <unset> 22s # in the NFS server > ls -lht /var/nfs total 68K drwxr-xr-x 2 nobody nogroup 4.0K Oct 11 16:51 pvc-ef9ecd8f-2ca2-4b96-8dc1-c7bb2e5c96ea ...
🙂
