Die meisten Benutzer finden es hilfreich zu verstehen, was Salt ist und wie es funktioniert, bevor sie mit dem Installationsvorgang beginnen. Salt verwendet ein Master-Client-Modell, bei dem ein Salt-Master Befehle an einen Client ausgibt und der Client den Befehl ausführt.

Hinweis: Im Rahmen der Initiative von VMware zum Entfernen problematischer Terminologie wird der Begriff Salt-Master in SaltStack Config und verwandten Produkten und Dokumentationen durch einen besseren Begriff ersetzt. Es kann einige Versionszyklen dauern, bevor diese Aktualisierung der Terminologie vollständig abgeschlossen ist.

Was ist Salt?

SaltStack Config wird von Salt unterstützt, einem Python-basierten Open-Source-Remoteausführungs-Framework, das für Folgendes verwendet wird:

  • Konfigurationsverwaltung
  • Automatisierung
  • Bereitstellung
  • Orchestrierung

Salt ist die Technologie, die der Kernfunktionalität von SaltStack Config zugrunde liegt. SaltStack Config verbessert und erweitert Salt und bietet zusätzliche Funktionen und Features, welche die Benutzerfreundlichkeit verbessern. Eine Übersicht der SaltStack Config-Infrastruktur finden Sie unter SaltStack Config-Systemarchitektur.

Das folgende Diagramm zeigt die primären Komponenten der grundlegenden Salt-Architektur:


Salt-Architektur

In den folgenden Abschnitten werden einige der Hauptkomponenten der Salt-Architektur beschrieben, die für die SaltStack Config-Installation relevant sind.

Salt-Master und Salt-Minions

Salt verwendet das Master-Client-Modell, bei dem ein Salt-Master Befehle an einen Client ausgibt und der Client den Befehl ausführt. Im Salt-Ökosystem ist der Salt-Master ein Server, auf dem der Salt-Master-Dienst ausgeführt wird. Er gibt Befehle an einen oder mehrere Salt-Minions aus, bei denen es sich um Knoten handelt, die den Minion-Dienst ausführen und die bei diesem bestimmten Salt-Master registriert sind.

Salt kann auch als Herausgeber-/Abonnentenmodell beschrieben werden. Der Salt-Master veröffentlicht Aufträge, die ausgeführt werden müssen, und Minions abonnieren diese Aufträge. Wenn für einen Minion ein bestimmter Auftrag gilt, führt dieser den Auftrag aus.

Wenn ein Minion die Ausführung eines Auftrags abgeschlossen hat, sendet er Auftragsrücksendungsdaten zurück an den Salt-Master. Salt verfügt über zwei Ports, die standardmäßig für die Kommunikation der Minions mit ihrem Salt-Master verwendet werden. Diese Ports arbeiten zusammen, um Daten vom Nachrichtenbus zu empfangen und an diesen zu übermitteln. Der Nachrichtenbus von Salt ist ZeroMQ, der eine asynchrone Netzwerktopologie erstellt, um die schnellstmögliche Kommunikation zu ermöglichen.

Ziele und Körnungen

Der Salt-Master gibt an, welche Minions den Auftrag ausführen sollen, indem er ein Ziel definiert. Ein Ziel ist die Gruppe von Minions, die auf einen oder mehrere Salt-Master verteilt sein können, auf die der Salt-Befehl eines Auftrags angewendet wird.

Hinweis:

Ein Salt-Master kann auch wie ein Minion verwaltet werden und ein Ziel sein, wenn er den Minion-Dienst ausgeführt.

Im Folgenden finden Sie ein Beispiel für eine der vielen Arten von Befehlen, die ein Salt-Master an einen Minion senden kann. Dieser Befehl gibt an, dass alle Minions die Vim-Anwendung installieren sollten:

salt -v '*' pkg.install vim

