Eine Einführung in die SaltStack-Terminologie und -Konzepte

Einführung

Salt oder SaltStack ist ein Tool zur Remote-Ausführung und ein Konfigurationsverwaltungssystem. Mithilfe der Funktionen zur Remote-Ausführung können Administratoren Befehle auf verschiedenen Computern parallel zu einem flexiblen Zielsystem ausführen. Die Konfigurationsverwaltungsfunktion erstellt ein Client-Server-Modell, um Infrastrukturkomponenten schnell, einfach und sicher mit einer bestimmten Richtlinie in Einklang zu bringen.

In diesem Handbuch werden einige der grundlegenden Konzepte und Begriffe erläutert, die für einen effektiven Einstieg in den Umgang mit Salt erforderlich sind.

Salt Machine Rollen

Die Kontrollstruktur von Salt ist im Hinblick auf Konfigurationsmanagementsysteme recht einfach. In einer typischen Konfiguration gibt es nur zwei verschiedene Maschinenklassen.

Meister

Das Saltmaster ist der Computer, der die Infrastruktur steuert und Richtlinien für die von ihm verwalteten Server vorschreibt. Es fungiert sowohl als Repository für Konfigurationsdaten als auch als Kontrollzentrum, das Remote-Befehle initiiert und den Status Ihrer anderen Maschinen sicherstellt. Auf dem Master ist ein Daemon namenssalt-master installiert, um diese Funktionalität bereitzustellen.

Während es möglich ist, die Infrastruktur mit einer Konfiguration ohne Master zu steuern, profitieren die meisten Setups von den erweiterten Funktionen des Salt Masters. Für ein umfassenderes Infrastrukturmanagement kann Salt bestimmte Komponenten und Aufgaben, die normalerweise mit dem Master verbunden sind, an dedizierte Server delegieren. Es kann auch in einer gestuften Masterkonfiguration betrieben werden, in der Befehle über untergeordnete Master-Maschinen weitergeleitet werden können.

Minions

Die von Salt verwalteten Server heißenminions. Auf jedem der verwalteten Computer ist ein Daemon namenssalt-minion installiert und für die Kommunikation mit dem Master konfiguriert. Der Minion ist dafür verantwortlich, die vom Master gesendeten Anweisungen auszuführen, über den Erfolg von Jobs zu berichten und Daten über den zugrunde liegenden Host bereitzustellen.

Wie Salzkomponenten kommunizieren

Salt Master und Minions kommunizieren standardmäßig über die ZeroMQ-Nachrichtenbibliothek. Dadurch wird eine äußerst leistungsfähige Netzwerkkommunikation zwischen den Parteien bereitgestellt, sodass Salt Nachrichten und Daten mit hoher Geschwindigkeit senden kann. Da ZeroMQ eine Bibliothek und kein unabhängiger Dienst ist, ist diese Funktionalität in den Dämonensalt-master undsalt-minion nativ verfügbar.

Bei der Verwendung von ZeroMQ unterhält Salt ein öffentliches Schlüsselsystem zur Authentifizierung von Mastern und Minions. Beim ersten Start generiert ein Minion ein Schlüsselpaar und sendet seine Anmeldeinformationen an den Masterserver, mit dem er Kontakt aufnehmen soll. Der Master kann diesen Schlüssel dann akzeptieren, nachdem er die Identität des Minions überprüft hat. Die beiden Parteien können dann schnell und sicher mit ZeroMQ kommunizieren, das mit den Schlüsseln verschlüsselt ist.

Wenn es aus irgendeinem Grund nicht möglich ist, den Daemonsalt-minionauf einem Knoten zu installieren, kann Salt auch Befehle über SSH ausgeben. Diese Transportoption wird aus praktischen Gründen bereitgestellt, beeinträchtigt jedoch die Leistung erheblich und kann in einigen Fällen zu Komplikationen mit anderen Salt-Befehlen führen. Es wird dringend empfohlen, nach Möglichkeit den Daemonsalt-minionzu verwenden, um Leistung, Sicherheit und Einfachheit zu gewährleisten.

Salz-Terminologie

Bevor Sie in Salt eintauchen, sollten Sie sich mit einigen der verwendeten Begriffe vertraut machen. Salt hat viele leistungsstarke Funktionen, aber es kann zunächst schwierig sein, Namen mit ihrer Funktionalität abzugleichen. Werfen wir einen Blick auf einige der allgemeineren Begriffe, die Sie wahrscheinlich sehen werden.

Remote Execution: Ausführungsmodule und -funktionen

Salt versucht, eine Unterscheidung zwischen den Funktionen für die Remoteausführung und die Konfigurationsverwaltung zu treffen. Die Remote-Ausführungsfunktionen werden vonexecution modules bereitgestellt. Ausführungsmodule sind Sätze verwandterfunctions, die Arbeiten an Schergen ausführen.

