nfs-subdir-external-provisioner
installiert oder willst ihn jetzt installieren (wird gleich erklärt)./student-share
nutztInstallation 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:
Deployment
für den ProvisionerStorageClass
namens nfs-client
/srv/nfs/student-share
für jede PVCpvc-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
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
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.
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"}}}'
kubectl delete pod nfs-test
kubectl delete pvc nfs-pvc
helm uninstall nfs-provisioner -n nfs-storage
kubectl delete namespace nfs-storage