k8s-labs-developer

🧪 Übung: Dynamisches Provisionieren mit externem NFS-Share


📘 Voraussetzungen


✅ Ziel


📁 Schritt 1: NFS Provisioner installieren

Installation des NFS-Clients auf beiden Nodes (k8s-node-XX.dockerlabs.de) per sudo apt install nfs-client -y

Verwende den offiziellen Helm-Chart:

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update

Dann installieren wir den Provisioner in einem eigenen Namespace:

kubectl create namespace nfs-storage

helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --namespace nfs-storage \
  --set nfs.server=nfs.dockerlabs.de \
  --set nfs.path=/srv/nfs/student-share \
  --set storageClass.name=nfs-client \
  --set storageClass.defaultClass=false

Das erstellt:


📁 Schritt 2: PersistentVolumeClaim anlegen

pvc-nfs.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs-client
kubectl apply -f pvc-nfs.yaml

📁 Schritt 3: Pod mit gemountetem Volume

nfs-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nfs-test
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["/bin/sh", "-c", "while true; do date >> /mnt/nfs/dates.log; sleep 10; done"]
    volumeMounts:
    - mountPath: /mnt/nfs
      name: nfs-vol
  volumes:
  - name: nfs-vol
    persistentVolumeClaim:
      claimName: nfs-pvc
kubectl apply -f nfs-test-pod.yaml

📁 Schritt 4: Überprüfen

kubectl exec -it nfs-test -- cat /mnt/nfs/dates.log

Du solltest fortlaufend neue Timestamps sehen – das zeigt, dass der Pod schreibend auf das Volume zugreifen kann.


📁 Optional: Standard-StorageClass setzen

Falls du möchtest, dass nfs-client die Default-StorageClass wird:

kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

🧹 Aufräumen

kubectl delete pod nfs-test
kubectl delete pvc nfs-pvc
helm uninstall nfs-provisioner -n nfs-storage
kubectl delete namespace nfs-storage