Während Salt Funktionen enthält, mit denen Sie beliebige Shell-Befehle auf Minions ausführen können, besteht die Idee hinter den Ausführungsmodulen darin, einen übersichtlichen Mechanismus zum Ausführen von Befehlen bereitzustellen, ohne dass eine Shell ausgeführt werden muss, und detaillierte Anweisungen zum Abschließen des Prozesses bereitzustellen. Durch die Verwendung von Modulen kann Salt die zugrunde liegenden Unterschiede zwischen Systemen abstrahieren. Sie können ähnliche Informationen von Schergen erhalten, die Linux oder BSD ausführen, obwohl die tatsächlichen Mechanismen zum Sammeln dieser Daten unterschiedlich wären.

Salt wird mit einer anständigen Auswahl vonbuiltin execution modules geliefert, um eine sofort einsatzbereite Funktionalität bereitzustellen. Administratoren können auch ihre eigenen Module schreiben odercommunity-written modules einschließen, um die Befehlsbibliothek zu erweitern, die auf Minion-Computern ausgeführt werden kann.

Konfigurationsverwaltung: Status, Formeln und Vorlagen

Auf die Konfigurationsverwaltungsfunktionalität von Salt kann durch Erstellen von Repositorys für Konfigurationsdateien zugegriffen werden. Die in diesen Repositorys enthaltenen Dateien können von einigen unterschiedlichen Typen sein.

Zustände und Formeln

Der Konfigurationsverwaltungsabschnitt von Salt wird hauptsächlich unter Verwendung desstate-Systems implementiert.

Das Statussystem verwendetstate modules, die sich von den oben beschriebenen Ausführungsmodulen unterscheiden. Glücklicherweise spiegeln sich State- und Execution-Module ziemlich genau. Das Statussystem trägt den passenden Namen, da es einem Administrator ermöglicht, den Status zu beschreiben, in den ein System versetzt werden soll. Wie bei Ausführungsmodulen stellen die meisten Statusmodule Funktionsverknüpfungen dar und bieten eine einfache Syntax für viele gängige Aktionen. Auf diese Weise bleibt die Lesbarkeit erhalten, und es ist nicht mehr erforderlich, komplexe Logik in die Konfigurationsverwaltungsdateien selbst aufzunehmen.

Saltformulas sind Sätze von Zustandsmodulaufrufen, die mit dem Ziel angeordnet sind, ein bestimmtes Ergebnis zu erzielen. Dies sind die Konfigurationsverwaltungsdateien, die beschreiben, wie ein System aussehen soll, wenn die Formel angewendet wurde. Standardmäßig werden diese im YAML-Datenserialisierungsformat geschrieben, das einen sehr guten Mittelweg zwischen hoher Lesbarkeit und Maschinenfreundlichkeit bietet.

Der Salt-Administrator kann Formeln anwenden, indem er Schergen bestimmten Formelsätzen zuordnet. Formeln können bei Bedarf auch ad hoc angewendet werden. Minions führen die darin enthaltenen Zustandsmodule aus, um das System mit den bereitgestellten Richtlinien in Einklang zu bringen.

Eine gute Sammlung von Salt-Formeln, die von der SaltStack-Organisation und -Community erstellt wurden, finden Sie inthis GitHub account.

Vorlagen

MitTemplating können Salt-Formeln und andere Dateien flexibler geschrieben werden. Vorlagen können die verfügbaren Informationen zu den Minions verwenden, um benutzerdefinierte Versionen von Formel- oder Konfigurationsdateien zu erstellen. Standardmäßig verwendet Salt das Jinja-Vorlagenformat, das Substitutionsfunktionen und einfache logische Konstrukte für die Entscheidungsfindung bereitstellt.

Renderers sind die Komponenten, mit denen die Vorlage ausgeführt wird, um gültige Status- oder Konfigurationsdateien zu erstellen. Renderer werden durch das Vorlagenformat, das die Eingabe darstellt, und das Datenserialisierungsformat definiert, das als Ausgabe erstellt wird. Unter Berücksichtigung der oben beschriebenen Standardeinstellungen verarbeitet der Standardrenderer Jinja-Vorlagen, um YAML-Dateien zu erstellen.

Informationen abfragen und Minions zuweisen

Um eine große Anzahl von Systemen verwalten zu können, benötigt Salt einige Informationen zu den einzelnen Hostsystemen. Die oben beschriebenen Vorlagen können Daten verwenden, die jedem System zugeordnet sind, um das Verhalten jedes Minions anzupassen. Es gibt verschiedene Systeme, mit denen diese Informationen abgefragt oder Hosts zugewiesen werden können.

