By default [K3S](https://k3s.io/) comes only with [local-path](https://github.com/rancher/local-path-provisioner) 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: ``` bash 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](https://github.com/helm/helm) on your server. To do so you may run: ``` bash 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](https://kubernetes.io/docs/concepts/storage/storage-classes/#nfs). It has two providers, I have chose [NFS Subdir External Provisioner](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner). Add the helm repo ``` bash helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ ``` Then we need to actually install the provider ``` bash 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