NFS nettverksdisk
NFS – Server
Krav til server
Vi anbefaler Ubuntu 24.04.
Vi anbefaler en server med to disker, én OS-disk og én datadisk. Datadisken bør så settes opp med LVM.
sudo fdisk /dev/vdb
Tast: g, n, enter, enter, enter, w
sudo pvcreate /dev/vdb1
Lag en volume group:
sudo vgcreate datadisk /dev/vdb1
Du kan nå se hvor mye ledig disk du har med:
sudo vgs
Installasjon
NFS server er tilgjengelig via Ubuntu sine pakke-systemer. Denne installerer pakken «NFS Server»
sudo apt update sudo apt install nfs-kernel-server
Sette opp ny nettverksdisk
Lag en ny disk ved å bruke LVM
sudo lvcreate -L 2G -n disk3 datadisk
Sett så opp filsystem:
sudo mkfs.ext4 /dev/datadisk/disk3
Mount denne lokalt
sudo mkdir /mnt/disk3 sudo chown nobody:nogroup /mnt/disk3
Rediger fstab:
vi /etc/fstab
Legg til:
/dev/datadisk/disk3 /mnt/disk3 ext4 defaults 0 1
og mount disken:
sudo mount -a -v
Deretter må disken deles via NFS. En linje per klient.
vi /etc/exports
/mnt/disk3 <klientip>(rw,sync,no_subtree_check)
Deretter må dette aktiveres
sudo exportfs -a
NFS – Klient
Bruke nettverksdisk på Linux
Installer NFS-klientprogram:
sudo apt update sudo apt install nfs-common
Du kan nå mounte disken ved å legge til følgende i /etc/fstab:
vi /etc/fstab
<serverip>:/mnt/disk3 /mnt/disk3 nfs defaults 0 0
Deretter koble til:
sudo mount -a -v
Disken er nå tilgjengelig på
ls -la /mnt/disk3
Og vil automatisk bli koblet på ved restart.
Hvis du kun ønsker å koble på disken som en engangsgreie, kan du kjøre:
sudo mount -t nfs <serverip>:/mnt/disk3 /mnt/disk3
Og for å koble av:
sudo umount /mnt/disk3
Bruke NFS nettverksdisk på Kubernetes
Kubernetes har innebygget støtte for NFS, men du trenger nfs-klienten installert på alle nodene.
sudo apt install nfs-common
Lag NFS disk på serveren og del den med clusteret.
Lag deretter PV med følgende YAML:
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 2Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: path: "/mnt/disk3" server: "<serverip>" readOnly: false
Denne kan så brukes i en PVC og en pod. Her er YAML for test PVC:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 2Gi volumeName: "nfs-pv"
Og for test-pod:
apiVersion: v1 kind: Pod metadata: name: test-nfs-pod spec: containers: - name: web-server image: nginx volumeMounts: - name: test-disk mountPath: /usr/share/nginx/html resources: limits: cpu: 100m memory: 200Mi volumes: - name: test-disk persistentVolumeClaim: claimName: test-nfs-pvc readOnly: false
Bruke NFS provisioner
Det er også mulig å sette opp en NFS provisioner som oppretter PVer automatisk når du lager en PVC. Merk at denne ikke tar hensyn til størrelser eller begrensninger, men den kan være nyttig for å enkelt få opp PVer for PVCer. For å installere denne må du først installere Helm:
sudo snap install --classic helm
Så må du legge til følgende repo i Helm:
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
Og så kan du installere den
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=<nfs-server-ip> \ --set nfs.path=<nfs-server-mappe> \ --set storageClass.name=deploi-file-storage-sc
Den er nå klar til bruk med storage class deploi-file-storage-sc.
Du finner mer informasjon om å sette dette opp her:
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner