AllInfo

So skalieren Sie Docker-Container serverübergreifend mit Kubernetes

Docker ist eine entwicklerorientierte Containerisierungsplattform, mit der Sie Anwendungen als Standalone verpacken können Behälter. Sie werden überall dort ausgeführt, wo eine kompatible Container-Laufzeit verfügbar ist.

Die Popularität von Docker hat es fast zum Synonym für Container gemacht, aber es ist nicht die perfekte Technologie für alle Anwendungsfälle. Die unveränderte Verwendung von Docker stellt in der Produktion eine Herausforderung dar, da seine CLI nur für die Verwaltung einzelner Container ausgestattet ist.

Kubernetes ist eine Orchestrierungsplattform, die Stapel von Containern verwaltet und über mehrere Server hinweg skaliert. Sie können eine Flotte physischer Maschinen bereitstellen und so die Redundanz und Ausfallsicherheit Ihres Dienstes verbessern. So starten Sie Ihren eigenen Cluster, um Ihren “Docker” Container.

Kubernetes-Grundlagen

Das Erkennen einiger wichtiger Kubernetes-Begriffe hilft Ihnen, die Unterschiede zu Docker zu verstehen. Das Kubernetes-Wörterbuch beschreibt Dutzende von Ressourcen, die Sie Ihrem Cluster hinzufügen können. Für diesen Artikel sind nur die Komponenten relevant, die das Container-Scheduling steuern.

Auf einer höheren Ebene ist eine Kubernetes-Installation ein Cluster von “Knoten” Knoten sind unabhängige physische Maschinen, die Ihre Workloads hosten. Ein einzelner “Master” Knoten ist für die Koordination (“Orchestrierung”) der Cluster-Operationen durch “Planung” neue Container zum am besten geeigneten Worker-Knoten.

Hier sind einige wichtige Begriffe:

Werbung

Das Erstellen eines skalierbaren Clusters erfordert einen Masterknoten, mindestens zwei Workerknoten und eine Bereitstellung, die mehrere Replikate bereitstellt. Kubernetes ist in der Lage, Ihre Pods auf allen verfügbaren Knoten zu planen, sodass Sie im Falle eines Ausfalls widerstandsfähig sind.

Cluster erstellen

Kubernetes ist als Managed-Angebot bei den meisten großen Cloud-Anbietern erhältlich. Mit diesen können Sie mit einem Klick Ihre Steuerungsebene erstellen und eine variable Anzahl von Worker-Knoten hinzufügen.

Sie können einen Cluster auf Ihrer eigenen Hardware ausführen, indem Sie eine eigenständige Kubernetes-Distribution wie MicroK8s verwenden. Sie benötigen mindestens zwei isolierte physische oder virtuelle Maschinen, wenn Sie Unterstützung für die redundante Planung wünschen.

Installieren Sie MicroK8s auf beiden Maschinen. Legen Sie einen Knoten als Master fest und verwenden Sie den Befehl add-node, um den Registrierungsprozess für den Knoten zu starten:

microk8s add-node

Dies wird einen microk8s-Join-Befehl ausgeben. Wechseln Sie zu Ihrem sekundären Knoten und führen Sie den Befehl aus. Er wird dem ersten Cluster als neuer Worker beitreten. Jetzt sind beide Maschinen bereit, Ihre containerisierten Workloads zu hosten.

Definieren einer horizontal skalierenden Bereitstellung

Eine Anwendung, die auf mehreren Servern ausgeführt wird wird als “horizontal skaliert” Es breitet sich über mehrere verschiedene Umgebungen aus. Die vertikale Skalierung eines Systems beinhaltet das Hinzufügen von Ressourcen zu einer vorhandenen Umgebung.

Werbung

Der einfachste Weg, einen Kubernetes-Workload zu definieren, ist ein Deployment. Dieser Ressourcentyp erstellt Pods aus einem Container-Image und richtet öffentliche Netzwerkrouten über einen Dienst ein. Bereitstellungen sind standardmäßig eine einzelne Pod-Instanz, können jedoch mit mehreren Replikaten konfiguriert werden.

Hier ein einfaches Bereitstellungsmanifest:

