Wie man ein StatefulSet in Kubernetes erstellt

StatefulSets enthalten ein Set von Pods mit eindeutigen, dauerhaften Identitäten und stabilen Hostnamen. In einem Statefulset wird ein Pod-Template verwendet, welches eine Spezifikation für seine Pods enthält, Pods werden mit dieser Spezifikation erstellt. Wir können Stateful-Applikationen und geclusterte Applikationen mit Statefulsets in Kubernetes deployen. StatefulSet kann aktualisiert werden, indem man Änderungen an seiner Pod-Spezifikation vornimmt, die seine Container-Images und Volumes enthält.

StatefulSets können verwendet werden, wenn die Anwendungen eine der folgenden Eigenschaften benötigen.

  • Stabile, eindeutige Netzwerkbezeichner.
  • Stabiler, persistenter Speicher.
  • Geordnete, anmutige Bereitstellung und Skalierung.
  • Geordnete, automatisierte Rolling Updates.

Bei einem StatefulSet mit N Replikaten werden Pods beim Deployment sequentiell erstellt, in der Reihenfolge von {0..N-1}. Wenn Pods gelöscht werden, werden sie in umgekehrter Reihenfolge beendet, von {N-1..0}.

Um mehr über Statefulset zu erfahren, klicke hier.

In diesem Artikel werden wir ein Statefulset mit Repliken von Nginx Pods erstellen. Wir werden Operationen mit den Pods durchführen, um zu sehen, wie sie gelöscht und erstellt werden.

Vorraussetzungen

  1. Kubernetes Cluster mit mindestens 1 Worker Node.
    Wenn du lernen willst, wie man einen Kubernetes Cluster erstellt, klicke hier. Diese Anleitung wird dir helfen, einen Kubernetes Cluster mit 1 Master und 2 Nodes auf AWS Ubuntu 18l04 EC2 Instanzen zu erstellen.

Was wir tun werden

  1. Erstelle ein Statefulset

Erstelle ein Statefulset

Erstelle eine Datei und füge die folgende Statefulset Definition darin ein.

vim statefulset.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web

statefulset

In diesem Beispiel,

  • Ein Headless Service, namensnginx, wird verwendet, um das Netzwerk zu kontrollieren.
  • Das StatefulSet, namens web, hat 3 Repliken des nginx Containers, die in einzelnen Pods gestartet werden.
  • Das nginx Image mit der Version slim:0.8 wird verwendet, um Nginx zu deployen.

Um ein Statefulset zu erstellen, führe die folgenden Befehle aus.

kubectl get statefulset

kubectl create -f statefulset.yml

create-stateful-set

Führe die folgenden 2 Befehle aus, um das Statefulset und den Service aufzulisten, die im obigen Schritt erstellt wurden.

kubectl get statefulset

kubectl get service

get-statefulset-and-service

Hole die Pods mit folgendem Befehl und sieh, dass die Pods Zahlen als Suffix im Podnamen haben.

kubectl get pods

get-pods-in-statefulset

Um die kompletten Details des Statefulsets zu erhalten, führe die folgenden Befehle aus.

kubectl get statefulset

kubectl describe statefulset web

beschreibe-zustand-fu-set

Nun wollen wir die Pods löschen und sehen, wie die Namen erhalten bleiben, auch wenn neue Pods erstellt werden.

Wir löschen 2 Pods um zu sehen, welche Namen den neuen Pods bei der Erstellung zugewiesen werden.

kubectl get pods

kubectl delete pods web-0 web-2

kubectl get pods

recreate-pods

Im obigen Screenshot kannst du sehen, dass auch nach dem Löschen der Pods, die neu erstellten Pods den gleichen Namen erhalten.

Fazit

In diesem Artikel haben wir ein Statefulset erstellt und Operationen darauf ausgeführt, um seine Details zu überprüfen. Wir haben auch die Pods gelöscht, um zu sehen, wie der Name des Pods erhalten bleibt und den neu erstellten Pods nach dem Löschen der gleiche Name zugewiesen wird.

Das könnte dich auch interessieren …