
Bei der Erstellung eines Kubernetes-Clusters können Fragen aufkommen: Wie viele Arbeitsknoten sollten konfiguriert werden und welcher Typ ist am besten geeignet? Was ist für ein On-Premise-Cluster besser: den Kauf mehrerer leistungsstarker Server oder die Nutzung von zehn alten Maschinen in Ihrem Rechenzentrum? Und in der Cloud: besser acht Ein-Kern-Instanzen oder zwei Vier-Kern-Instanzen?
Die Antworten auf diese Fragen finden Sie im Artikel im Übersetzungsteam .
Clusterkapazität
Im Allgemeinen kann man ein Kubernetes-Cluster als großen "Superknoten" betrachten. Die gesamte Rechenleistung ist die Summe der Kapazitäten aller einzelnen Knoten.
Es gibt verschiedene Möglichkeiten, die gewünschte Zielkapazität des Clusters zu erreichen. Wenn wir beispielsweise ein Cluster mit einer Gesamtkapazität von 8 Prozessorkernen und 32 GB RAM benötigen, weil die Anwendungsanforderungen dies erfordern, dann könnten wir zwei Knoten mit 16 GB RAM oder vier Knoten mit 8 GB RAM installieren, zwei Quad-Core-Prozessoren oder vier Dual-Core-Prozessoren.
Hier sind nur zwei mögliche Ansätze zur Erstellung eines Clusters:

Beide Optionen bieten einen Cluster mit derselben Kapazität, aber in der unteren Konfiguration sind vier kleinere Knoten installiert, während in der oberen Konfiguration zwei größere Knoten vorhanden sind.
Welche Variante ist besser?
Um diese Frage zu beantworten, betrachten wir die Vorteile beider Optionen. Wir haben sie in einer Tabelle zusammengefasst.
Mehrere große Knoten
Viele kleine Knoten
Einfachere Verwaltung des Clusters (wenn er lokal ist)
Sanfte automatische Skalierung
Günstiger (wenn lokal)
Die Preise unterscheiden sich kaum (in der Cloud)
Ressourcenintensive Anwendungen können gestartet werden
Vollständige Replikation
Ressourcen werden effizienter genutzt (weniger Overhead für System-Daemons)
Höhere Ausfallsicherheit des Clusters
Bitte beachten Sie, dass wir nur über Arbeitsknoten sprechen. Die Wahl der Anzahl und Größe der Hauptknoten ist ein völlig anderes Thema.
Lassen Sie uns also jeden Punkt aus der Tabelle näher besprechen.
Erste Option: mehrere große Knoten
Die extremste Variante wäre ein Arbeitsknoten für die gesamte Kapazität des Clusters. Im obigen Beispiel wäre das ein Arbeitsknoten mit 16 CPU-Kernen und 16 GB RAM.
Vorteile
Vorteil Nr. 1. Einfachere Verwaltung
Es ist einfacher, mehrere Maschinen zu verwalten als eine ganze Flotte. Updates und Patches lassen sich schneller anwenden und die Synchronisierung ist unkomplizierter. Auch die absolute Anzahl der Ausfälle ist geringer.
Bitte beachten Sie, dass sich alles oben Gesagte auf die eigene Hardware, die eigenen Server und nicht auf Cloud-Instanzen bezieht.
Im Cloud-Umfeld ist die Situation anders. Hier übernimmt der Cloud-Dienstleister das Management. So unterscheidet sich die Verwaltung von zehn Knoten in der Cloud nicht wesentlich von der Verwaltung eines einzelnen Knotens.
Die Verkehrslenkung und Lastverteilung zwischen Pods in der Cloud : Der Verkehr, der aus dem Internet kommt, wird an den Hauptlastenausgleicher weitergeleitet, der den Verkehr an den Port eines der Knoten weiterleitet (der NodePort-Dienst legt den Port im Bereich von 30000-32767 an jedem Knoten des Clusters fest). Die von kube-proxy festgelegten Regeln leiten den Verkehr vom Knoten zum Pod um. So sieht das für zehn Pods auf zwei Knoten aus:

