Als Kubernetes die neue StatefulSet-Funktion mit K8s v1.5 ankündigte (die vom alten PetSet
Namen konvertiert wurde ), veröffentlichten sie einen wirklich guten Blog-Beitrag, in dem ein Beispiel für die Verwendung vorgestellt wurde: https://kubernetes.io/blog/2016/ 12 / statefulset-run-scale-stateful-applications-in-kubernetes /
Der erste Absatz enthält eine wirklich gute Beschreibung der Unterscheidungsmerkmale, die mir immer in den Sinn gekommen sind:
... "höchstens ein Pod pro Index" für die Bereitstellung der Pods im Set. Zusammen mit der geordneten Bereitstellung, der geordneten Beendigung, eindeutigen Netzwerknamen und dem dauerhaften stabilen Speicher ...
Zerlegen Sie die wichtigen:
Eindeutige Netzwerknamen
In einer Bereitstellung spielt der Netzwerkname keine Rolle, da jeder Pod in der Lage sein sollte, die Arbeit aufzunehmen. Wenn Sie jedoch Dinge wie einen Stateful-Cluster ausführen, haben Sie möglicherweise das Konzept von "Mastern" und "Slaves". Mit dieser eindeutigen Netzwerkbenennung können Sie die Unterscheidung beibehalten, indem Sie auf einen bestimmten Pod mit einem vorhersehbaren inkrementellen Namen verweisen .
Bestellte Kündigung
Dies ist wichtig für Neubereitstellungen in einem Stateful Cluster, da Sie möglicherweise über kritische Computer verfügen, die länger aktiv bleiben müssen. Wenn Sie Koordinator- oder Führungsknoten haben, sollten diese als letzte neu gestartet werden. Mit StatefulSets können Sie dies tun. Der verlinkte Blog-Beitrag zeigt sogar ein Beispiel dafür.
Dauerhafte stabile Lagerung
Dies ist wohl der wichtigste Unterschied. Standardmäßig behalten StatefulSets ihren Speicher bei. Kubernetes löscht den an ein StatefulSet angehängten Speicher nicht automatisch. Dasselbe kann mit Bereitstellungen erreicht werden, ist jedoch nicht die Standardeinstellung.