Eine Einführung in CoreOS-Systemkomponenten

Was ist CoreOS?

CoreOS ist eine leistungsstarke Linux-Distribution, mit der große, skalierbare Bereitstellungen auf verschiedenen Infrastrukturen einfach verwaltet werden können. Basierend auf einem Build von Chrome OS verwaltet CoreOS ein leichtes Hostsystem und verwendet Docker-Container für alle Anwendungen. Dieses System bietet Prozessisolierung und ermöglicht das einfache Verschieben von Anwendungen innerhalb eines Clusters.

Um diese Cluster zu verwalten, verwendet CoreOS einen global verteilten Schlüsselwertspeicher mit dem Namen "+ etcd +", um Konfigurationsdaten zwischen Knoten zu übertragen. Diese Komponente ist auch die Plattform für die Serviceerkennung, mit der Anwendungen dynamisch basierend auf den Informationen konfiguriert werden können, die über die gemeinsam genutzte Ressource verfügbar sind.

Um Anwendungen über den gesamten Cluster hinweg zu planen und zu verwalten, wird ein Tool namens "+ fleet " verwendet. Fleet dient als clusterweites Init-System, mit dem Prozesse im gesamten Cluster verwaltet werden können. Dies macht es einfach, hochverfügbare Anwendungen zu konfigurieren und den Cluster von einem einzigen Punkt aus zu verwalten. Dazu wird das Init-System jedes einzelnen Knotens " systemd +" eingebunden.

In diesem Handbuch stellen wir Ihnen einige wichtige CoreOS-Konzepte vor und stellen die einzelnen Kernkomponenten vor, mit denen das System funktioniert. In einem späteren Handbuch werden wir uns mit how, um mit CoreOS on DigitalOcean zu beginnen befassen. .

System-Design

Das allgemeine Design einer CoreOS-Installation ist auf Clustering und Containerisierung ausgerichtet.

Das Haupt-Host-System ist relativ einfach und verzichtet auf viele der üblichen "Funktionen" herkömmlicher Server. Tatsächlich hat CoreOS nicht einmal einen Paketmanager. Stattdessen wird erwartet, dass alle zusätzlichen Anwendungen als Docker-Container ausgeführt werden, was die Isolierung, Portabilität und externe Verwaltung der Dienste ermöglicht.

Beim Booten liest CoreOS eine vom Benutzer bereitgestellte Konfigurationsdatei mit dem Namen "cloud-config", um eine Erstkonfiguration durchzuführen. Mit dieser Datei kann CoreOS eine Verbindung zu anderen Mitgliedern eines Clusters herstellen, wichtige Dienste starten und wichtige Parameter neu konfigurieren. Auf diese Weise kann CoreOS bei der Erstellung sofort einem Cluster als Arbeitseinheit beitreten.

Normalerweise teilt die Cloud-Konfigurationsdatei dem Host mindestens mit, wie er einem vorhandenen Cluster beitreten soll, und weist den Host an, zwei Dienste mit den Namen "+ etcd " und " fleet +" zu starten. Alle drei Aktionen sind miteinander verbunden. Sie ermöglichen es dem neuen Host, eine Verbindung mit den vorhandenen Servern herzustellen, und stellen die Tools bereit, die zum Konfigurieren und Verwalten der einzelnen Knoten im Cluster erforderlich sind. Grundsätzlich sind dies die Voraussetzungen, um einen CoreOS-Knoten in einen Cluster zu booten.

Der Dämon "+ etcd +" wird zum Speichern und Verteilen von Daten an jeden der Hosts in einem Cluster verwendet. Dies ist nützlich, um konsistente Konfigurationen beizubehalten, und dient auch als Plattform, auf der sich Dienste anmelden können. Dieser Service-Discovery-Mechanismus kann von anderen Services verwendet werden, um Informationen abzufragen und deren Konfigurationsdetails anzupassen. Beispielsweise kann ein Load Balancer beim Start die IP-Adressen mehrerer Back-End-Webserver abfragen.