Vorteil Nr. 2. Geringere Kosten pro Knoten
Leistungsstarke Server sind teurer, jedoch ist der Preisanstieg nicht unbedingt linear. Mit anderen Worten, ein Server mit 10 Kernen und 10 GB RAM ist in der Regel günstiger als zehn Einzelkern-Server mit der gleichen Menge an RAM.
Beachten Sie jedoch, dass diese Regel normalerweise nicht für Cloud-Dienste gilt. In den aktuellen Preismodellen der großen Cloud-Anbieter steigen die Preise linear mit zunehmender Kapazität.
Daher lässt sich in der Cloud in der Regel nicht durch leistungsstärkere Server Geld sparen.
Vorteil Nr. 3. Ressourcenschonende Anwendungen können gestartet werden.
Einige Anwendungen benötigen leistungsstarke Server im Cluster. Zum Beispiel, wenn ein Machine Learning-System 8 GB RAM benötigt, können Sie es nicht auf Knoten mit 1 GB ausführen, sondern nur mit mindestens einem großen Arbeitsknoten.
Nachteile
Nachteil Nr. 1. Viele Pods pro Knoten.
Wenn dieselbe Aufgabe auf weniger Knoten ausgeführt wird, gibt es natürlich auf jedem Knoten mehr Pods.
Das kann problematisch werden.
Der Grund liegt darin, dass jedes Modul zusätzliche Overheadkosten für die Container-Laufzeitumgebung (zum Beispiel Docker), sowie kubelet und cAdvisor verursacht.
Zum Beispiel überprüft kubelet regelmäßig die Lebensfähigkeit aller Container auf einem Knoten – je mehr Container vorhanden sind, desto mehr Aufgaben hat kubelet.
CAdvisor sammelt Nutzungsstatistiken aller Container auf einem Knoten, und kubelet fragt diese Informationen regelmäßig ab und stellt sie über die API zur Verfügung. Wiederum gilt: Je mehr Container es gibt, desto mehr Arbeit entsteht sowohl für cAdvisor als auch für kubelet.
Wenn die Anzahl der Module steigt, kann dies das System verlangsamen und sogar dessen Zuverlässigkeit beeinträchtigen.