In diesem Fall ist „glob“ '*' das Ziel. Dies bedeutet, dass alle Minions diesen Befehl ausführen sollten. Es sind viele weitere Zieloptionen verfügbar, z. B. ein bestimmter Minion nach dessen ID oder Minions nach ihren gemeinsamen Merkmalen oder Eigenschaften (in Salt als „Körner“ bzw. „Grains“ bezeichnet).

Salt wird mit einer Schnittstelle zum Abrufen von Informationen über das zugrunde liegende System geliefert. Diese wird als „Grains“-Schnittstelle bezeichnet, da sie Salt Körner von Informationen bereitstellt. Körner werden für das Betriebssystem, den Domänennamen, die IP-Adresse, den Kernel, den Betriebssystemtyp, den Arbeitsspeicher und viele andere Systemeigenschaften erfasst. Sie können aber auch Ihre eigenen benutzerdefinierten Körnungsdaten erstellen.

Körnungsdaten sind relativ statisch. Körnungsdaten werden jedoch aktualisiert, wenn sich die Systeminformationen ändern (wie z. B. die Netzwerkeinstellungen) oder wenn einem benutzerdefinierten Korn ein neuer Wert zugewiesen wird.

Offenes Ereignissystem (Ereignisbus)

Das Ereignissystem wird für die prozessübergreifende Kommunikation zwischen dem Salt-Master und den Minions verwendet. Im Ereignissystem:

  • Ereignisse werden sowohl vom Salt-Master als auch von den Minions gesehen.
  • Ereignisse können von beiden überwacht und ausgewertet werden.

Der Ereignisbus bildet die Grundlage für die Orchestrierung und die Echtzeitüberwachung.

Alle Minions sehen Aufträge und Ergebnisse, indem sie Ereignisse, die auf dem Ereignissystem veröffentlicht werden, abonnieren. Salt verwendet ein austauschbares Ereignissystem mit zwei Ebenen:

  • ZeroMQ (0MQ) – Aktuelle Standardbibliothek auf Socket-Ebene, die eine flexible Transportebene bietet.
  • Tornado – Vollständiges TCP-basiertes Ereignissystem auf Transportebene.

Einer der größten Vorteile von Salt ist die Ausführungsgeschwindigkeit. Der Kommunikationsbus des Ereignissystems ist effizienter als die Ausführung eines Webdiensts einer höheren Ebene (HTTP). Das Remoteausführungssystem ist die Komponente, auf der alle Komponenten aufgebaut sind, wodurch eine dezentralisierte Remoteausführung die Last auf die einzelnen Ressourcen verteilen kann.

Salt-Zustände

Zusätzlich zur Remoteausführung bietet Salt eine weitere Methode zum Konfigurieren von Minions. Dabei wird angegeben, in welchem Zustand sich ein Minion befinden soll. In diesem Zusammenhang wird auch der Begriff „Salt-Zustände“ verwendet. Salt-Zustände ermöglichen die Konfigurationsverwaltung. Sie können Salt-Zustände verwenden, um die Infrastruktur mit einfachen YAML-Dateien bereitzustellen und zu verwalten. Mithilfe von Zuständen können Sie rekursive und vorhersagbare Aufgaben automatisieren, indem Sie Aufträge für Salt in die Warteschlange stellen, ohne dass zu deren Implementierung Benutzereingaben nötig sind. Mit Jinja können Sie Zustandsdateien auch eine komplexere bedingungsgesteuerte Logik hinzufügen.

Die subtilen Unterschiede zwischen der Remoteausführung und der Konfigurationsverwaltung lassen sich besonders gut mithilfe des im vorherigen Abschnitt über Ziele und Körner aufgeführten Befehls veranschaulichen, mit dem Salt das Anwendungs-Vim auf allen Minions installiert:

Methodik

Implementierung

Ergebnis

Remoteausführung

  • Führen Sie salt-v'*'pkg.installvim vom Terminal aus.
  • Installiert Vim remote auf den Ziel-Minions.

