Erstellen und Zugreifen auf NFS-Server von Kubernetes aus auf EO-Lab
Um mehreren Pods, die in einem Kubernetes-Cluster laufen, gleichzeitig Lese- und Schreibzugriff zu ermöglichen, können wir einen NFS-Server verwenden.
In dieser Anleitung werden wir einen NFS-Server auf einer virtuellen Maschine erstellen, eine Dateifreigabe auf diesem Server einrichten und den Zugriff darauf von einem Kubernetes-Pod aus demonstrieren.
Was wir behandeln werden
Einrichten eines NFS-Servers auf einer VM
Einrichten eines Freigabeordners auf dem NFS-Server
Die Freigabe verfügbar machen
Einrichten eines Testpods auf dem Cluster
Voraussetzungen
No. 1 Konto
Sie benötigen ein EO-Lab Hosting-Konto mit Horizon-Schnittstelle https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.
Die Ressourcen, die Sie benötigen und nutzen, spiegeln den Status Ihrer Account-Geldbörse wider. Überprüfen Sie Ihre Kontostatistiken unter https://tenant-manager.eo-lab.org/login.
Nr. 2 Umgang mit Linux und Cloud-Management
Wir gehen davon aus, dass Sie die Grundlagen von Linux und EO-Lab Cloud-Management kennen:
Erstellen, Zugreifen und Verwenden von virtuellen Maschinen Wie erstelle ich eine neue Linux-VM im OpenStack-Dashboard (Horizon)?
Erstellen von Sicherheitsgruppen Wie verwendet man Sicherheitsgruppen in Horizon?
Anbindung von Floating IPs Wie kann man Floating IPs zu einer VM hinzufügen/entfernen?
Nr. 3 Ein laufender Kubernetes-Cluster
You will also need a Kubernetes cluster to try out the commands. To create one from scratch, see Erstellen eines Kubernetes-Clusters mit EO-Lab OpenStack Magnum
Nr. 4 kubectl-Zugang zur Kubernetes-Cluster
Wie bei der Arbeit mit Kubernetes-Clustern üblich, müssen Sie den Befehl kubectl verwenden: Zugriff auf Kubernetes-Cluster nach der Bereitstellung mit Kubectl auf EO-Lab OpenStack Magnum
1. NFS-Server auf einer VM einrichten
Als Voraussetzung für die Erstellung eines NFS-Servers auf einer VM erstellen Sie zunächst auf der Registerkarte Netzwerk in Horizon eine Sicherheitsgruppe, die den eingehenden Datenverkehr von Port 2049 erlaubt.
Erstellen Sie dann eine Ubuntu-VM in Horizon. Verbinden Sie die VM im Auswahldialog Netzwerk mit dem Netzwerk Ihres Kubernetes-Clusters (nicht mit dem Projektnetzwerk oder dem EODATA-Netzwerk). Dadurch wird sichergestellt, dass die Clusterknoten über ein privates Netzwerk Zugriff auf den NFS-Server haben. Fügen Sie dann diese Sicherheitsgruppe mit offenem Port 2049 hinzu.

Wenn die VM erstellt ist, können Sie sehen, dass ihr eine private Adresse zugewiesen wurde. In diesem Fall soll die private Adresse 10.0.0.118 lauten. Notieren Sie sich diese Adresse, um sie später in der NFS-Konfiguration zu verwenden.
Richten Sie eine schwebende IP auf dem VM-Server ein, um SSH zu dieser VM zu ermöglichen.
2. Richten Sie einen gemeinsamen Ordner auf dem NFS-Server ein
SSH auf die VM, dann führen Sie aus:
sudo apt-get update
sudo apt-get install nfs-kernel-server
Erstellen Sie auf der NFS-Server-VM einen Freigabeordner:
sudo mkdir /mnt/myshare
Ändern Sie den Eigentümer der Freigabe so, dass niemand Eigentümer ist. So kann jeder Benutzer auf dem Client auf den freigegebenen Ordner zugreifen. Es können noch restriktivere Einstellungen vorgenommen werden.
sudo chown nobody:nogroup /mnt/myshare
Ändern Sie auch die Berechtigungen des Ordners, so dass jeder die Dateien ändern kann:
sudo chmod 777 /mnt/myshare
Bearbeiten Sie die Datei /etc/exports und fügen Sie die folgende Zeile hinzu:
/mnt/myshare 10.0.0.0/24(rw,sync,no_subtree_check)
Dies bedeutet, dass alle Knoten im Clusternetzwerk auf diese freigegebenen Ordner und Unterordnern im Lese- und Schreibmodus zugreifen können.
3. Machen Sie die Freigabe verfügbar
Führen Sie den folgenden Befehl aus, um die Freigabe verfügbar zu machen:
sudo exportfs -a
Starten Sie dann den NFS-Server mit neu:
sudo systemctl restart nfs-kernel-server
Beenden Sie die NFS-Server-VM.
4. Setzen Sie einen Test-Pod auf dem Cluster ein
Stellen Sie sicher, dass Sie mit kubectl auf Ihren Cluster zugreifen können. Erstellen Sie eine Datei test-pod.yaml mit dem folgenden Inhalt:
test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: default
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
- mountPath: /my-nfs-data
name: test-volume
volumes:
- name: test-volume
nfs:
server: 10.0.0.118
path: /mnt/myshare
Der NFS-Server-Block verweist auf die private IP-Adresse des NFS-Server-Rechners, der sich in unserem Clusternetzwerk befindet. Wenden Sie das yaml-Manifest mit an:
kubectl apply -f test-pod.yaml
Wir können dann die Shell des test-pod mit dem folgenden Befehl aufrufen:
kubectl exec -it test-pod -- sh
und überprüfen, dass der Ordner my-nfs-data ordnungsgemäß eingehängt wurde:

Um dies zu überprüfen, erstellen Sie eine Datei testfile in diesem Ordner und beenden Sie dann den Container. Sie können dann per SSH auf den NFS-Server zurückkehren und überprüfen, ob testfile im Ordner /mnt/myshare verfügbar ist.