Im Kubernetes-Repository haben einige , dass die Knoten zwischen den Status Ready/NotReady springen, da die regelmäßigen Überprüfungen von kubelet aller Container auf dem Knoten zu viel Zeit in Anspruch nehmen.
Aus diesem Grund empfiehlt Kubernetes, nicht mehr als 110 Pods auf einem Knoten zu platzieren. . Je nach Leistung des Knotens können Sie mehr Pods auf einem Knoten ausführen, aber es ist schwer vorherzusagen, ob Probleme auftreten oder alles reibungslos funktioniert. Es ist ratsam, die Funktionalität im Voraus zu testen.
Nachteil Nr. 2: Einschränkung bei der Replikation
Eine zu geringe Anzahl von Knoten schränkt die effektive Replikationsstufe von Anwendungen ein. Wenn Sie beispielsweise eine hochverfügbare Anwendung mit fünf Replikaten haben, aber nur zwei Knoten, reduziert sich die effektive Replikationsstufe der Anwendung auf zwei.
Fünf Replikate können nur auf zwei Knoten verteilt werden, und wenn einer davon ausfällt, werden sofort mehrere Replikate außer Betrieb genommen.
Wenn Sie fünf oder mehr Knoten haben, wird jede Replik auf einem separaten Knoten ausgeführt, und der Ausfall eines Knotens entfernt höchstens eine Replik.
Daher können die Anforderungen an hohe Verfügbarkeit eine bestimmte Mindestanzahl von Knoten im Cluster erforderlich machen.
Nachteil Nr. 3. Schlimmere Auswirkungen eines Ausfalls
Bei einer geringen Anzahl von Knoten hat jeder Ausfall gravierendere Konsequenzen. Wenn Sie nur zwei Knoten haben und einer davon ausfällt, verschwinden sofort die Hälfte Ihrer Module.
Natürlich wird Kubernetes die Arbeitslast von dem ausgefallenen Knoten auf andere verschieben. Aber wenn es nur wenige Knoten gibt, könnte nicht genügend freie Kapazität vorhanden sein. Infolgedessen werden einige Ihrer Anwendungen nicht verfügbar sein, bis Sie den ausgefallenen Knoten wiederhergestellt haben.
Daher gilt: Je mehr Knoten vorhanden sind, desto geringer ist der Einfluss von Hardware-Ausfällen.
Nachteil Nr. 4. Größere Schritte bei der automatischen Skalierung
In Kubernetes gibt es ein automatisches Skalierungssystem für die Cloud-Infrastruktur, das es ermöglicht, Knoten je nach aktuellem Bedarf automatisch hinzuzufügen oder zu entfernen. Bei größeren Knoten wird die Skalierung steiler und unbeholfener. Zum Beispiel erhöht das Hinzufügen eines zusätzlichen Knotens bei zwei Knoten die Kapazität des Clusters sofort um 50 %. Sie müssen auch für diese Ressourcen zahlen, selbst wenn Sie sie nicht benötigen.
Wenn Sie also planen, die automatische Skalierung des Clusters zu nutzen, ist es sinnvoll, weniger Knoten zu haben, da das Skalieren dadurch flexibler und kostengünstiger wird.
Schauen wir uns nun die Vor- und Nachteile einer großen Anzahl kleiner Knoten an.
Zweite Option: viele kleine Knoten
Die Vorteile dieses Ansatzes ergeben sich im Wesentlichen aus den Nachteilen der gegenteiliger Variante mit wenigen großen Knoten.
Vorteile
Vorteil Nr. 1. Geringere Auswirkungen bei einem Ausfall
Je mehr Knoten vorhanden sind, desto weniger Pods gibt es auf jedem Knoten. Zum Beispiel, wenn Sie hundert Module auf zehn Knoten haben, werden im Durchschnitt zehn Module pro Knoten vorhanden sein.
Das bedeutet, wenn einer der Knoten ausfällt, verlieren Sie nur 10 % der Arbeitslast. Es besteht die Möglichkeit, dass nur eine geringe Anzahl von Replikaten betroffen ist und die Anwendungen insgesamt weiterhin funktionieren.
Außerdem werden die verbleibenden Knoten wahrscheinlich über genügend freie Ressourcen verfügen, um die Arbeitslast des ausgefallenen Knotens zu tragen, sodass Kubernetes die Pods neu planen kann und Ihre Anwendungen relativ schnell wieder betriebsbereit sind.
Vorteil Nr. 2. Gute Replikation
Wenn genügend Knoten vorhanden sind, kann der Kubernetes-Planer alle Replikate auf verschiedene Knoten verteilen. So wird im Falle eines Knotenfehlers nur eine Replik betroffen sein, und die Anwendung bleibt verfügbar.
Nachteile
Nachteil Nr. 1. Schwieriger zu verwalten
Eine große Anzahl von Knoten ist schwieriger zu verwalten. Zum Beispiel muss jeder Kubernetes-Knoten mit allen anderen kommunizieren, was bedeutet, dass die Anzahl der Verbindungen quadratisch wächst, und all diese Verbindungen müssen überwacht werden.
Der Knoten-Controller im Kubernetes-Controller-Manager überprüft regelmäßig die Betriebsbereitschaft aller Knoten im Cluster – je mehr Knoten, desto höher die Last auf dem Controller.
Auch die Last auf der etcd-Datenbank steigt – jeder Kubelet und Kube-Proxy ruft für etcd (über die API) auf, der Updates des Objekts an etcd übertragen muss.
Insgesamt belastet jeder Arbeitsknoten die Systemkomponenten der Master-Knoten zusätzlich.

