Speichern von Anwendungsdaten mit PersistentVolumes

KubernetesBeginner
Jetzt üben

Einführung

In diesem Lab erfahren Sie, wie Sie Anwendungsdaten mit PersistentVolumes in Kubernetes speichern können.

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

In diesem Lab erstellen Sie ein PersistentVolume und verwenden es, um Daten aus einer einfachen Webanwendung zu speichern. Anschließend ändern Sie die Anwendung so, dass sie einen PersistentVolumeClaim (PVC) verwendet, um auf das PersistentVolume zuzugreifen. Abschließend ändern Sie den PVC, um bestimmte Speicherressourcen anzufordern.

Starten Sie den Minikube-Cluster

Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.

  1. Navigieren Sie zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie zum 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 Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Je nach 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
    • Suchen Sie nach Komponenten wie kubelet und apiserver, die als Running aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Falls Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.

Erstellen Sie ein 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 einem Zugriffsmodus von ReadWriteOnce. Das Feld hostPath gibt an, dass die Daten auf dem Host-Rechner unter dem Pfad /mnt/data gespeichert werden. Das Feld persistentVolumeReclaimPolicy ist auf Retain gesetzt, was bedeutet, dass die Daten auch dann erhalten bleiben, wenn das PersistentVolume gelöscht wird.

Wenden Sie das PersistentVolume auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f pv.yaml

Bereitstellen einer einfachen Webanwendung

In diesem Schritt werden Sie eine einfache Webanwendung bereitstellen, die Daten auf dem PersistentVolume speichert, das Sie in Schritt 1 erstellt haben. 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 einer Replik und einem Container, der das nginx-Image ausführt. Das Feld volumeMounts gibt an, dass der Container das PersistentVolume unter dem Pfad /usr/share/nginx/html/data einhängen soll. Das Feld volumes gibt an, dass der Container einen PersistentVolumeClaim namens my-pvc verwenden soll.

Wenden Sie das Deployment auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f web-app.yaml

Erstellen Sie einen PersistentVolumeClaim

In diesem Schritt erstellen Sie einen PersistentVolumeClaim (PVC), der verwendet wird, um Speicherplatz vom PersistentVolume anzufordern, das Sie in Schritt 1 erstellt haben. 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 einen PersistentVolumeClaim mit einem Zugriffsmodus von ReadWriteOnce und einer Anforderung von 500Mi Speicherplatz vom PersistentVolume.

Wenden Sie den PersistentVolumeClaim auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f pvc.yaml

Überprüfen der Datenpersistenz

In diesem Schritt überprüfen Sie, ob die Daten auf dem PersistentVolume (Dauerhaftes Volume) gespeichert werden. Sie greifen auf die Webanwendung zu, die im Container läuft, und schreiben einige Daten in das PersistentVolume.

Finden Sie zunächst den Namen des Pods, der Ihre Anwendung ausführt, indem Sie den folgenden Befehl ausführen:

kubectl get pods -l app=web-app

Sie sollten einen einzelnen Pod sehen, der Ihre Anwendung ausführt. Notieren Sie sich den Namen des Pods.

Führen Sie als Nächstes den folgenden Befehl aus, um eine Shell-Sitzung in dem Container zu öffnen, der Ihre Anwendung ausführt:

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

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, ob die Datei, die Sie im Datenverzeichnis erstellt haben, noch existiert, mit dem folgenden Befehl:

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.

Ändern der Speicherressourcen des PersistentVolumeClaims (PVC)

In diesem Schritt ändern Sie den PersistentVolumeClaim (PVC), um bestimmte Speicherressourcen vom PersistentVolume anzufordern. Sie ändern die Datei pvc.yaml, um 1Gi Speicherplatz anstelle von 500Mi anzufordern.

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

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

kubectl edit storageclass standard
Beispiel für die Änderung des PVC-Speichers

Wenden Sie den aktualisierten PersistentVolumeClaim auf Ihren Cluster mit folgendem Befehl 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 können. Sie haben ein PersistentVolume erstellt, eine einfache Webanwendung bereitgestellt, die das PersistentVolume nutzt, einen PersistentVolumeClaim (PVC) erstellt, um Speicherplatz vom PersistentVolume anzufordern, und den PersistentVolumeClaim geändert, um bestimmte Speicherressourcen anzufordern. Sie haben auch überprüft, dass die Daten auf dem PersistentVolume gespeichert bleiben, auch wenn der Container beendet oder auf einen anderen Knoten verschoben wird.