Speichern von Anwendungsdaten mit PersistentVolumes

KubernetesBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie Anwendungsdaten mit PersistentVolumes in Kubernetes speichern.

PersistentVolumes (PVs) sind Kubernetes-Ressourcen, die ein Stück netzwerkbasierten Speicher in einem Cluster repräsentieren. Sie können verwendet werden, um Anwendungsdaten unabhängig vom Container-Lebenszyklus zu speichern. Das bedeutet, dass Daten selbst dann erhalten bleiben, wenn der Container beendet oder auf einen anderen Knoten verschoben wird.

In diesem Lab erstellen Sie ein PersistentVolume und verwenden es zum Speichern von Daten aus einer einfachen Webanwendung. Anschließend modifizieren Sie die Anwendung so, dass sie über ein PersistentVolumeClaim (PVC) auf das PersistentVolume zugreift. Schließlich passen Sie das PVC an, um spezifische Speicherressourcen anzufordern.

Starten des Minikube-Clusters

Bevor Sie Ressourcen erstellen können, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichtgewichtige Kubernetes-Umgebung, die auf Ihrem lokalen Computer ausgeführt wird.

  1. Navigieren Sie zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und wechseln Sie in den Standard-Projektordner:

    cd /home/labex/project
    
  2. Starten Sie Minikube:

    Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:

    minikube start
    
    • Dieser Befehl richtet einen Single-Node-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Abhängig von der Leistung Ihres Systems kann es einige Minuten dauern, bis Minikube gestartet ist.
  3. Überprüfen Sie, ob Minikube läuft:

    Überprüfen Sie den Status des Minikube-Clusters:

    minikube status
    
    • Achten Sie darauf, dass Komponenten wie kubelet und apiserver als Running (Läuft) aufgeführt werden.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Sollten beim Starten von Minikube Probleme auftreten, können Sie die Umgebung bei Bedarf mit minikube delete zurücksetzen.

Erstellen eines PersistentVolume

In diesem Schritt erstellen Sie ein PersistentVolume, das zum Speichern von Daten verwendet werden kann. Sie erstellen eine YAML-Datei namens pv.yaml mit folgendem Inhalt:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data

Diese Datei erstellt ein PersistentVolume mit einer Kapazität von 1Gi und dem Zugriffsmodus ReadWriteOnce. Das Feld hostPath gibt an, dass die Daten auf dem Host-Computer unter dem Pfad /mnt/data gespeichert werden. Das Feld persistentVolumeReclaimPolicy ist auf Retain (Beibehalten) gesetzt, was bedeutet, dass die Daten erhalten bleiben, selbst wenn das PersistentVolume gelöscht wird.

Wenden Sie das PersistentVolume mit dem folgenden Befehl auf Ihren Cluster an:

kubectl apply -f pv.yaml

Bereitstellen einer einfachen Webanwendung

In diesem Schritt stellen Sie eine einfache Webanwendung bereit, die Daten auf dem in Schritt 1 erstellten PersistentVolume speichert. Sie erstellen eine YAML-Datei namens web-app.yaml mit folgendem Inhalt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: web-app
          image: nginx
          volumeMounts:
            - name: data
              mountPath: /usr/share/nginx/html/data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: my-pvc

Diese Datei erstellt ein Deployment mit einem Replik und einem Container, der das Nginx-Image ausführt. Das Feld volumeMounts legt fest, dass der Container das PersistentVolume unter dem Pfad /usr/share/nginx/html/data einbinden soll. Das Feld volumes gibt an, dass der Container ein PersistentVolumeClaim namens my-pvc verwenden soll.

Wenden Sie das Deployment mit dem folgenden Befehl auf Ihren Cluster an:

kubectl apply -f web-app.yaml

Erstellen eines PersistentVolumeClaim

In diesem Schritt erstellen Sie ein PersistentVolumeClaim, das verwendet wird, um Speicherplatz von dem in Schritt 1 erstellten PersistentVolume anzufordern. Sie erstellen eine YAML-Datei namens pvc.yaml mit folgendem Inhalt:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

Diese Datei erstellt ein PersistentVolumeClaim mit dem Zugriffsmodus ReadWriteOnce und einer Anforderung von 500Mi Speicherplatz vom PersistentVolume.

Wenden Sie das PersistentVolumeClaim mit dem folgenden Befehl auf Ihren Cluster an:

kubectl apply -f pvc.yaml

Überprüfen der Datendauerhaftigkeit

In diesem Schritt überprüfen Sie, ob die Daten auf dem PersistentVolume persistent gespeichert werden. Sie greifen auf die im Container laufende Webanwendung zu und schreiben einige Daten in das PersistentVolume.

Suchen Sie zunächst den Namen des Pods, auf dem Ihre Anwendung läuft, indem Sie folgenden Befehl ausführen:

kubectl get pods -l app=web-app

Sie sollten einen einzelnen Pod sehen, auf dem Ihre Anwendung ausgeführt wird. Notieren Sie sich den Namen des Pods.

Führen Sie anschließend den folgenden Befehl aus, um eine Shell-Sitzung in dem Container zu öffnen, in dem Ihre Anwendung läuft:

kubectl exec -it pod-name -- /bin/sh

Ersetzen Sie pod-name durch den Namen des Pods, den Sie sich zuvor notiert haben.

Sobald Sie sich in der Shell-Sitzung befinden, führen Sie den folgenden Befehl aus, um eine test.txt-Datei hinzuzufügen:

echo "This is a test file." > /usr/share/nginx/html/data/test.txt

Dieser Befehl erstellt eine Datei namens test.txt mit dem Text "This is a test file." im Datenverzeichnis des PersistentVolume.

Löschen Sie die Webanwendung mit dem folgenden Befehl:

kubectl delete deployment web-app

Erstellen Sie die Webanwendung mit dem folgenden Befehl neu:

kubectl apply -f web-app.yaml

Überprüfen Sie mit den folgenden Befehlen, ob die im Datenverzeichnis erstellte Datei immer noch existiert:

kubectl get pods -l app=web-app
kubectl exec pod-name -- cat /usr/share/nginx/html/data/test.txt

Ersetzen Sie pod-name durch den Namen des Pods, den Sie sich zuvor notiert haben.

Modifizieren der PVC-Speicherressourcen

In diesem Schritt modifizieren Sie das PVC, um spezifische Speicherressourcen vom PersistentVolume anzufordern. Ändern Sie die Datei pvc.yaml so ab, dass 1Gi Speicher statt 500Mi angefordert werden.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Fügen Sie in der letzten Zeile der StorageClass das Feld allowVolumeExpansion: true hinzu.

kubectl edit storageclass standard

Beispiel für die Modifikation des PVC-Speichers

Wenden Sie das aktualisierte PersistentVolumeClaim mit dem folgenden Befehl auf Ihren Cluster an:

kubectl delete deployment web-app
kubectl delete pvc my-pvc
kubectl apply -f web-app.yaml
kubectl apply -f pvc.yaml

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Anwendungsdaten mit PersistentVolumes in Kubernetes speichern. Sie haben ein PersistentVolume erstellt, eine einfache Webanwendung bereitgestellt, die dieses PersistentVolume genutzt hat, ein PersistentVolumeClaim erstellt, um Speicher vom PersistentVolume anzufordern, und das PersistentVolumeClaim so angepasst, dass spezifische Speicherressourcen angefordert werden. Sie haben außerdem überprüft, dass die Daten auf dem PersistentVolume selbst dann erhalten bleiben, wenn der Container beendet oder auf einen anderen Knoten verschoben wird.