Konfigurationsverwaltung

  • Schreiben Sie eine YAML-Zustandsdatei, die prüft, ob Vim installiert ist.
  • Diese Zustandsdatei wird dann auf die Ziel-Minions angewendet.
  • Stellt sicher, dass Vim immer auf den Ziel-Minions installiert ist.
  • Salt analysiert die Zustandsdatei und bestimmt, welche Maßnahmen ergriffen werden müssen, um sicherzustellen, dass er Minion den Zustandsdeklarationen entspricht.
  • Wenn Vim nicht installiert ist, werden die Prozesse zur Installation von Vim auf den Ziel-Minions automatisiert.

Die Zustandsdatei, die prüft, ob Vim installiert ist, kann wie im folgenden Beispiel aussehen:

# File:/srv/salt/vim_install.sls
install_vim_now:
  pkg.installed:
     -pkgs:
         -vim

Um diesen Zustand auf einen Minion anzuwenden, verwenden Sie das state.apply-Modul, wie im folgenden Beispiel dargestellt:

salt '*' state.apply vim_install

Mit diesem Befehl wird der vim_install-Zustand auf alle Minions angewendet.

Formeln sind Sammlungen von Zuständen, die zusammen für die Konfiguration eines Minions oder einer Anwendung sorgen. So kann ein Zustand beispielsweise einen anderen Zustand auslösen.

Die Top-Datei

Es ist unpraktisch, jeden Zustand jedes Mal manuell ausführen zu müssen und den jeweiligen Ziel-Minion jedes Mal einzeln zu bestimmen. In einigen Umgebungen gibt es Hunderte von Zustandsdateien, die Tausenden von Ziel-Minions zugewiesen werden sollen.

Salt bietet zwei Funktionen, die bei diesem Skalierungsproblem helfen:

  • Die Datei „top.sls“: Ordnet die Salt-Zustände den entsprechenden Minions zu.
  • Die Highstate-Ausführung: Führt alle Salt-Zustände, die in top.sls beschrieben sind, in einem Durchgang aus.

In der Top-Datei erfolgt eine Zuordnung dafür, welche Zustände auf die verschiedenen Minions in bestimmten Umgebungen angewendet werden sollen. Im Folgenden finden Sie ein Beispiel für eine einfache Top-Datei:

# File: /srv/salt/top.sls
base:
  '*':
    - all_server_setup
  
  '01webserver':
    - web_server_setup

In diesem Beispiel bezieht sich base auf die Salt-Umgebung, die standardmäßig verwendet wird. Sie können nach Bedarf mehr als eine Umgebung angeben, z. B. prod, dev, QA usw.

Gruppen von Minions werden in Bezug auf die Umgebung angegeben, und die Zustände werden für jede Gruppe von Minions aufgelistet. Diese Top-Datei weist darauf hin, dass der Status all_server_setup auf alle Minions '*' und der Status web_server_setup auf den 01webserver-Minion angewendet werden soll.

Um den Salt-Befehl auszuführen, verwenden Sie die Funktion state.highstate:

salt \* state.highstate

Mit diesem Befehl wird die Top-Datei den Ziel-Minions zugewiesen.

Der Salt-Pfeiler

Der Salt-Pfeiler verteilt die auf dem Salt-Master definierten Daten nach Bedarf an die entsprechenden Minions. Der Pfeiler wird in erster Linie zum Speichern von geheimen Schlüsseln oder anderen hochsensiblen Daten wie Kontoanmeldedaten, kryptografischen Schlüsseln oder Kennwörtern verwendet. Der Pfeiler ist auch nützlich, um nicht geheime Daten zu speichern, die Sie nicht direkt in Ihren Zustandsdateien ablegen möchten, wie z. B. Konfigurationsdaten.

