Das Docker-Ökosystem: Planung und Orchestrierung

Einführung

Das Docker-Tool bietet alle Funktionen, die zum Erstellen, Hochladen, Herunterladen, Starten und Stoppen von Containern erforderlich sind. Es eignet sich gut für die Verwaltung dieser Prozesse in Einzelhostumgebungen mit einer minimalen Anzahl von Containern.

Viele Docker-Benutzer nutzen die Plattform jedoch als Werkzeug für die einfache Skalierung einer großen Anzahl von Containern auf vielen verschiedenen Hosts. Clustered Docker-Hosts stellen besondere Anforderungen an die Verwaltung, für die unterschiedliche Tools erforderlich sind.

In diesem Handbuch werden Docker-Scheduler und Orchestrierungs-Tools behandelt. Diese stellen die primäre Containerverwaltungsschnittstelle für Administratoren verteilter Bereitstellungen dar.

Planen von Containern, Orchestrierung und Clusterverwaltung

Wenn Anwendungen auf mehrere Hostsysteme skaliert werden, wird die Fähigkeit, jedes Hostsystem zu verwalten und die Komplexität der zugrunde liegenden Plattform zu abstrahieren, attraktiv. Orchestrierung ist ein weit gefasster Begriff, der sich auf die Containerplanung, die Clusterverwaltung und möglicherweise die Bereitstellung zusätzlicher Hosts bezieht.

In dieser Umgebung bezieht sich "Zeitplanung" auf die Fähigkeit eines Administrators, eine Servicedatei auf ein Hostsystem zu laden, das festlegt, wie ein bestimmter Container ausgeführt wird. Während sich die Planung auf den spezifischen Vorgang des Ladens der Service-Definition bezieht, sind Scheduler im Allgemeinen dafür verantwortlich, sich an das Init-System eines Hosts anzuschließen, um Services mit jeder benötigten Kapazität zu verwalten.

Bei der Clusterverwaltung wird eine Gruppe von Hosts gesteuert. Dies kann das Hinzufügen und Entfernen von Hosts zu einem Cluster, das Abrufen von Informationen zum aktuellen Status von Hosts und Containern sowie das Starten und Stoppen von Prozessen umfassen. Die Clusterverwaltung ist eng mit der Planung verbunden, da der Scheduler Zugriff auf jeden Host im Cluster haben muss, um Dienste planen zu können. Aus diesem Grund wird häufig dasselbe Werkzeug für beide Zwecke verwendet.

Um Container auf Hosts im gesamten Cluster ausführen und verwalten zu können, muss der Scheduler mit dem individuellen Init-System jedes Hosts interagieren. Zur Vereinfachung der Verwaltung bietet der Scheduler gleichzeitig eine einheitliche Ansicht des Status der Dienste im gesamten Cluster. Dies funktioniert dann wie ein clusterweites Init-System. Aus diesem Grund spiegeln viele Scheduler die Befehlsstruktur des zu abstrahierenden Init-Systems wider.

Eine der größten Aufgaben von Schedulern ist die Auswahl der Hosts. Wenn ein Administrator beschließt, einen Dienst (Container) auf dem Cluster auszuführen, wird der Scheduler häufig mit der automatischen Auswahl eines Hosts beauftragt. Der Administrator kann optional Planungsbeschränkungen gemäß seinen Anforderungen oder Wünschen bereitstellen, der Planer ist jedoch letztendlich für die Ausführung dieser Anforderungen verantwortlich.

Wie trifft ein Planer Planungsentscheidungen?

Planer definieren häufig eine Standardplanungsrichtlinie. Hiermit wird festgelegt, wie Dienste geplant werden, wenn der Administrator keine Eingaben macht. Beispielsweise kann ein Scheduler festlegen, dass neue Dienste auf Hosts mit den wenigsten derzeit aktiven Diensten platziert werden.

Scheduler bieten in der Regel Überschreibungsmechanismen, mit denen Administratoren die Auswahlprozesse optimieren können, um bestimmte Anforderungen zu erfüllen. Wenn beispielsweise immer zwei Container auf demselben Host ausgeführt werden sollen, weil sie als Einheit arbeiten, kann diese Affinität häufig während der Planung deklariert werden. Wenn zwei Containernot auf demselben Host platziert werden sollen, um beispielsweise eine hohe Verfügbarkeit von zwei Instanzen desselben Dienstes sicherzustellen, kann dies ebenfalls definiert werden.

