Erstellen und Zugreifen auf NFS-Server von Kubernetes aus auf CODE-DE

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 CODE-DE 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://administration.code-de.org/login.

Nr. 2 Umgang mit Linux und Cloud-Management

Wir gehen davon aus, dass Sie die Grundlagen von Linux und CODE-DE Cloud-Management kennen:

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 CODE-DE 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 CODE-DE 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.

../_images/nfs_server_2049.png

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:

../_images/image2023-6-1_17-6-3.png

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.

../_images/image2023-6-1_17-8-5.png