Offiziell unterstützt Kubernetes Cluster mit . In der Praxis können jedoch bereits 500 Knoten .
Um eine große Anzahl von Arbeitsknoten zu verwalten, sollten leistungsfähigere Master-Knoten ausgewählt werden. Beispielsweise installiert kube-up die richtige VM-Größe für den Master-Knoten je nach Anzahl der Arbeitsknoten. Das bedeutet, je mehr Arbeitsknoten vorhanden sind, desto leistungsstärker müssen die Master-Knoten sein.
Um diese spezifischen Probleme zu lösen, gibt es spezielle Entwicklungen wie . Dieses System ermöglicht es, die Einschränkungen zu umgehen und Cluster mit einer enormen Anzahl von Arbeitsknoten zu erstellen.
Nachteil Nr. 2. Höhere Overheadkosten
Auf jedem Arbeitsknoten führt Kubernetes eine Reihe von System-Daemons aus – dazu gehören die Containerlaufzeit (zum Beispiel Docker), kube-proxy und kubelet, einschließlich cAdvisor. Gemeinsam benötigen sie eine gewisse feste Menge an Ressourcen.
Wenn Sie viele kleine Knoten haben, ist der Anteil dieser Overheadkosten pro Knoten höher. Nehmen wir an, alle System-Daemons eines Knotens verbrauchen zusammen 0,1 CPU-Kerne und 0,1 GB Speicher. Wenn Sie einen zehnekernigen Knoten mit 10 GB Speicher haben, verbrauchen die Daemons 1 % der Clusterkapazität. Im Gegensatz dazu würden auf zehn einstöckigen Knoten mit 1 GB Speicher die Daemons 10 % der Clusterkapazität beanspruchen.
Je weniger Knoten vorhanden sind, desto effizienter wird die Infrastruktur genutzt.
Nachteil Nr. 3. Ineffiziente Ressourcennutzung
Auf kleinen Knoten kann die Situation entstehen, dass die verbleibenden Ressourcenfragmente zu klein sind, um ihnen eine Arbeitslast zuzuweisen, sodass sie ungenutzt bleiben.
Zum Beispiel benötigt jeder Pod 0,75 GB RAM. Wenn Sie zehn Knoten haben, und jeder über 1 GB RAM verfügt, können Sie zehn Pods starten — das bedeutet, dass auf jedem Knoten noch 0,25 GB ungenutzter RAM verbleiben.
Das bedeutet, dass 25 % des gesamten Speichers im Cluster unnötig verschwendet werden.
Auf einem großen Knoten mit 10 GB RAM können Sie 13 solcher Module starten — und es bleibt nur ein ungenutztes Fragment von 0,25 GB.
In diesem Fall wird lediglich 2,5 % des Speichers verschwendet.
So werden die Ressourcen auf großen Knoten effizienter genutzt.
Einige große Knoten oder viele kleine?
Was ist also besser: einige große Knoten im Cluster oder viele kleine? Wie so oft gibt es darauf keine eindeutige Antwort. Vieles hängt von der Art der Anwendung ab.
Wenn eine Anwendung beispielsweise 10 GB RAM benötigt, ist die Wahl großer Knoten offensichtlich. Wenn die Anwendung jedoch eine zehnfache Replikation für hohe Verfügbarkeit erfordert, sollten Sie nicht das Risiko eingehen, die Replikate nur auf zwei Knoten zu verteilen — im Cluster sollten mindestens zehn Knoten vorhanden sein.
In Zwischenfällen treffen Sie Entscheidungen basierend auf den Vor- und Nachteilen jeder Option. Einige Argumente könnten relevanter für Ihre Situation sein als andere.
Es ist nicht notwendig, alle Knoten in der gleichen Größe zu haben. Nichts hindert Sie daran, zunächst mit Knoten gleicher Größe zu experimentieren und anschließend Knoten unterschiedlicher Größe hinzuzufügen, um sie im Cluster zu kombinieren. Die Arbeitsknoten eines Kubernetes-Clusters können völlig heterogen sein. Sie können also die Vorteile beider Ansätze kombinieren.
Es gibt kein universelles Rezept, da jede Situation ihre eigenen Nuancen hat, und nur die Produktionsumgebung kann die Wahrheit zeigen.
Die Übersetzung wurde vom Team der Cloud-Plattform erstellt. .
Mehr über Kubernetes: .
Quelle: habr.com
