Skip to content

Panduan Instalasi NFS Storage untuk Kubernetes

fourslickz edited this page Jul 30, 2026 · 1 revision

Panduan Instalasi NFS Storage untuk Kubernetes

Panduan ini menjelaskan cara menginstal NFS Server dan menghubungkannya ke Kubernetes menggunakan NFS CSI Driver (nfs.csi.k8s.io).


Topologi

                    +----------------------+
                    |  Kubernetes Cluster  |
                    |                      |
                    |  nfs.csi.k8s.io      |
                    +----------+-----------+
                               |
                      NFS Protocol (2049)
                               |
                               |
                    +----------v-----------+
                    |     NFS Server       |
                    | 10.130.249.216       |
                    |                      |
                    | /srv/nfs/laravel     |
                    +----------------------+

Prasyarat

  • Ubuntu Server 22.04 / 24.04
  • Kubernetes Cluster
  • Helm 3
  • Akses root / sudo
  • Port TCP 2049 terbuka antar node Kubernetes dan NFS Server

1. Install NFS Server

Update package

sudo apt update
sudo apt upgrade -y

Install NFS Server

sudo apt install -y nfs-kernel-server

Verifikasi

systemctl status nfs-kernel-server

2. Membuat Direktori Share

sudo mkdir -p /srv/nfs/laravel

Berikan permission.

Untuk pengujian:

sudo chmod -R 777 /srv/nfs/laravel

Atau

sudo chown -R nobody:nogroup /srv/nfs/laravel

Catatan

Untuk production gunakan permission sesuai user aplikasi, jangan selalu menggunakan 777.


3. Konfigurasi Export NFS

Edit file:

sudo nano /etc/exports

Tambahkan:

/srv/nfs/laravel *(rw,sync,no_subtree_check,no_root_squash)

Atau lebih aman menggunakan subnet internal Kubernetes:

/srv/nfs/laravel 10.130.0.0/16(rw,sync,no_subtree_check,no_root_squash)

Reload konfigurasi:

sudo exportfs -ra

Verifikasi:

sudo exportfs -v

Contoh output:

/srv/nfs/laravel

4. Menjalankan Service NFS

sudo systemctl enable nfs-kernel-server
sudo systemctl restart nfs-kernel-server

Cek status:

sudo systemctl status nfs-kernel-server

5. Firewall

Jika menggunakan UFW:

sudo ufw allow from 10.130.0.0/16 to any port 2049 proto tcp

atau

sudo ufw allow 2049/tcp

6. Pengujian dari Node Kubernetes

Install client NFS

sudo apt install -y nfs-common

Lihat export

showmount -e 10.130.249.216

Contoh:

Export list for 10.130.249.216:
/srv/nfs/laravel

Tes mount

sudo mkdir -p /mnt/test

sudo mount -t nfs \
10.130.249.216:/srv/nfs/laravel \
/mnt/test

Tes write

touch /mnt/test/test.txt

Unmount

sudo umount /mnt/test

7. Install NFS CSI Driver

Tambah repository Helm

helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts

helm repo update

Install

helm install csi-driver-nfs \
csi-driver-nfs/csi-driver-nfs \
--namespace kube-system

Verifikasi

kubectl get pods -n kube-system | grep nfs

Output:

csi-nfs-controller-xxxx
csi-nfs-node-xxxxx

8. Membuat StorageClass

Buat file storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-rwx

provisioner: nfs.csi.k8s.io

reclaimPolicy: Retain

volumeBindingMode: Immediate

allowVolumeExpansion: true

Apply

kubectl apply -f storageclass.yaml

Cek

kubectl get storageclass

9. Membuat PersistentVolume

Buat file pv.yaml

apiVersion: v1
kind: PersistentVolume

metadata:
  name: laravel-storage-pv

spec:
  capacity:
    storage: 40Gi

  accessModes:
    - ReadWriteMany

  storageClassName: nfs-rwx

  persistentVolumeReclaimPolicy: Retain

  csi:
    driver: nfs.csi.k8s.io

    volumeHandle: laravel-storage-pv

    volumeAttributes:
      server: 10.130.249.216
      share: /srv/nfs/laravel

Apply

kubectl apply -f pv.yaml

Verifikasi

kubectl get pv

10. Membuat PersistentVolumeClaim

Buat file pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim

metadata:
  name: laravel-storage

spec:
  accessModes:
    - ReadWriteMany

  storageClassName: nfs-rwx

  resources:
    requests:
      storage: 40Gi

Apply

kubectl apply -f pvc.yaml

Cek

kubectl get pvc

Status harus:

Bound

11. Menggunakan PVC pada Deployment

spec:
  containers:
    - name: laravel

      image: your-image

      volumeMounts:
        - name: storage
          mountPath: /var/www/html/storage

  volumes:
    - name: storage

      persistentVolumeClaim:
        claimName: laravel-storage

12. Verifikasi

StorageClass

kubectl get sc

PersistentVolume

kubectl get pv

PersistentVolumeClaim

kubectl get pvc -A

Detail PV

kubectl describe pv laravel-storage-pv

Contoh:

Driver : nfs.csi.k8s.io
Server : 10.130.249.216
Share  : /srv/nfs/laravel

Cek Mount di Pod

kubectl exec -it <pod> -- df -h

atau

kubectl exec -it <pod> -- mount | grep nfs

Output:

10.130.249.216:/srv/nfs/laravel

Tes Write

kubectl exec -it <pod> -- touch /var/www/html/storage/test.txt

Jika berhasil berarti koneksi ke NFS berjalan dengan baik.


Troubleshooting

PVC Pending

kubectl describe pvc <nama-pvc>

PV Tidak Bound

kubectl describe pv <nama-pv>

Pastikan:

  • StorageClass sama
  • Capacity mencukupi
  • AccessMode sesuai

CSI Driver Tidak Berjalan

kubectl get pods -n kube-system | grep nfs

Lihat log

kubectl logs -n kube-system deployment/csi-nfs-controller

Tidak Bisa Mount

Tes dari node

showmount -e 10.130.249.216

Jika gagal:

  • cek firewall
  • cek service NFS
  • cek /etc/exports

Permission Denied

Cek permission

ls -lah /srv/nfs

atau

chmod -R 777 /srv/nfs/laravel

(Hanya untuk testing)


Melihat Export

sudo exportfs -v

Struktur Akhir

NFS SERVER
10.130.249.216

└── /srv
    └── nfs
        └── laravel

Kubernetes
│
├── StorageClass
│      nfs-rwx
│
├── PersistentVolume
│      laravel-storage-pv
│
├── PersistentVolumeClaim
│      laravel-storage
│
└── Deployment
       mountPath:
/var/www/html/storage

Ringkasan Perintah

# NFS Server
sudo apt install -y nfs-kernel-server

sudo mkdir -p /srv/nfs/laravel

sudo nano /etc/exports

sudo exportfs -ra

sudo exportfs -v

sudo systemctl restart nfs-kernel-server

# Client
showmount -e 10.130.249.216

# Kubernetes
kubectl get sc

kubectl get pv

kubectl get pvc

kubectl describe pv laravel-storage-pv

kubectl exec -it <pod> -- df -h

kubectl exec -it <pod> -- mount | grep nfs

Clone this wiki locally