By default K3S comes only with local-path storage class, and if you are running with more than one node in your cluster you may want to use a more “distributed” solution. For may case I opted for NFS.

To check the current storage class you can run:

k3s kubectl get storageclasses

And it will print something like:

NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d

To start adding First you need to install helm on your server. To do so you may run:

curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

Be careful when running scripts directly into bash always check the source Sometimes is also recommended to do not pipe directly to bash

Once it is installed we need to add the NFS storage classes. It has two providers, I have chose NFS Subdir External Provisioner.

Add the helm repo

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

Then we need to actually install the provider

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
--set nfs.server=x.x.x.x
--set nfs.path=/exported/path

Set the nfs.server and nfs.path accordingly with your setup.

After that if we run k3s kubectl get storageclasses it will now print another NFS provider:

NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d
nfs-client             cluster.local/nfs-subdir-external-provisioner   Delete          Immediate              true                   76m