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