-
Notifications
You must be signed in to change notification settings - Fork 0
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).
+----------------------+
| Kubernetes Cluster |
| |
| nfs.csi.k8s.io |
+----------+-----------+
|
NFS Protocol (2049)
|
|
+----------v-----------+
| NFS Server |
| 10.130.249.216 |
| |
| /srv/nfs/laravel |
+----------------------+
- Ubuntu Server 22.04 / 24.04
- Kubernetes Cluster
- Helm 3
- Akses root / sudo
- Port TCP 2049 terbuka antar node Kubernetes dan NFS Server
Update package
sudo apt update
sudo apt upgrade -yInstall NFS Server
sudo apt install -y nfs-kernel-serverVerifikasi
systemctl status nfs-kernel-serversudo mkdir -p /srv/nfs/laravelBerikan permission.
Untuk pengujian:
sudo chmod -R 777 /srv/nfs/laravelAtau
sudo chown -R nobody:nogroup /srv/nfs/laravelCatatan
Untuk production gunakan permission sesuai user aplikasi, jangan selalu menggunakan
777.
Edit file:
sudo nano /etc/exportsTambahkan:
/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 -raVerifikasi:
sudo exportfs -vContoh output:
/srv/nfs/laravel
sudo systemctl enable nfs-kernel-server
sudo systemctl restart nfs-kernel-serverCek status:
sudo systemctl status nfs-kernel-serverJika menggunakan UFW:
sudo ufw allow from 10.130.0.0/16 to any port 2049 proto tcpatau
sudo ufw allow 2049/tcpInstall client NFS
sudo apt install -y nfs-commonLihat export
showmount -e 10.130.249.216Contoh:
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/testTes write
touch /mnt/test/test.txtUnmount
sudo umount /mnt/testTambah repository Helm
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm repo updateInstall
helm install csi-driver-nfs \
csi-driver-nfs/csi-driver-nfs \
--namespace kube-systemVerifikasi
kubectl get pods -n kube-system | grep nfsOutput:
csi-nfs-controller-xxxx
csi-nfs-node-xxxxx
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: trueApply
kubectl apply -f storageclass.yamlCek
kubectl get storageclassBuat 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/laravelApply
kubectl apply -f pv.yamlVerifikasi
kubectl get pvBuat file pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: laravel-storage
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-rwx
resources:
requests:
storage: 40GiApply
kubectl apply -f pvc.yamlCek
kubectl get pvcStatus harus:
Bound
spec:
containers:
- name: laravel
image: your-image
volumeMounts:
- name: storage
mountPath: /var/www/html/storage
volumes:
- name: storage
persistentVolumeClaim:
claimName: laravel-storagekubectl get sckubectl get pvkubectl get pvc -Akubectl describe pv laravel-storage-pvContoh:
Driver : nfs.csi.k8s.io
Server : 10.130.249.216
Share : /srv/nfs/laravel
kubectl exec -it <pod> -- df -hatau
kubectl exec -it <pod> -- mount | grep nfsOutput:
10.130.249.216:/srv/nfs/laravel
kubectl exec -it <pod> -- touch /var/www/html/storage/test.txtJika berhasil berarti koneksi ke NFS berjalan dengan baik.
kubectl describe pvc <nama-pvc>kubectl describe pv <nama-pv>Pastikan:
- StorageClass sama
- Capacity mencukupi
- AccessMode sesuai
kubectl get pods -n kube-system | grep nfsLihat log
kubectl logs -n kube-system deployment/csi-nfs-controllerTes dari node
showmount -e 10.130.249.216Jika gagal:
- cek firewall
- cek service NFS
- cek
/etc/exports
Cek permission
ls -lah /srv/nfsatau
chmod -R 777 /srv/nfs/laravel(Hanya untuk testing)
sudo exportfs -vNFS 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
# 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