Hier erfahren Sie, ob Kubernetes für Ihre SaaS-Anforderungen geeignet ist

Kubernetes ist eine großartige Technologie, und ich persönlich habe große Fortschritte bei der Skalierung, Bereitstellung und Verwaltung meines eigenen SaaS gemacht. Aber nicht jeder würde aus einer Reihe von Gründen sofort davon profitieren:

  • Mangelnde Vertrautheit mit der Containertechnologie
  • Die Anwendungsarchitektur kann die Vorteile von Kubernetes nicht nutzen
  • Mehr Aufwand im Vergleich zum Zeitaufwand

Wenn Sie sich für Kubernetes interessieren, aber nicht sicher sind, wie viel Zeit / Ressourcen Sie benötigen, ist dieser Artikel genau das Richtige für Sie.

Wie ist Ihre Erfahrung mit Containern?

Um zu verstehen, was Kubernetes für Sie tun kann, müssen Sie zunächst wissen, welche Vorteile Container bieten. Bevor Sie sich mit Kubernetes beschäftigen, sollten Sie zuerst:

Containerisieren Sie Ihre Anwendung

In erster Linie muss Ihre Bewerbung containerisiert sein. Dies bedeutet, dass Sie die Schritte definieren, die erforderlich sind, um ein Basis-BS-Image zu erstellen und Ihre Anwendung in einer Datei (normalerweise eine Docker-Datei) darauf zu installieren.

Wenn Sie diesen Prozess durchlaufen und Umgebungsvariablen definieren, die für die Konfiguration Ihrer Anwendung erforderlich sind (z. B. URL, Benutzername und Kennwort der von Ihrer App verwendeten Datenbank), ist dies für die Verwendbarkeit Ihres Container-Images durch Kubernetes von entscheidender Bedeutung.

Notieren Sie sich auch die Abhängigkeiten, die Ihre Anwendung benötigt, um zu funktionieren, und lernen Sie, wie Sie die containerisierten Versionen davon verwenden.

Verstehen Sie, wie Speicher funktioniert

Container enthalten nur den Code, der zum Ausführen einer Anwendung erforderlich ist. Alle persistenten Daten müssen an anderer Stelle gespeichert werden, da durch das Herunterfahren und Hochfahren von Containern (sehr häufig bei Containern) auch alle im Dateisystem dieses Containers gespeicherten Daten zerstört werden.

Wenn Sie über Kubernetes nachdenken, ist es sehr wertvoll zu wissen, wie der Containerspeicher funktionieren soll und wie Daten gesichert, zwischen Containern verschoben und von außerhalb des Containers auf die Daten zugegriffen werden.

Kubernetes erleichtert die Speicherverwaltung durch Funktionen wie die automatische Bereitstellung. Auf diese Weise kann Ihr Speicheranbieter (z. B. AWS EBS) neue Volumes im laufenden Betrieb erstellen, wenn neue Container erstellt werden, und diese automatisch bereitstellen.

Verstehen Sie, wie Netzwerke funktionieren

Die Art und Weise, wie Sie Netzwerke implementieren, kann eine wichtige Rolle bei der Verwendung von Kubernetes spielen. Es ist für den Anfang wichtig zu wissen, wie bestimmte Systeme für das öffentliche Internet geöffnet und andere, wie z. B. Datenbanken, ausgeblendet werden, während die Kommunikation zwischen Diensten aufrechterhalten wird. Einige kompliziertere Operationen, die ich lernen musste, waren das Integrieren des Lastenausgleichs sowie das Zuweisen eines benutzerdefinierten Hostnamens für jede Kundeninstanz (Dinge, die Kubernetes erheblich vereinfacht).

Behebt Kubernetes Probleme, mit denen Sie derzeit konfrontiert sind?

Wenn Sie für die Bereitstellung Ihrer Anwendung keine Container verwenden, sollten Sie Kubernetes wahrscheinlich noch nicht verwenden. Die Probleme, die Kubernetes lösen möchte, sind Probleme, die auftreten, wenn Sie versuchen, eine container-basierte Infrastruktur zu skalieren.

