Ich habe viel in Kubernetes gegraben und mir gefällt, was ich viel sehe! Eine Sache, über die ich keine klare Vorstellung bekommen konnte, ist, wie genau die Unterschiede zwischen den Ressourcen Deployment und StatefulSet unterschieden werden und in welchen Szenarien Sie sie verwenden würden (oder ob eines im Allgemeinen dem anderen vorgezogen wird).
Alle Erfahrungen, die Menschen teilen können, wären fantastisch !!
quelle
deployment
Konfiguration mit einer einfachen Spezifikation zusammengefasst werden kann, um 1 pro Knoten (Daemonset), Replikate oder Stateful Ordering festzulegen.Bereitstellung - Sie geben einen PersistentVolumeClaim an , der von allen Pod-Replikaten gemeinsam genutzt wird. Mit anderen Worten, gemeinsames Volumen.
Der Sicherungsspeicher offensichtlich muss ReadWriteMany oder ReadOnlyMany access , wenn Sie mehr als eine Replik pod haben.
StatefulSet - Sie geben ein volumeClaimTemplates an, damit jedem Replikat-Pod ein eindeutiger PersistentVolumeClaim zugeordnet wird. Mit anderen Worten, kein gemeinsames Volume.
Hier kann der Sicherungsspeicher über ReadWriteOnce accessMode verfügen.
StatefulSet ist nützlich, um Dinge im Cluster auszuführen, z. B. im Hadoop-Cluster oder im MySQL-Cluster, wo jeder Knoten seinen eigenen Speicher hat.
quelle
TL; DR
Die Bereitstellung ist eine Ressource zum Bereitstellen einer zustandslosen Anwendung. Wenn Sie ein PVC verwenden, verwenden alle Replikate dasselbe Volume und keines davon hat seinen eigenen Status.
Statefulsets wird für Stateful-Anwendungen verwendet. Jedes Replikat des Pods hat seinen eigenen Status und verwendet sein eigenes Volume.
DaemonSet ist ein Controller, der sicherstellt, dass der Pod auf allen Knoten des Clusters ausgeführt wird. Wenn ein Knoten zu einem Cluster hinzugefügt / daraus entfernt wird, fügt DaemonSet den Pod automatisch hinzu / löscht ihn.
Ich habe über die detaillierten Unterschiede zwischen Bereitstellungen, StatefulSets und Daemonsets sowie über die Bereitstellung einer Beispielanwendung mithilfe dieser Ressourcen K8s geschrieben: Bereitstellungen vs StatefulSets vs DaemonSets .
quelle
StatefulSet
Verwenden Sie 'StatefulSet' mit Stateful Distributed Applications, für die jeder Knoten einen dauerhaften Status haben muss . StatefulSet bietet die Möglichkeit, eine beliebige Anzahl von Knoten für eine statusbehaftete Anwendung / Komponente über eine Konfiguration zu konfigurieren (Replikate = N).
Es gibt zwei Arten von zustandsverteilten Anwendungen: Master-Master und Master-Slave. Alle Knoten in einer Master-Master-Konfiguration und Slave-Knoten in einer Master-Slave-Konfiguration können ein StatefulSet verwenden.
Beispiele:
Master-Slave -> Datenknoten (Slaves) in einem Hadoop-Cluster
Master-Master -> Datenbankknoten (Master-Master) in einem Cassandra-Cluster
Jeder Pod (Replikat / Knoten) in einem StatefulSet verfügt über eine eindeutige und stabile Netzwerkidentität. Beispielsweise hat in einem Cassandra StatefulSet mit dem Namen 'Cassandra' und der Anzahl der Replikatknoten als N jeder Cassandra-Pod (Knoten):
Siehe: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Einsatz
'Deployment' hingegen eignet sich für zustandslose Anwendungen / Dienste, für die die Knoten keine spezielle Identität benötigen. Ein Load Balancer kann jeden von ihm ausgewählten Knoten erreichen. Alle Knoten sind gleich. Eine Bereitstellung ist nützlich, um über eine Konfiguration eine beliebige Anzahl beliebiger Knoten zu erstellen (Replikate = N).
quelle
Der Unterschied zwischen StatefulSet und Bereitstellung
StatefulSet entspricht einer speziellen Bereitstellung. Jeder Pod in StatefulSet verfügt über eine stabile, eindeutige Netzwerkkennung, mit der andere Mitglieder im Cluster erkannt werden können. Wenn der Name von StatefulSet Kafka ist, heißt der erste Pod Kafka-0, der zweite Kafka-1 und so weiter. Die Start- und Stoppsequenz der vom StatefulSet gesteuerten Pod-Kopie wird gesteuert. Wenn der n-te Pod betrieben wird, laufen die ersten N-1-Pods bereits und sind bereit. Der Pod im StatefulSet verwendet ein stabiles, dauerhaftes Speichervolumen, das von PV oder PVC implementiert wird. Beim Löschen des Pods wird das dem StatefulSet zugeordnete Speichervolumen standardmäßig nicht gelöscht (aus Gründen der Datensicherheit). Das StatefulSet ist an das PV-Volumen gebunden. Wird zum Speichern von Pod-Statusdaten verwendet und auch in Verbindung mit kopflosen Diensten verwendet, die als zu diesem kopflosen Dienst gehörend deklariert wurden.
quelle