Körner

Saltgrains sind Informationen, die von einem Diener gesammelt und gepflegt werden, hauptsächlich in Bezug auf das zugrunde liegende Wirtssystem. Diese werden normalerweise vom Daemonsalt-miniongesammelt und auf Anfrage an den Master zurückgegeben. Diese Funktionalität kann für viele verschiedene Zwecke genutzt werden.

Zum Beispiel können Getreidedaten verwendet werden, um auf eine bestimmte Teilmenge von Knoten aus dem Pool von Minions für die Remoteausführung oder das Konfigurationsmanagement abzuzielen. Wenn Sie die Verfügbarkeit Ihrer Ubuntu-Server anzeigen möchten, können Sie mit Körnern nur diese Computer als Ziel festlegen.

Körner können auch als Argumente für Konfigurationsänderungen oder Befehle verwendet werden. Sie können beispielsweise Körner verwenden, um die IPv4-Adresse abzurufen, die dereth0-Schnittstelle zugeordnet ist, für eine Änderung an einer Konfigurationsdatei oder als Argument für einen Befehl.

Administratoren können Minions auch Körner zuweisen. Beispielsweise ist es ziemlich üblich, Körner zu verwenden, um einem Server eine „Rolle“ zuzuweisen. Dies kann dann verwendet werden, um auf eine Teilmenge von Knoten abzuzielen, die dem obigen Betriebssystembeispiel ähnelt.

Säulen

Während es möglich ist, Schergen Körner zuzuweisen, wird die überwiegende Mehrheit der Konfigurationsvariablen über daspillars-System zugewiesen. In Salt stellt eine Säule einen Schlüsselwertspeicher dar, mit dem ein Minion beliebige zugewiesene Daten abrufen kann. Dies fungiert als Wörterbuchdatenstruktur, die aus organisatorischen Gründen verschachtelt oder gestaffelt werden kann.

Säulen bieten gegenüber dem Getreidesystem einige wichtige Vorteile bei der Wertzuweisung. Am wichtigsten ist, dass Säulendaten nur den ihnen zugewiesenen Dienern zur Verfügung stehen. Andere Diener haben keinen Zugriff auf die darin gespeicherten Werte. Dies macht es ideal zum Speichern vertraulicher Daten, die für einen Knoten oder eine Teilmenge von Knoten spezifisch sind. Beispielsweise werden geheime Schlüssel oder Datenbankverbindungszeichenfolgen häufig in einer Säulenkonfiguration bereitgestellt.

Säulendaten werden häufig im Konfigurationsverwaltungskontext genutzt, um variable Daten in eine Konfigurationsvorlage einzufügen. Salt bietet eine Auswahl von Vorlagenformaten zum Ersetzen der variablen Teile einer Konfigurationsdatei durch die Elemente, die für den Knoten spezifisch sind, auf den sie angewendet werden. Auf diese Weise werden häufig auch Körner zum Referenzieren von Hostdaten verwendet.

Mine

Saltmine ist ein Bereich auf dem Master-Server, in dem die Ergebnisse regelmäßig ausgeführter Befehle für Minions gespeichert werden können. Der Zweck dieses Systems ist es, die Ergebnisse von beliebigen Befehlen zu sammeln, die auf Minion-Maschinen ausgeführt werden. Dieser globale Speicher kann dann von anderen Komponenten und Minions in Ihrer gesamten Infrastruktur abgefragt werden.

In der Salzmine wird nur das aktuellste Ergebnis für jede Befehlsausführung gespeichert, was bedeutet, dass es Ihnen nicht hilft, wenn Sie auf historische Daten zugreifen müssen. Der Hauptzweck der Mine ist die Bereitstellung aktueller Informationen von Minion-Maschinen als flexible Ergänzung zu den bereits verfügbaren Getreidedaten. Minions können mithilfe des Minensystems Daten über ihre Gegenstücke abfragen. Das Intervall, in dem der Minion die Daten in der Mine aktualisiert, kann pro Minion konfiguriert werden.

Zusätzliche Funktionalität

Salt bietet einige andere Systeme, die nicht gut in die oben genannten Kategorien passen.

Reaktoren

Das Saltreactor-System bietet einen Mechanismus zum Auslösen von Aktionen als Reaktion auf generierte Ereignisse. In Salt führen Änderungen in Ihrer Infrastruktur dazu, dass die Dämonensalt-minion odersalt-master Ereignisse auf einem ZeroMQ-Nachrichtenbus generieren. Das Reaktorsystem überwacht diesen Bus und vergleicht Ereignisse mit den konfigurierten Reaktoren, um angemessen zu reagieren.