Hier sind einige der Probleme, die Kubernetes meiner Meinung nach am besten löst, wenn es darum geht, mit Containern im Maßstab umzugehen.

Ressourcen skalieren

Kubernetes ist im Grunde ein Cluster von Knoten, die Rechenressourcen bereitstellen, die von Container-Workloads verbraucht werden können. Diese Cluster-Architektur ermöglicht ein sehr einfaches Hoch- oder Herunterskalieren von Ressourcen. Sie müssen nur Knoten zum Cluster hinzufügen oder daraus entfernen, und Kubernetes verwendet diese Ressourcen automatisch oder weist den vorhandenen Ressourcen Arbeitslasten zu.

Dies löste ein großes Problem, mit dem ich konfrontiert war, da ich von einem einzelnen Server, den ich ständig hochskalieren musste (ein ärgerlicher manueller Prozess), zu der Fähigkeit über die CLI meine Infrastruktur mit einem einzigen Befehl hoch- oder herunter zu skalieren.

Massenupdates durchführen

Ein weiteres Problem, das Kubernetes löst, ist die Möglichkeit, alle Ihre Container zu aktualisieren. Früher habe ich Shell-Skripte geschrieben, die jeden relevanten Container auswählen und mit einem neuen Image-Tag neu erstellen. Der Vorgang würde über eine Stunde dauern, und ich konnte nicht überprüfen, ob das Update erfolgreich war. Mit Kubernetes konnte ich ein Update mit einem einzigen Befehl durchführen, wie im folgenden Beispiel:

// Aktualisiere alle Pods des Frontends auf ein neues Image
$ kubectl Rolling-Update-Frontend --image = image: v2

Mit Kubernetes können Sie auch beliebige Teile von Kubernetes (Netzwerke, Speicher usw.) mit Befehlen aktualisieren, die auf beliebigen Kriterien basieren. Dies ist ein großer Schritt, nachdem Sie Ihre eigenen Skripte geschrieben haben, um Änderungen an Ihrer Infrastruktur vorzunehmen.

Selbstheilung

Das letzte und eines der wichtigsten Stücke von Kubernetes, über das ich sprechen möchte, ist die Fähigkeit zur Selbstheilung. Wenn Kubernetes einen Fehler in einem Teil seiner Infrastruktur feststellt, z. B. wenn ein Knoten nicht antwortet oder ein Container seine Integritätsprüfung nicht besteht, führt es Schritte aus, um diese Teile von sich selbst neu zu erstellen, bis die Arbeit wieder aufgenommen wird.

Dies ist äußerst nützlich, da die Arbeitslast neu zugewiesen wird, wenn ein Teil des Clusters aus irgendeinem Grund ausfällt, und Kubernetes sogar ganze Server neu erstellen kann, um das Problem zu beheben.

Muss sich Ihre Anwendungsarchitektur ändern?

Manchmal ist das Anpassen Ihrer App an Kubernetes so, als würde man einen quadratischen Stift in ein rundes Loch stecken

Bei der Migration zu Kubernetes mussten nicht viele Änderungen vorgenommen werden, da es ursprünglich als Multi-Instance-Plattform konzipiert war, die über Container bereitgestellt wurde.

Hier sind einige der Dinge, die ich gelernt habe, als ich meine eigene Arbeitslast auf Kubernetes verlagerte.

Die Startzeit Ihrer App ist wichtig

Wenn Sie eine neue Bereitstellung erstellen, müssen Sie warten, bis Ihre App gestartet ist, bevor sie dem Endbenutzer zur Verfügung steht. Dies wird zu einem Problem, wenn bei der Bereitstellung neue Instanzen erstellt werden, wenn ein Endbenutzer eine Schaltfläche drückt, oder wenn Sie Aktualisierungen für alle Instanzen Ihrer Kunden durchführen, da dies eine Neuerstellung der Pods erfordert.

