StatefulSets enthalten eine Reihe von Pods mit eindeutigen, dauerhaften Identitäten und stabilen Hostnamen. Eine Pod-Vorlage wird in einem Statefulset verwendet, das eine Spezifikation für seine Pods enthält, Pods werden anhand dieser Spezifikation erstellt. Wir können zustandsbehaftete Anwendungen und geclusterte Anwendungen mithilfe von Statefulsets in Kubernetes bereitstellen. StatefulSet kann aktualisiert werden, indem Änderungen an seiner Pod-Spezifikation vorgenommen werden, die seine Container-Images und Volumes enthält.
StatefulSets können verwendet werden, wenn die Anwendungen eine der folgenden Eigenschaften benötigen.
- Stabile, eindeutige Netzwerkkennungen.
- Stabiler, persistenter Speicher.
- Geordnete, reibungslose Bereitstellung und Skalierung.
- Bestellte, automatische fortlaufende Updates.
Bei einem StatefulSet mit N Replikaten werden Pods bei der Bereitstellung nacheinander in der Reihenfolge {0..N-1} erstellt. Wenn Pods gelöscht werden, werden sie in umgekehrter Reihenfolge von {N-1..0}.
beendetUm mehr über Statefulset zu erfahren, klicken Sie hier.
In diesem Artikel erstellen wir ein Statefulset mit Repliken von Nginx-Pods. Wir werden Operationen an den Pods durchführen, um zu sehen, wie sie gelöscht und erstellt werden.
Voraussetzungen
- Kubernetes-Cluster mit mindestens einem Worker-Knoten.
Wenn Sie erfahren möchten, wie Sie einen Kubernetes-Cluster erstellen, klicken Sie hier. Dieser Leitfaden hilft Ihnen beim Erstellen eines Kubernetes-Clusters mit 1 Master und 2 Knoten auf AWS Ubuntu 18l04 EC2-Instances.
Was wir tun werden
- Erstellen Sie ein StatefulSet
Erstellen Sie ein Statefulset
Erstellen Sie eine Datei und fügen Sie ihr die folgende Statefulset-Definition hinzu.
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
In diesem Beispiel
- Ein Headless-Dienst namens
nginx
, wird verwendet, um das Netzwerk zu steuern. - Das StatefulSet mit dem Namen web hat 3 Replikate des nginx-Containers, die in einzigartigen Pods gestartet werden.
- nginx-Image mit Version slim:0.8 wird zum Bereitstellen von Nginx verwendet.
Um ein Statefulset zu erstellen, führen Sie die folgenden Befehle aus.
kubectl get statefulset
kubectl create -f statefulset.yml
Führen Sie die folgenden 2 Befehle aus, um das im obigen Schritt erstellte Statefulset und den Dienst aufzulisten.
kubectl get statefulset
kubectl-Get-Service
Rufen Sie die Pods mit dem folgenden Befehl ab und sehen Sie, dass die Pods Nummern als Suffix im Pod-Namen haben.
kubectl erhält Pods
Führen Sie die folgenden Befehle aus, um die vollständigen Details des Statefulsets abzurufen.
kubectl get statefulset
kubectl beschreibt statefulset web
Lassen Sie uns nun die Pods löschen und sehen, wie Namen erhalten bleiben, selbst nachdem neue Pods erstellt wurden.
Wir löschen 2 Pods, um zu sehen, welche Namen den neuen Pods bei der Erstellung zugewiesen werden.
kubectl erhält Pods
kubectl Pods löschen web-0 web-2
kubectl erhält Pods
Im obigen Screenshot sehen Sie, dass neu erstellte Pods auch nach dem Löschen der Pods denselben Namen erhalten.
Fazit
In diesem Artikel haben wir ein Statefulset erstellt und Operationen darauf ausgeführt, um seine Details zu überprüfen. Wir haben die Pods auch gelöscht, um zu sehen, wie der Name des Pods erhalten bleibt und derselbe nach dem Löschen den neu erstellten Pods zugewiesen wird.