Der Salt-Pfeiler bringt Daten aus der entgegengesetzten Richtung wie die Körner in den Cluster ein. Während es sich bei Körnern um Daten handelt, die vom Minion generiert werden, handelt es sich beim Pfeiler um Daten, die vom Salt-Master generiert werden.

Die Pfeilerdaten sind ähnlich wie die Zustände in einem Pfeilerdaten-Statusbaum organisiert, wobei top.sls als Koordinator der Pfeilerdaten für Umgebungen und die Berechtigung der Minions bezüglich des Zugangs zu den Daten fungiert. Informationen, die mithilfe von Pfeilern übertragen werden, enthalten ein Wörterbuch, das für den Ziel-Minion erstellt und mit dem Schlüssel dieses Minions verschlüsselt ist, um eine sichere Datenübertragung zu gewährleisten. Pfeilerdaten werden pro Minion verschlüsselt, daher eigenen sie sich besonders zum Speichern sensibler Daten in dem jeweiligen Minion.

Signal- und Lichtsignalen

Das Beacon-System ist ein Überwachungstool, das eine Vielzahl von Systemprozessen auf Minions überwachen kann. Beacons können Reaktoren auslösen, die dann bei der Implementierung einer Änderung oder bei der Behebung eines Problems helfen können. Wenn beispielsweise die Antwort eines Dienstes abgelaufen ist, kann das Reaktorsystem den Dienst neu starten.

Beacons werden für eine Vielzahl von Zwecken verwendet, wie u. a.:

  • Automatisches Reporting
  • Übermittlung des Fehlerprotokolls
  • Microservice-Überwachung
  • Benutzer-Shell-Aktivität
  • Ressourcenüberwachung

Bei Kopplung mit Infrastrukturen können Beacons automatisierte vorab verfasste Reaktionen auf Infrastruktur- und Anwendungsprobleme erstellen. Reaktoren erweitern Salt mithilfe von vorab verfassten Wartungszuständen um automatisierte Reaktionen.

Reaktoren können in einer Vielzahl von Szenarien angewendet werden:

  • Infrastrukturskalierung
  • Benachrichtigung von Administratoren
  • Neustart von ausgefallenen Anwendungen
  • Automatisches Rollback

Wenn sowohl Beacons als auch Reaktoren zusammen verwendet werden, können Sie eindeutige Zustände erstellen, die auf Ihre spezifischen Anforderungen zugeschnitten sind.

Salt-Runner und Orchestrierung

Salt-Runner sind übersichtliche Anwendungen, die mit dem Befehl salt-run ausgeführt werden. Salt-Runner funktionieren ähnlich wie Salt-Ausführungsmodule. Sie werden jedoch nicht auf den Minions, sondern auf dem Salt-Master ausgeführt. Ein Salt-Runner kann ein einfacher Client-Aufruf oder eine komplexe Anwendung sein.

Salt bietet die Möglichkeit, Systemverwaltungsaufgaben im gesamten Unternehmen zu orchestrieren. Mithilfe der Orchestrierung können die Aktivitäten mehrerer Maschinen von einer zentralen Stelle aus koordiniert werden. Dies hat den zusätzlichen Vorteil, dass die Abfolge, wann bestimmte Konfigurationsereignisse auftreten sollen, gesteuert werden kann. Orchestrierungszustände werden mithilfe des Zustands-Runner-Moduls auf dem Salt-Master ausgeführt.

Wenn Sie eine Installation mit mehreren Knoten ausführen, führen Sie eigentlich eine Orchestrierung aus, um die SaltStack Config zu installieren. Im Installationsszenario mit mehreren Knoten führen Sie einen von VMware konzipierten Orchestrierungs-Highstate aus. Der Highstate läuft auf Ihrem Salt-Master und richtet die Umgebung mit mehreren Knoten ein. Er installiert die SaltStack Config-Hauptarchitektur auf den drei anderen Knoten, die PostgreSQL, Redis und den RaaS hosten werden.