In the previous post, we learned how to setup an NFS share on a Linux machine. Today, we are going to learn how to mount this share in a Kubernetes cluster.
The first thing we need to define is a
apiVersion: v1 kind: PersistentVolume metadata: name: my-shared-folder-pv labels: usage: my-shared-folder-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Recycle nfs: server: my-other-server path: /var/nfs/my_shared_folder
Then we can create a
PersistentVolumeClaim pointing to the volume:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-shared-folder-pvc annotations: volume.beta.kubernetes.io/storage-class: "" spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi selector: matchLabels: usage: my-shared-folder-pv
We can now deploy these to our Kubernetes cluster:
kubectl apply -f persistent-volume.yaml kubectl apply -f persistent-volume-claim.yaml
To use it in a deployment, you can mount it now as a volume:
apiVersion: apps/v1 kind: Deployment metadata: name: my-server labels: app: my-server spec: replicas: 1 selector: matchLabels: app: my-server template: metadata: labels: app: my-server spec: containers: - name: my-server image: "alpine:3.12" command: ["/bin/sh"] args: ["-c", "while true; do date >> /mnt/my_shared_folder/dates.txt; sleep 5; done"] volumeMounts: - name: my-shared-folder mountPath: /mnt/my_shared_folder volumes: - name: my-shared-folder persistentVolumeClaim: claimName: my-shared-folder-pvc
If you also want to setup the NFS share itself inside the cluster, there are examples available showing you how to do that in the Kubernetes Example repository.