Andere Einschränkungen, auf die ein Scheduler möglicherweise achtet, können durch beliebige Metadaten dargestellt werden. Einzelne Hosts können von Schedulern beschriftet und als Ziel ausgewählt werden. Dies kann beispielsweise erforderlich sein, wenn ein Host das von einer Anwendung benötigte Datenvolumen enthält. Einige Dienste müssen möglicherweise auf jedem einzelnen Host im Cluster bereitgestellt werden. Bei den meisten Schedulern ist dies möglich.

Welche Cluster-Verwaltungsfunktionen bieten Scheduler?

Die Planung ist häufig an Cluster-Verwaltungsfunktionen gebunden, da beide Funktionen die Fähigkeit erfordern, auf bestimmten Hosts und im gesamten Cluster zu arbeiten.

Mithilfe der Cluster-Verwaltungssoftware können Informationen zu Mitgliedern eines Clusters abgefragt, Mitglieder hinzugefügt oder entfernt oder sogar eine Verbindung zu einzelnen Hosts hergestellt werden, um eine genauere Verwaltung zu ermöglichen. Diese Funktionen können im Scheduler enthalten sein oder in der Verantwortung eines anderen Prozesses liegen.

Häufig ist die Clusterverwaltung auch mit dem Diensterkennungstool oder dem verteilten Schlüsselwertspeicher verknüpft. Diese eignen sich besonders zum Speichern dieser Art von Informationen, da die Informationen über den gesamten Cluster verteilt sind und die Plattform für ihre primäre Funktion bereits vorhanden ist.

Wenn der Scheduler selbst keine Methoden bereitstellt, müssen einige Clusterverwaltungsvorgänge möglicherweise durchgeführt werden, indem die Werte im Konfigurationsspeicher mithilfe der bereitgestellten APIs geändert werden. Beispielsweise müssen Änderungen an der Clustermitgliedschaft möglicherweise über unformatierte Änderungen am Erkennungsdienst behandelt werden.

Der Schlüsselwertspeicher ist normalerweise auch der Speicherort, an dem Metadaten zu einzelnen Hosts gespeichert werden können. Wie bereits erwähnt, können Sie mit der Kennzeichnung von Hosts Einzelpersonen oder Gruppen als Ziel für die Planung von Entscheidungen festlegen.

Wie passen Bereitstellungen mit mehreren Containern in die Planung?

Manchmal sollten alle Komponenten einer Anwendung als einzelne Einheit verwaltet werden, obwohl sie in einen separaten Dienst aufgeteilt wurden. Es gibt Zeiten, in denen es nicht sinnvoll ist, einen Dienst ohne einen anderen bereitzustellen, da die Funktionen jeweils zur Verfügung stehen.

Die erweiterte Zeitplanung unter Berücksichtigung der Containergruppierung ist für einige verschiedene Projekte verfügbar. Es gibt einige Vorteile, die Benutzer durch den Zugriff auf diese Funktionalität erhalten.

Mithilfe der Gruppencontainerverwaltung kann ein Administrator eine Sammlung von Containern als einzelne Anwendung verwalten. Das Ausführen eng integrierter Komponenten als Einheit vereinfacht das Anwendungsmanagement, ohne die Vorteile der Unterteilung einzelner Funktionen zu beeinträchtigen. Tatsächlich können Administratoren die Vorteile der Containerisierung und serviceorientierten Architektur nutzen und gleichzeitig den zusätzlichen Verwaltungsaufwand minimieren.

Das Gruppieren von Anwendungen kann bedeuten, sie einfach zu planen und gleichzeitig zu starten und zu stoppen. Es kann auch komplexere Szenarien ermöglichen, z. B. die Konfiguration separater Subnetze für jede Gruppe von Anwendungen oder die Skalierung ganzer Containersätze, bei denen wir bisher nur auf Containerskala skalieren konnten.

Was ist die Bereitstellung?

Ein Konzept im Zusammenhang mit der Clusterverwaltung ist die Bereitstellung. Bei der Bereitstellung werden neue Hosts online geschaltet und auf einfache Weise so konfiguriert, dass sie betriebsbereit sind. Bei Docker-Bereitstellungen bedeutet dies häufig, dass Docker konfiguriert und der neue Host so eingerichtet wird, dass er einem vorhandenen Cluster beitritt.