Das Hauptziel des Reaktorsystems besteht darin, ein flexibles System zur Erzeugung automatisierter Situationsreaktionen bereitzustellen. Wenn Sie beispielsweise eine Strategie zur automatischen Skalierung entwickelt haben, erstellt Ihr System automatisch Knoten, um Ihre Ressourcenanforderungen dynamisch zu erfüllen. Jeder neue Knoten würde ein Ereignis auslösen. Es könnte eine Drossel eingerichtet werden, um diese Ereignisse abzuhören und den neuen Knoten zu konfigurieren und ihn in die vorhandene Infrastruktur einzubinden.

Läufer

Saltrunners sind Module, die auf dem Master-Server anstelle von Minions ausgeführt werden. Einige Läufer sind Allzweck-Dienstprogramme, mit denen der Status verschiedener Teile des Systems überprüft oder Wartungsarbeiten durchgeführt werden können. Einige sind leistungsstarke Anwendungen, mit denen Sie Ihre Infrastruktur in größerem Maßstab orchestrieren können.

Rückkehrer

Saltreturners werden verwendet, um alternative Speicherorte anzugeben, an die die Ergebnisse einer Aktion gesendet werden, die auf einem Diener ausgeführt wird. Standardmäßig senden Minions ihre Daten an den Master zurück. Ein Returner ermöglicht es dem Administrator, die zurückgegebenen Daten an ein anderes Ziel weiterzuleiten. In der Regel bedeutet dies, dass die Ergebnisse an das vom Rückkehrerand angegebene Ziel für den Prozess zurückgegeben werden, der den Minion-Befehl initiiert hat.

In den meisten Fällen leiten die Rückkehrer die Ergebnisse an ein Datenbanksystem oder einen Metrik- oder Protokollierungsdienst weiter. Dies bietet eine flexible Methode, um beliebige Daten in diese Systeme zu übertragen. Rückholer können auch verwendet werden, um salzspezifische Daten wie Job-Caches und Ereignisdaten zu erfassen.

Salt-Befehle

Salt bietet eine Reihe von Befehlen, um die oben beschriebenen Komponenten zu nutzen. In Bezug auf die Funktionalität dieser Tools gibt es einige erhebliche Unterschiede. Wir haben jedoch versucht, die wichtigsten Funktionen im Folgenden hervorzuheben.

  • salt-master: Dies ist der Master-Daemon-Prozess. Sie können den Master-Dienst mit diesem Befehl direkt oder in der Regel über ein Init-Skript oder eine Dienstdatei starten.

  • salt-minion: Dies ist ebenfalls ein Minion-Daemon-Prozess, der zur Kommunikation mit dem Master und zur Ausführung von Befehlen verwendet wird. Die meisten Benutzer starten dies auch über Init-Skripte oder Dienstdateien.

  • salt-key: Mit diesem Tool werden öffentliche Minion-Schlüssel verwaltet. Dieses Tool wird verwendet, um aktuelle Schlüssel anzuzeigen und Entscheidungen über öffentliche Schlüssel zu treffen, die von angehenden Dienern gesendet werden. Es kann auch Schlüssel generieren, die auf Schergen außerhalb des Bandes platziert werden.

  • salt: Mit diesem Befehl werden Schergen als Ziel ausgewählt, um Ad-hoc-Ausführungsmodule auszuführen. Dies ist das Hauptwerkzeug für die Remote-Ausführung.

  • salt-ssh: Mit diesem Befehl können Sie SSH als Alternative zu ZeroMQ für den Transportmechanismus verwenden.

  • salt-run: Mit diesem Befehl werden Runner-Module auf dem Master-Server ausgeführt.

  • salt-call: Mit diesem Befehl werden Ausführungsmodule direkt auf einem Minion ausgeführt, bei dem Sie angemeldet sind. Dies wird oft verwendet, um problematische Befehle zu debuggen, indem der Master umgangen wird.

  • salt-cloud: Mit diesem Befehl werden Cloud-Ressourcen von vielen verschiedenen Anbietern gesteuert und bereitgestellt. Neue Minions können einfach hochgefahren und gebootet werden.

Es gibt auch einige andere Befehle wiesalt-api,salt-cp undsalt-syndic, die nicht so häufig verwendet werden.

Fazit

Nachdem Sie mit der grundlegenden SaltStack-Terminologie vertraut sind und einen umfassenden Überblick über die Tools haben, für die Sie verantwortlich sind, können Sie Salt einrichten, um Ihre Infrastruktur zu steuern. Innext guide wird beschrieben, wie ein Salt-Master-Server auf einem Ubuntu 14.04-Server installiert und konfiguriert wird. Wir werden auch zeigen, wie Sie neue Minion-Server konfigurieren, um sie unter die Verwaltung Ihres Masters zu bringen.