Der + fleet + Daemon ist im Grunde ein verteiltes Init-System. Dies funktioniert, indem Sie sich in das Init-System "+ systemd " auf jedem einzelnen Host in einem Cluster einhängen. Es verwaltet die Serviceplanung und schränkt die Bereitstellungsziele basierend auf benutzerdefinierten Kriterien ein. Benutzer können den Cluster als eine Einheit mit " fleet +" konzipieren, anstatt sich um jeden einzelnen Server kümmern zu müssen.

Nachdem Sie einen allgemeinen Überblick über das System als Ganzes erhalten haben, gehen wir nun auf die einzelnen Komponenten ein. Es ist wichtig, die jeweilige Rolle zu verstehen.

Eine grundlegende Übersicht über Docker

Docker ist ein Containerisierungssystem, das LXC, auch als Linux-Container bezeichnet, verwendet und Kernel-Namespaces und -Cgroups verwendet, um Prozesse zu isolieren.

Die Isolierung trägt dazu bei, die Betriebsumgebung der Anwendung sauber und vorhersehbar zu halten. Einer der Hauptvorteile dieses Systems ist jedoch, dass es die Verteilung von Software trivial macht. Ein Docker-Container sollte unabhängig von der Betriebsumgebung in der Lage sein, genau dasselbe auszuführen. Dies bedeutet, dass ein auf einem Laptop erstellter Container nahtlos in einem Cluster im gesamten Rechenzentrum ausgeführt werden kann.

Mit Docker können Sie eine funktionierende Softwareumgebung mit allen erforderlichen Abhängigkeiten verteilen. Docker-Container können neben anderen Containern ausgeführt werden, fungieren jedoch als einzelne Server. Der Vorteil von Docker-Containern gegenüber der Virtualisierung besteht darin, dass Docker nicht versucht, ein gesamtes Betriebssystem zu emulieren, sondern nur die Komponenten implementiert, die zum Ausführen der Anwendung erforderlich sind. Aus diesem Grund bietet Docker viele Vorteile der Virtualisierung, jedoch ohne die hohen Ressourcenkosten.

CoreOS nutzt Docker-Container für jede Software außerhalb des kleinen Satzes, der in der Basisinstallation enthalten ist. Das bedeutet, dass fast alles in einem Container laufen muss. Dies mag auf den ersten Blick mühsam erscheinen, erleichtert jedoch die Cluster-Orchestrierung erheblich. CoreOS ist in erster Linie für die Manipulation auf Clusterebene und nicht auf Serverebene konzipiert.

Dies erleichtert die Verteilung von Diensten und die Verteilung Ihrer Last auf CoreOS. Mit den enthaltenen Tools und Diensten können Sie Prozesse auf jedem der verfügbaren Knoten innerhalb Ihrer angegebenen Einschränkungen starten. Docker ermöglicht die Verteilung dieser Dienste und Aufgaben als eigenständige Blöcke anstelle von Anwendungen, die auf jedem Knoten konfiguriert werden müssen.

Ein grundlegender Überblick über Etcd

Um jedem Knoten in einem Cluster einen konsistenten Satz globaler Daten zur Verfügung zu stellen und die Diensterkennungsfunktionalität zu aktivieren, wurde ein Dienst mit dem Namen "+ etcd +" entwickelt.

Der etcd-Dienst ist ein hochverfügbarer Schlüsselwertspeicher, mit dem jeder Knoten Konfigurationsdaten abrufen, Informationen zur Ausführung von Diensten abfragen und Informationen veröffentlichen kann, die anderen Mitgliedern bekannt sein sollten. Jeder Knoten führt einen eigenen etcd-Client aus. Diese sind so konfiguriert, dass sie mit den anderen Clients im Cluster kommunizieren, um Informationen gemeinsam zu nutzen und zu verteilen.

Anwendungen, die Informationen aus dem Geschäft abrufen möchten, müssen lediglich eine Verbindung zur Schnittstelle "+ etcd " auf ihrem lokalen Computer herstellen. Alle " etcd +" - Daten sind auf jedem Knoten verfügbar, unabhängig davon, wo sie tatsächlich gespeichert sind, und jeder gespeicherte Wert wird automatisch im gesamten Cluster verteilt und repliziert. Führerwahlen werden ebenfalls automatisch abgewickelt, was die Verwaltung des Schlüsselspeichers ziemlich trivial macht.