apiVersion: apps/v1 kind: Bereitstellungsmetadaten: name: nginx spec: Repliken: 3 Selektor: matchLabels: App: nginx-Vorlage: Metadaten: Labels: App: nginx-Spezifikation: Container: – Name: nginx-Image: nginx: Neueste Ports: – ContainerPort: 80

Wenden Sie das Manifest mithilfe von Kubectl auf Ihren Cluster an:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes erstellt drei Pods, von denen jeder einen NGINX-Webserver hostet, der aus dem nginx:latest-Image erstellt wurde. Port 80 wird als Container-Port bereitgestellt, um eingehenden Datenverkehr zu ermöglichen.

Pods werden automatisch auf die Knoten Ihres Clusters verteilt. Ein Knoten ist berechtigt, einen Pod zu hosten, wenn er ausreichende Ressourcen bereitstellen kann.

Sie können die Anzahl der Replikate jederzeit aktualisieren. Ändern Sie das Replikatfeld in Ihrem Manifest und wenden Sie es erneut auf Ihren Cluster an. Der Kubernetes-Planer ergreift Maßnahmen, um bei Bedarf neue Pods bereitzustellen oder alte zu beenden. Wenn Sie Replikate auf 0 herunterskalieren, können Sie Ihre Anwendung offline schalten, ohne die Bereitstellung oder die zugehörigen Ressourcen tatsächlich zu löschen.

Dynamisches Hinzufügen von Knoten

Durch das Aktualisieren der Replikatanzahl können Sie die vorhandenen Ressourcen in Ihrem Cluster nutzen. Schließlich können Sie Ihre kombinierte Knotenkapazität vollständig erschöpfen und verhindern, dass neue Pods geplant werden. Kubernetes bietet eine automatische Clusterskalierungsfunktion, mit der Nodes erstellt und zerstört werden können, wodurch die Anzahl der planbaren Pods effektiv geändert wird.

Die Einrichtung der automatischen Skalierung ist relativ aufwendig. Der genaue Prozess hängt von der Hosting-Umgebung Ihres Clusters ab. Es erfordert die Integration mit einem Cluster Autoscaler, der sich in Ihren Host einklinken kann, um Bedarfsänderungen zu erkennen. Für Google Cloud ist eine offizielle Dokumentation verfügbar. Lösungen sind auch von Amazon EKS und Microsoft AKS erhältlich.

Werbung

Die automatische Skalierung funktioniert durch eine ständige Überprüfung auf Pods, die aufgrund unzureichender Clusterkapazität nicht geplant werden können. Es wird auch bewertet, ob die erfolgreich geplanten Pods tatsächlich mit einer reduzierten Knotenanzahl platziert werden könnten. Der Auto-Scaler verwendet dann die API Ihres Cloud-Anbieters, um Compute-Instanzen hinzuzufügen und zu entfernen, und passt die Ressourcen Ihres Clusters dynamisch an. Dies kann sich auf Ihre Rechnung auswirken, da das Erstellen einer neuen Instanz normalerweise ein kostenpflichtiger Vorgang ist.

Zusammenfassung

Kubernetes erleichtert die Verteilung von Containerinstanzen auf mehrere Server. Registrieren Sie Ihre Maschinen als Knoten oder verwenden Sie einen verwalteten Cloud-Cluster, und erstellen Sie dann Bereitstellungen, für die das Feld “Replikate” festgelegt ist. Sie können Ihre Arbeitslast skalieren, indem Sie die Anzahl der angeforderten Replikate aktualisieren.

Wenn schwerwiegende Nachfrageänderungen zu erwarten sind, verwenden Sie die automatische Skalierung, um die Kapazität dynamisch zu erweitern. Mit dieser Funktion können Sie im Handumdrehen neue Knoten erstellen und zusätzliche Ressourcen hinzufügen, damit Sie die Anzahl der Replikate weiter erhöhen können.

Wenn Sie Pods skalieren, müssen Sie daran denken, dass irgendeine Form von eingehendem Datenverkehr auch eine Verteilung ist erforderlich. Wenn Sie Port 80 freigeben, muss Kubernetes in der Lage sein, Anfragen Port 80 auf jedem der Knoten zuzuordnen. Dies funktioniert automatisch mit Bereitstellungen und Diensten. Kubernetes erstellt einen Load Balancer, der Pods kontinuierlich überwacht, um herauszufinden, wohin der Traffic geleitet werden kann.

Exit mobile version