Rancher Desktop NFS Storage Class
2 min readJul 18, 2024
Selamlar,
bu yazida kisaca Rancher Desktop’a bir nfs storage class nasil yaratilir ve kullanilir onu anlatacagim.
Debian 11 NFS Server Kurulumu ve Konfigurasyonu
- Server paketleri kurulur.
# apt install nfs-kernel-server nfs-common
- Share edilecek dizinin yetkileri ayarlanir.
# chmod -R 777 /opt/data
- Config dosyasi set edilir. Burada onemli olan ‘insecure’ parametresini kullanmak. Normalde, NFS sunucusu sadece “secure” (güvenli) portlardan (0–1023 arası portlar) gelen istekleri kabul eder.
insecure
seçeneği ile, istemcilerin yüksek numaralı portlar (1024 ve üzeri) üzerinden bağlanmasına izin verilmiş olur.
# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/opt/data *(rw,sync,no_subtree_check,no_root_squash,fsid=0,insecure)
- service restart edilir ve shared edilecek dizin export
# systemctl restart nfs-kernel-server
# exportfs -av
exporting *:/opt/data
Rancher Desktop VM Config Degistirme
NFS (Network File System), dosya sistemlerini ağ üzerinden paylaşır ve RPC (Remote Procedure Call) protokolünü kullanır. rpcbind
servisi, bu RPC hizmetlerinin hangi portlarda çalıştığını izler ve istemcilere bildirir. Bu, NFS istemcilerinin sunucuya doğru portlar üzerinden bağlanmasını sağlar ve bu olmadan NFS mount başarısız olur.
# MacOs'da rancher desktop vm'ine baglanmak icin.
$ cd /Users/<your-username>/Library/Application Support/rancher-desktop/lima/0
$ ssh -F ssh.config lima-0
# on rancher-vm
$ sudo su -
$ /etc/init.d/rpcbind start
$ /etc/init.d/rpcbind status
* status: started
NFS CSI Driver Kubernetes Kurulum
- Kurulumu helm ile yapacagiz.
# helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system
# k get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6799fbcd5-zjlhn 1/1 Running 0 61m
csi-nfs-controller-696899cf95-wqf5b 4/4 Running 0 15m
csi-nfs-node-qsckg 3/3 Running 0 15m
helm-install-traefik-crd-c4pmh 0/1 Completed 0 61m
helm-install-traefik-g7llb 0/1 Completed 1 61m
local-path-provisioner-6f5d79df6-bnln2 1/1 Running 0 61m
metrics-server-54fd9b65b-wnnbw 1/1 Running 0 61m
svclb-traefik-5a888560-skkg7 2/2 Running 0 61m
traefik-7d5f6474df-4xdsx 1/1 Running 0 61m
- Storage Class tanimi yapilir.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
server: <your-nfs-server-hostname-or-ip>
share: /opt/data
reclaimPolicy: Delete
volumeBindingMode: Immediate
- Default storage class’i degistirelim.
# kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
# kubectl patch storageclass nfs-csi -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path rancher.io/local-path Delete WaitForFirstConsumer false 63m
nfs-csi (default) nfs.csi.k8s.io Delete Immediate false 59m
- Ornek PVC: Burada storageClass belirtebilirsiniz, belirtmezseniz de default storage class’i degistirdigimiz icin nfs-csi kullanacaktir.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi