Verwenden des StatefulSets-Controllers

KubernetesKubernetesBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In Kubernetes werden StatefulSets verwendet, um zustandsbehaftete Anwendungen zu verwalten. Im Gegensatz zu herkömmlichen zustandslosen Anwendungen benötigen zustandsbehaftete Anwendungen stabile, eindeutige Netzwerkidentifikatoren und persistenten Speicher. In diesem Lab (Übungsumgebung) werden wir lernen, wie man Stabilität mit StatefulSets in Kubernetes modelliert.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} kubernetes/get -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} kubernetes/create -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} kubernetes/delete -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} kubernetes/apply -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} kubernetes/scale -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} kubernetes/describe -.-> lab-9205{{"Verwenden des StatefulSets-Controllers"}} end

Starten des Minikube-Clusters

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 Standardprojektordner:

    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.
    • Minikube kann je nach Leistung Ihres Systems einige Minuten dauern, um zu starten.
  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 (Läuft) aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

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

Erstellen von PV und PVC

Der erste Schritt besteht darin, einen Pod (Kubernetes-Einheit) mit einem Persistent Volume (PV, dauerhafter Speicher) und einem Persistent Volume Claim (PVC, Anspruch auf dauerhaften Speicher) zu erstellen. PVs und PVCs werden verwendet, um Daten dauerhaft zu speichern und auch nach einem Neustart des Pods darauf zugreifen zu können.

Um dies zu tun, werden Sie zunächst ein PV erstellen.

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

Speichern Sie den obigen Code in einer Datei mit dem Namen pv.yaml und führen Sie den folgenden Befehl aus:

kubectl apply -f pv.yaml

Dieser Befehl erstellt ein PV namens my-pv mit einer Kapazität von 1Gi und einem Host-Pfad von /mnt/data.

Als Nächstes werden Sie einen PVC erstellen, der 1Gi Speicherplatz vom PV anfordert.

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

Speichern Sie den obigen Code in einer Datei mit dem Namen pvc.yaml und führen Sie den folgenden Befehl aus:

kubectl apply -f pvc.yaml

Dieser Befehl erstellt einen PVC namens my-pvc, der 1Gi Speicherplatz anfordert.

Erstellen eines StatefulSets

Erstellen Sie eine Datei mit dem Namen statefulset.yaml mit folgendem Inhalt:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.7
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

In dieser Datei definieren wir ein StatefulSet namens web, das drei Replikate eines NGINX-Pods erstellt. Wir definieren auch einen Service namens web, der die NGINX-Pods mithilfe der app: nginx-Bezeichnung auswählt. Schließlich definieren wir eine Vorlage für einen persistenten Volumenanfrage (Persistent Volume Claim) für die Daten des NGINX-Pods.

Um das StatefulSet zu erstellen, führen Sie den folgenden Befehl aus:

kubectl apply -f statefulset.yaml

Sie können den Status des StatefulSets überprüfen, indem Sie den folgenden Befehl ausführen:

kubectl get statefulsets

Sobald das StatefulSet läuft, können Sie auf die NGINX-Pods zugreifen, indem Sie den folgenden Befehl ausführen:

kubectl get pods
kubectl exec -it web-0 -- /bin/bash

Ersetzen Sie web-0 durch den Namen eines beliebigen NGINX-Pods, der vom StatefulSet erstellt wurde.

Herzlichen Glückwunsch, Sie haben erfolgreich ein StatefulSet in Kubernetes erstellt!

Aktualisieren eines StatefulSets

In Kubernetes können Sie die Pods eines StatefulSets aktualisieren, indem Sie seine Vorlage (template) ändern. Lassen Sie uns die Datei statefulset.yaml aktualisieren, um NGINX Version 1.20.0 zu verwenden.

Aktualisieren Sie die Datei statefulset.yaml wie folgt:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

Um das StatefulSet zu aktualisieren, führen Sie den folgenden Befehl aus:

kubectl apply -f statefulset.yaml

Sie können den Status des StatefulSets überprüfen, indem Sie den folgenden Befehl ausführen:

kubectl get statefulsets

Herzlichen Glückwunsch, Sie haben erfolgreich ein StatefulSet in Kubernetes aktualisiert!

Skalieren eines StatefulSets

In Kubernetes können Sie ein StatefulSet hoch- oder herunterskalieren, indem Sie das Feld replicas ändern. Skalieren wir unser web-StatefulSet auf fünf Replikate.

Aktualisieren Sie die Datei statefulset.yaml wie folgt:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

Um das StatefulSet zu aktualisieren, führen Sie den folgenden Befehl aus:

kubectl apply -f statefulset.yaml

Sie können den Status des StatefulSets überprüfen, indem Sie den folgenden Befehl ausführen:

kubectl get statefulsets

Herzlichen Glückwunsch, Sie haben erfolgreich ein StatefulSet in Kubernetes skaliert!

Löschen eines StatefulSets

In Kubernetes können Sie ein StatefulSet löschen, indem Sie den folgenden Befehl ausführen:

kubectl delete statefulset web

Dadurch wird das web-StatefulSet und alle seine Pods gelöscht.

Herzlichen Glückwunsch, Sie haben das Lab zur Modellierung von Stabilität mit StatefulSets in Kubernetes abgeschlossen!

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Stabilität mit StatefulSets in Kubernetes modelliert. Wir haben ein StatefulSet erstellt, ein StatefulSet aktualisiert, ein StatefulSet skaliert und ein StatefulSet gelöscht. Dies sind die grundlegenden Operationen, die Sie ausführen müssen, wenn Sie mit StatefulSets in Kubernetes arbeiten.