gabrielgio.me @ b277b6012f631173dc48291916a092ed6a28903d

 1---
 2title:  "Enable NFS on K3S"
 3date:   2021-12-26
 4tags: ['kubernetes', 'linux', 'helm', 'k3s']
 5---
 6
 7By default [[https://k3s.io/][K3S]] comes only with [[https://github.com/rancher/local-path-provisioner][local-path]] storage class, and if you are running
 8with more than one node in your cluster you may want to use a more "distributed"
 9solution. For may case I opted for NFS.
10
11To check the current storage class you can run:
12
13#+BEGIN_SRC bash
14k3s kubectl get storageclasses
15#+END_SRC
16
17And it will print something like:
18
19#+BEGIN_SRC
20NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
21local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d
22#+END_SRC
23
24To start adding First you need to install [[https://github.com/helm/helm][helm]] on your server. To do so you may
25run:
26
27#+BEGIN_SRC bash
28curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
29#+END_SRC
30
31*Be careful when running scripts directly into bash always check the source*
32*Sometimes is also recommended to do not pipe directly to bash*
33
34Once it is installed we need to add the [[https://kubernetes.io/docs/concepts/storage/storage-classes/#nfs][NFS storage classes]]. It has two
35providers, I have chose [[https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner][NFS Subdir External Provisioner]].
36
37Add the helm repo
38
39#+BEGIN_SRC bash
40helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
41#+END_SRC
42
43Then we need to actually install the provider
44
45
46#+BEGIN_SRC bash
47helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
48    --set nfs.server=x.x.x.x \
49    --set nfs.path=/exported/path
50#+END_SRC
51
52Set the ~nfs.server~ and ~nfs.path~ accordingly with your setup.
53
54After that if we run ~k3s kubectl get storageclasses~ it will now print another
55NFS provider:
56
57#+BEGIN_SRC
58NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
59local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  154d
60nfs-client             cluster.local/nfs-subdir-external-provisioner   Delete          Immediate              true                   76m
61#+END_SRC