Konfigurasi Dynamic NFS Provisioning di Kubernetes Cluster merupakan proses pengaturan agar kubernetes secara otomatis dapat menyediakan penyimpanan persisten (persistent volume) dari sebuah server NFS (Network File System). Ini memungkinkan pod-pod di dalam cluster Kubernetes untuk mengakses file secara bersama-sama, seolah-olah mereka berada di mesin yang sama.
Untuk mengonfigurasi Dynamic NFS Provisioning di Kubernetes Cluster, pastikan Anda telah memiliki layanan DKubes. Beberapa langkah konfigurasi yang dapat dilakukan sebagai berikut:
- Pada langkah di bawah ini diberikan contoh menggunakan 3 Simpul Pekerja dan berikut topologi yang digunakan.

- Pastikan, kubectl telah terinstall dapat melakukan query pada klaster kubernetes.
- Untuk melihat klaster kubernetes yang dimiliki dapat mengetikkan perintah berikut.
Kubectl get nodes

Pengecekan Node Klaster - Selanjutnya, pengguna dapat buat instance DCloud yang akan digunakan sebagai NFS Server. Pada contoh disini menggunakan OS Ubuntu.
- Setelah instance DCloud yang digunakan sebagai NFS Server sudah aktif, pengguna dapat mengakses layanan DCloud dan login mengunakan kredensial yang telah dibuat
- Kemudian melakukan update terlebih dahulu untuk memastikan semua paket dan kemanan sudah ter-update. Berikut perintah untuk melakukan update.
sudo apt update

Update Paket - Setelah terupdate, lakukan installasi NFS Server dengan mengetikkan perintah berikut.
sudo apt-get install nfs-common nfs-kernel-server –y

Install NFS Server - Buat direktori atau folder yang akan dibagikan dengan mengetikkan beberapa perintah berikut
sudo mkdir -p /data/nfs
sudo chown nobody:nogroup /data/nfs
sudo chmod 2770 /data/nfs

Buat Direktori - Masukkan perintah dibawah ini untuk menambahkan entri file /etc/exports yang merupakan konfigurasi utama untuk layanan NFS (Network File System) pada sistem operasi Linux. Pada contoh disini menggunakan tanda * agar bisa diakses di semua node, atau bisa diubah sesuai dengan kebutuhan.
echo -e "/data/nfs\t*(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
Apabila menggunakan vim dapat memasukan perintah seperti dibawah ini pada file /etc/exports

Menambahkan Konfigurasi NFS - Kemudian melakukan restart NFS-Server dengan mengetikkan perintah berikut.
sudo exportfs -av
sudo systemctl restart nfs-kernel-server
sudo systemctl status nfs-kernel-server
showmount -e

Restart - Melakukan penginstallan helm pada klaster kubernetes. Helm merupakan manajemen paket untuk kubernetes untuk menginstall NFS Client Provisioner. Untuk menginstall helm dapat mengetikkan beberapa perintah berikut.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Install Helm - Selanjutnya, tambahkan repository helm yang berisi chart untuk NFS Subdirectory External Provisioner dengan mengetikkan beberapa perintah berikut.
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update - Kemudian, menginstal NFS Client Provisioner pada klaster Kubernetes. Pada contoh ini, menggunakan server NFS yang sudah dibuat sebelumnya. Jika Anda memiliki server NFS sendiri, Anda dapat menyesuaikan perintah dibawah ini dengan alamat IP dan Path yang Anda miliki.
helm install -n nfs-provisioning --create-namespace nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=38.47.74.231 --set nfs.path=/data/nfs
Install NFS Client Provisioner - Jika berhasil install akan tampil seperti halaman berikut ini.

Install Berhasil 
Install Berhasil - Langkah selanjutnya membuat sebuah deployment sederhana untuk memastikan NFS sudah berhasil dan dapat digunakan dengan membuat PVC seperti di bawah ini.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myvol1 namespace: default spec: accessModes: - ReadWriteOnce storageClassName: nfs-client resources: requests: storage: 1Gi

PVC - Kemudian buat deployment seperti di bawah ini untuk memastikan claim Name sesuai dengan pvc yang sudah dibuat sebelumnya.
apiVersion: apps/v1 kind: Deployment metadata: labels: app: web name: web spec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx ports: - name: web containerPort: 80 hostPort: 8081 protocol: TCP volumeMounts: - mountPath: "/usr/share/nginx/html" name: mypd volumes: - name: mypd persistentVolumeClaim: claimName: myvol1

Deployment - Jika berhasil, kemudian akan tampil halaman berikut ini.

Kubectl - Mengubah halaman Nginx dengan masuk ke container dengan perintah berikut.
kubectl exec -it nfs-nginx-59bcbc669f-6729k -- /bin/bash

Ubah Halaman Nginx 
Ubah Halaman Nginx - Kemudian expose deployment ke nodeport agar bisa diakses dari luar klaster dengan mengetikkan perintah berikut.
kubectl expose deployment nfs-nginx –type=NodePort –port=80 service/nfs-nginx exposed

Expose Deployment - Jika diakses akan tampil seperti halaman berikut.

Akses NFS - Kemudian jika dilihat pada NFS-Server akan terbuat index.html seperti di bawah ini.

Index NFS