10. Juni 2022

3 Best Practices, die Sie bei der Verwendung von Kubernetes StatefulSet kennen sollten

Das Erstellen einer geclusterten Umgebung jeglicher Art erfordert viel Arbeit, um eine konsistente Bereitstellung und Skalierung zu ermöglichen. 

Die gute Nachricht ist, dass Sie können Container in großem Umfang verwalten Verwendung von StatefulSets in Kubernetes. 

StatefulSets sind für die Ausführung zustandsbehafteter Anwendungen in Kubernetes mit dediziertem, persistentem Speicher vorgesehen.

In diesem Leitfaden behandeln wir drei Best Practices, von denen Sie lernen können, wenn Sie Kubernetes StatefulSets verwenden.  

Aber zunächst…

Was ist Kubernetes StatefulSet?

Kubernetes StatefulSet ist das Workload Application Programming Interface (API)-Objekt, das zum Verwalten von zustandsbehafteten Anwendungen verwendet wird. 

Sie können StatefulSets verwenden, um eine Reihe von Pods bereitzustellen und zu skalieren, was Garantien für die Reihenfolge und Eindeutigkeit des Pods bietet.  

Ähnlich wie bei einer Bereitstellung, ein Kubernetes StatefulSet kann Pods verwalten basierend auf einer identischen Containerspezifikation. 

Im Gegensatz zu einem Deployment kann ein StatefulSet jedoch Sticky-Identitäten für jeden Pod beibehalten. Obwohl die Pods aus derselben Spezifikation erstellt werden, sind sie nicht austauschbar, was bedeutet, dass jeder Pod eine dauerhafte Kennung hat, die er während jeder Umplanung beibehält. 

Wenn Sie mithilfe von Speichervolumes Persistenz für eine Workload bereitstellen möchten, nutzen Sie ein StatefulSet als Teil der Lösung. 

Während einzelne Pods innerhalb eines StatefulSets fehleranfällig sein können, kann die dauerhafte Pod-Kennung es einfacher machen, die vorhandenen Volumes den neuen Pods zuzuordnen, die die ausgefallenen Pods ersetzen.  

Ein typischer Anwendungsfall von StatefulSet ist, wenn Sie primäre oder sekundäre Server bereitstellen müssen, z. B. einen Datenbankcluster, bei dem Sie den Hostnamen jedes Servers kennen müssen, um den Cluster zu starten. 

Ein weiterer häufiger Anwendungsfall von StatefulSet ist, wenn Sie in einer bestimmten Reihenfolge nach oben und unten skalieren, z. B. wenn Sie mit dem primären Knoten beginnen möchten, gefolgt vom sekundären Knoten. 

Verwenden Sie StatefulSet am besten, wenn Sie Folgendes benötigen:

  • Stabile und eindeutige Netzwerkidentitäten
  • Geordnete und eindeutige Bereitstellung und Skalierung
  • Dauerhafter und stabiler Speicher für alle Ihre Anwendungsplanung und -umplanung

Bewährte Tipps zur Verwendung von StatefulSet

Im Folgenden finden Sie einige Best Practices für die Verwendung von Kubernetes StatefulSet.

1. Verwenden Sie den Befehl kubectl apply a, um eine StatefulSet-Ressource zu erstellen

Der Befehl verwendet Manifestdateien zum Erstellen, Aktualisieren und Entfernen von Ressourcen in Ihren Clustern. Es ist eine deklarative Methode der Objektkonfiguration, die Schreibvorgänge beibehält, die an Live-Objekten vorgenommen wurden, ohne Änderungen wieder in die Objektkonfigurationsdateien zusammenzuführen. 

Nicht vergessen Erstellen Sie eine StorageClass, wenn Sie Cluster verwenden mit Windows Server-Knotenpools, da die standardmäßige StorageClass verwendet wird ext4 als Dateisystemtyp (der nur für Linux-Container funktioniert).

Benutze auch NTFS als Dateispeichertyp, wenn Sie einen nichtflüchtigen Compute Engine-Speicher verwenden. 

Erstellen Sie ein StatefulSet-Manifest mit der von Ihnen definierten StorageClass. 

Ihr Manifest kann beispielsweise vier erstellen PersistentVolumeClaim und PersistentVolume Paare, die vier nichtflüchtige Festplatten der Computer-Engine darstellen. Jeder Pod innerhalb des StatefulSet verbraucht eine einzelne persistente Festplatte. 

Fügen Sie außerdem einen Knotenselektor zu Ihrer Pod-Spezifikation hinzu, um sicherzustellen, dass Ihre Pods korrekt auf Windows Server-Knoten geplant werden. 

Erstellen Sie abschließend eine StatefulSet-Ressource, indem Sie diesen Befehl ausführen: 

kubectl apply -f STATEFULSET_FILE

Denken Sie daran zu ersetzen STATEFULSET_FILE mit dem Namen der Manifestdatei. 

2. Kennen Sie die verschiedenen Methoden zum Aktualisieren eines StatefulSets