Für die Interaktion mit etcd-Daten können Sie entweder die einfache HTTP / JSON-API (standardmäßig verfügbar unter "+ http: //127.0.0.1: 4001 / v2 / keys / ") oder ein mitgeliefertes Hilfsprogramm mit dem Namen "" verwenden + etcdctl + `zum Manipulieren oder Lesen von Daten. Sowohl der Befehl " etcdctl +" als auch die HTTP-API sind einfache und vorhersehbare Möglichkeiten zur Interaktion mit dem Geschäft.

Es ist wichtig zu wissen, dass auf die HTTP-API auch Anwendungen zugreifen können, die in Docker-Containern ausgeführt werden. Dies bedeutet, dass die Konfiguration für einzelne Container die in etcd gespeicherten Werte berücksichtigen kann.

Ein grundlegender Überblick über die Flotte

Um die von Ihnen erstellten CoreOS-Cluster tatsächlich zu orchestrieren, wird ein Tool namens "+ fleet +" verwendet. Als recht einfaches Konzept fungiert die Flotte als clusterweites Init-System.

Jeder einzelne Knoten in einer Cluster-Umgebung betreibt sein eigenes konventionelles Init-System "+ systemd ". Dies wird zum Starten und Verwalten von Diensten auf dem lokalen Computer verwendet. Vereinfacht ausgedrückt bietet die Flotte eine Schnittstelle für die Steuerung der " systemd +" - Systeme der einzelnen Clustermitglieder.

Sie können Dienste starten oder stoppen oder Statusinformationen zu ausgeführten Prozessen im gesamten Cluster abrufen. Die Flotte unternimmt jedoch einige wichtige Schritte, um dies nutzbarer zu machen. Es verwaltet den Prozessverteilungsmechanismus, sodass Dienste auf weniger ausgelasteten Hosts gestartet werden können.

Sie können auch Platzierungsbedingungen für die von Ihnen ausgeführten Services angeben. Sie können darauf bestehen, dass ein Dienst auf bestimmten Hosts ausgeführt werden muss oder nicht, je nachdem, wo sie sich befinden, was sie bereits ausführen und mehr. Da die Flotte systemd nutzt, um die lokalen Prozesse zu starten, handelt es sich bei jeder der Dateien, die Dienste definieren, um systemd-Einheitendateien (mit einigen benutzerdefinierten Optionen). Sie können diese Konfigurationsdateien einmal an die Flotte übergeben und für den gesamten Cluster verwalten.

Diese Flexibilität macht es einfach, hochverfügbare Konfigurationen zu entwerfen. Beispielsweise können Sie verlangen, dass jeder Ihrer Webserver-Container auf separaten Knoten bereitgestellt wird. Auf ähnliche Weise können Sie sicherstellen, dass ein Hilfscontainer nur auf Knoten bereitgestellt wird, auf denen der übergeordnete Container ausgeführt wird.

Jeder der Mitgliedsknoten kann zum Verwalten des Clusters mit dem Dienstprogramm + fleetctl + verwendet werden. Auf diese Weise können Sie Dienste planen, Knoten verwalten und den allgemeinen Status Ihrer Systeme anzeigen. Das Programm + fleetctl + wird Ihre Hauptschnittstelle zu Ihrem Cluster sein.

Fazit

CoreOS unterscheidet sich möglicherweise von den meisten anderen Linux-Distributionen, mit denen Sie vertraut sind. Jede der Designentscheidungen wurde im Hinblick auf eine einfache Clusterverwaltung und Anwendungsportabilität getroffen. Dies führte zu einer konzentrierten, leistungsstarken Distribution, die auf die Anforderungen moderner Infrastruktur- und Anwendungsskalierung zugeschnitten ist.

Weitere Informationen zu den ersten Schritten finden Sie in unserem Handbuch unter getting a CoreOS cluster läuft auf DigitalOcean.