Während das Endergebnis der Bereitstellung eines Hosts immer sein sollte, dass ein neues System für die Arbeit verfügbar ist, variiert die Methodik in Abhängigkeit von den verwendeten Tools und dem Hosttyp erheblich. Wenn der Host beispielsweise eine virtuelle Maschine ist, können Tools wievagrant verwendet werden, um einen neuen Host zu starten. Bei den meisten Cloud-Anbietern können Sie mithilfe von APIs neue Hosts erstellen. Im Gegensatz dazu würde die Bereitstellung von Hardware wahrscheinlich einige manuelle Schritte erfordern. Konfigurationsmanagement-Tools wie Chef, Puppet, Ansible oder Salt können beteiligt sein, um die Erstkonfiguration des Hosts zu übernehmen und ihm die Informationen bereitzustellen, die für die Verbindung mit einem vorhandenen Cluster erforderlich sind.

Die Bereitstellung kann als vom Administrator initiierter Prozess oder zur automatischen Skalierung in die Clusterverwaltungstools eingebunden werden. Diese letztere Methode beinhaltet das Definieren des Prozesses zum Anfordern zusätzlicher Hosts sowie der Bedingungen, unter denen dies automatisch ausgelöst werden soll. Wenn Ihre Anwendung beispielsweise stark ausgelastet ist, möchten Sie möglicherweise, dass Ihr System zusätzliche Hosts hochfährt und die Container in der neuen Infrastruktur horizontal skaliert, um die Überlastung zu verringern.

Was sind einige gängige Scheduler?

In Bezug auf die grundlegende Planung und das Cluster-Management sind einige beliebte Projekte:

  • fleet: Flotte ist die Planungs- und Clusterverwaltungskomponente von CoreOS. Es liest die Verbindungsinformationen für jeden Host im Cluster von etcd und bietet eine systemähnliche Dienstverwaltung.

  • marathon: Marathon ist die Planungs- und Serviceverwaltungskomponente einer Mesosphere-Installation. Es arbeitet mit Mesos zusammen, um Dienste mit langer Laufzeit zu steuern, und bietet eine Web-Benutzeroberfläche für das Prozess- und Containermanagement.

  • Swarm: Docker's Swarm ist ein Planer, den das Docker-Projekt im Dezember 2014 angekündigt hat. Sie hofft, einen robusten Scheduler bereitzustellen, der Container auf mit Docker bereitgestellten Hosts mithilfe der nativen Docker-Syntax hochfahren kann.

Im Rahmen der Cluster-Management-Strategie basieren Mesosphere-Konfigurationen auf der folgenden Komponente:

  • mesos: Apache Mesos ist ein Tool, das die Ressourcen aller Hosts in einem Cluster abstrahiert und verwaltet. Es präsentiert eine Sammlung der Ressourcen, die im gesamten Cluster für die darauf aufbauenden Komponenten verfügbar sind (z. B. Marathon). Es beschreibt sich als analog zu einem "Kernel" für eine Cluster-Konfiguration.

In Bezug auf die fortschrittliche Planung und Steuerung von Gruppen von Containern als eine Einheit stehen die folgenden Projekte zur Verfügung:

  • kubernetes: Mit dem erweiterten Scheduler von Google, kubernetes, können Sie die Container in Ihrer Infrastruktur wesentlich besser steuern. Container können beschriftet, gruppiert und für die Kommunikation mit einem eigenen Subnetz versehen werden.

  • compose: Das Compose-Projekt von Docker wurde erstellt, um die Gruppenverwaltung von Containern mithilfe deklarativer Konfigurationsdateien zu ermöglichen. Es verwendet Docker-Links, um Informationen zur Abhängigkeitsbeziehung zwischen Containern zu erhalten.

Fazit

Cluster-Management und Arbeitsplaner sind ein wesentlicher Bestandteil der Implementierung containerisierter Dienste auf einer verteilten Gruppe von Hosts. Sie stellen den Hauptverwaltungspunkt dar, um die Dienste, die Ihre Anwendung bereitstellen, tatsächlich zu starten und zu steuern. Durch den effektiven Einsatz von Schedulern können Sie mit geringem Aufwand drastische Änderungen an Ihren Anwendungen vornehmen.