Mit der deklarativen Methode können Sie StatefulSets auf verschiedene Weise aktualisieren kubectl gelten sein das Üblichste. 

Zum Beispiel wenn Sie die Google Kubernetes Engine verwenden und das StatefulSet in Ihrem bevorzugten Editor oder direkt aus Ihrer Shell aktualisieren möchten, verwenden Sie kubectl bearbeiten. Sie können sich auch für den YAML-Editor im GKW-Workloads-Menü in der Cloud-Konsole entscheiden. 

Außerdem können Sie Aktualisierungen der Pods-Spezifikation (für eine StatefulSet-Ressource) einführen, z. B. deren Konfiguration, Image oder Ressourcenanforderungen und -nutzung.  

Wenden Sie eine aktualisierte oder neue Manifestdatei an, wenn Sie das StatefulSet mithilfe von aktualisieren kubectl gelten. Es ist hilfreich, wenn Sie verschiedene Änderungen an StatefulSet vornehmen, z. B. wenn Sie neue Anwendungsversionen skalieren oder angeben.  

Hinweis: Verwenden von kubectl gelten Das Aktualisieren einer Ressource funktioniert nur, wenn die Ressource mit erstellt wurde kubectl create – -save-config or kubectl gelten.

Sie können auch StatefulSets verwenden updateStrategie Feld, mit dem Sie automatische Rolling-Updates für Ressourcenanforderungen, Labels, Limits, Container und Anmerkungen für die Pods in einem StatefulSet einrichten und deaktivieren können.  

Kennen Sie die verschiedenen Methoden zum Aktualisieren Ihres StatefulSets und bestimmen Sie, welche für Sie am besten geeignet ist. 

3. Bestimmen Sie, wann StatefulSets verwendet werden sollen

Es gibt Fälle, in denen Sie Kubernetes StatefulSets besser verwenden als Deployments.

Einige dieser Situationen können die folgenden umfassen.

  • Herunterskalieren oder Löschen eines StatefulSets. Ihre Daten können sicher bleiben, wenn Sie ein StatefulSet herunterskalieren oder löschen, da dadurch die mit der Stateful-App verknüpften Volumes nicht gelöscht werden. 

Dies ist in der Regel wertvoller als das automatische Löschen aller zugehörigen StatefulSet-Ressourcen. 

Wenn beispielsweise der MySQL-Pod neu gestartet oder gelöscht wird, können Sie auf die Daten im selben Volume zugreifen. 

  • Bereitstellen und Skalieren einer MySQL-Datenbank. Angenommen, Sie haben eine MySQL-Datenbank im K8s-Cluster bereitgestellt und auf drei Replikate skaliert. Eine Front-End-App möchte auch auf Ihren bereitgestellten MySQL-Cluster zugreifen, um Daten zu lesen und zu schreiben.  

Die Leseanfrage wird an drei Pods weitergeleitet, aber die Schreibanfrage wird nur an den primären oder ersten Pod weitergeleitet. Dann werden die Daten mit den anderen Pods synchronisiert. 

All dies ist möglich, wenn Sie StatefulSets verwenden. 

Kubernetes StatefulSet-Einschränkungen

Während es wichtig ist, die Best Practices bei der Verwendung eines Kubernetes StatefulSet zu kennen, ist es ebenso wichtig, seine Einschränkungen zu verstehen, zu denen die folgenden gehören. 

  • Der Speicher eines bestimmten Pods muss von einem vorab bereitgestellt oder von PersistentVolume Provisioner bereitgestellt werden (basierend auf der angeforderten Speicherklasse).  
  • StatefulSets bieten keine Garantien für die Pod-Beendigung, wenn StatefulSets gelöscht werden. Um beim Löschen eines StatefulSets eine ordnungsgemäße und geordnete Pod-Beendigung zu erreichen, können Sie das StatefulSet vor dem Löschen auf null herunterskalieren. 
  • StatefulSets erfordern einen Headless Service, der für die Netzwerkidentität der Pods verantwortlich ist. Sie müssen diesen Dienst erstellen. 
  • Sie können in einen fehlerhaften Zustand geraten, der manuell behoben werden muss, wenn Sie fortlaufende Updates über die standardmäßige Pod-Verwaltungsrichtlinie (BestelltFertig). 

Kubernetes StatefulSet richtig nutzen

Die Verwaltung verteilter Systeme und zustandsbehafteter Anwendungen auf Kubernetes kann ein umfangreiches und komplexes Unterfangen sein, aber es ist kein Hexenwerk. 

Beginnen Sie mit den Grundlagen und befolgen Sie Best Practices bei der Verwendung von StatefulSets, um die Verwaltung und Ausführung von zustandsbehafteten Anwendungen in Kubernetes effektiver und effizienter zu gestalten. 

Technologie

Über den Autor 

Kyrie Mattos


{"email": "E-Mail-Adresse ungültig", "url": "Website-Adresse ungültig", "erforderlich": "Erforderliches Feld fehlt"}