Wenn Sie zu Kubernetes wechseln, müssen Sie möglicherweise einige Änderungen an Ihrer Codebasis vornehmen, um den Startvorgang effizienter zu gestalten, damit der Endbenutzer keine beeinträchtigten Erfahrungen mit Ihrem Produkt hat.

Die Anpassung von Architekturen mit mehreren Mandanten ist schwierig

Eine Architektur mit mehreren Mandanten bedeutet, dass Sie eine einzige Instanz Ihrer Anwendung haben, die alle Ihre Endbenutzer in partitionierten Mandanten verwaltet. In der Regel wird eine einzige Datenbank von allen gemeinsam genutzt.

Wenn Ihre Anwendung nicht für die Verwendung von Clustering ausgelegt ist (mehrere Server fungieren als eine Instanz), sollten Sie Kubernetes noch nicht verwenden.

Im Allgemeinen sehe ich zwei Arten von Architekturen, wenn ich mit Kubernetes arbeite:

  • Multi-Instanz mit einer Instanz der App für jeden Kunden
  • Mandantenfähige Architektur mit Clustering-Funktionen, da sie die Skalierung von Ressourcen nutzen können

Ich persönlich bevorzuge die Verwendung mehrerer Instanzen, da sie im Vergleich zu einer Architektur mit mehreren Mandanten in Clustern viel einfacher zu implementieren sind. Außerdem ist die Arbeit beim Wechsel von Mandanten zu Instanzen im Vergleich zum Hinzufügen von Clusterfunktionen zu einer Architektur mit mehreren Instanzen nicht allzu schwierig.

Der Umstieg auf eine zustandslose Anwendung ist sehr aufwändig

Eine der herausragenden Funktionen von Kubernetes ist die Möglichkeit, die Anzahl der Pods in einer Bereitstellung zu erhöhen oder zu verringern. Wenn Ihre Anwendung jedoch nicht gruppiert oder nicht statusfrei ist, wird diese Funktionalität verschwendet, da zusätzliche Pods in einer Bereitstellung nicht ordnungsgemäß konfiguriert werden und nicht verwendet werden können.

Das Ausnutzen der Zustandslosigkeit in Kubernetes ist oft schwieriger als es sich lohnt, da Sie die Art und Weise, wie Sie mit Konfigurationen in Ihrer Anwendung umgehen, in den meisten Fällen komplett überarbeiten müssen.

Lassen Sie sich nicht entmutigen, wenn Sie nicht die Zeit verschwenden möchten, um Ihre Anwendung zustandslos oder gruppiert zu machen, da es viele Möglichkeiten gibt, Stateful Deployments für die Verwendung von Kubernetes anzupassen. Aber diese haben ihre eigenen Probleme, auf die ich in diesem Artikel nicht eingehen werde.

Sollten Sie Kubernetes adoptieren?

Nachdem Sie sich diese Fragen gestellt haben, sollten Sie eine gute Vorstellung davon haben, ob Kubernetes zu diesem Zeitpunkt zu Ihnen passt. Die meisten Start-ups im Frühstadium werden es wahrscheinlich nicht benötigen, und ältere Unternehmen werden möglicherweise viel in andere Technologien investieren, sodass ein Wechsel nicht möglich wäre.

Ich denke, der beste Fall für jemanden, der zu Kubernetes wechselt, ist ein Startup, der versucht, von einer Minimum Viable Cloud-Infrastruktur, die Container zur Stromversorgung von Produktions-Workloads verwendet, zu einer stabileren Infrastruktur überzugehen. Das war mein Fall, und ich kann sagen, dass ich mich dank der Leistungsfähigkeit von Kubernetes nicht mehr um meine Infrastruktur sorgen musste, da es aufgrund von Ressourcenmissmanagement und überlasteten Servern zu regelmäßigen Ausfallzeiten kam.

Möchten Sie Kubernetes mit Ihrem SaaS verbinden? Reden wir - ben@servicebot.io