NFS subdir external provisioner - toge510/homelab GitHub Wiki
Set-up NFS external server
Create NFS server with Set‐up an NFS server.
- server ip address:
192.168.11.100
- exported directory:
/share
Set-up NFS external provisoner
Kubernetes doesn't include an internal NFS provisioner. You need to use an external provisioner to create a StorageClass for NFS. Here are some examples:
NFS subdir external provisioner is an automatic provisioner that use your existing and already configured NFS server to support dynamic provisioning of Kubernetes Persistent Volumes via Persistent Volume Claims. Persistent volumes are provisioned as ${namespace}-${pvcName}-${pvName}
Deploy NFS Subdir External Provisioner to your cluster with Helm
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.11.100 \
--set nfs.path=/share
Note: Have to install nfs-common
package on all nodes (sudo apt install nfs-common
)! If not so, cannot mount to NFS server
Verification
Deploy the test resources:
kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-claim.yaml -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-pod.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
kind: Pod
apiVersion: v1
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: busybox:stable
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && exit 0 || exit 1"
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: test-claim
PVC's status is "Bound" and pv can be created automatically (dynamic provisoning works!).
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-claim Bound pvc-3ce23c82-920f-4eba-954f-66973ed977b0 1Mi RWX nfs-client 2m3s
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-3ce23c82-920f-4eba-954f-66973ed977b0 1Mi RWX Delete Bound default/test-claim nfs-client 3m20s
SUCCESS
file is inside the PVC's directory on NFS Server.
$ ls /share/default-test-claim-pvc-3ce23c82-920f-4eba-954f-66973ed977b0/
SUCCESS
Delete the test resources:
$ kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-claim.yaml -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-pod.yaml