Einführung
Konfigurationsmanagement ist der Prozess der Handhabung von Änderungen an einem System auf eine Weise, die die Integrität über die Zeit sicherstellt, typischerweise unter Einsatz von Tools und Prozessen, die Automatisierung und Beobachtbarkeit ermöglichen. Obwohl dieses Konzept nicht in der IT-Branche entstanden ist, wird der Begriff weitgehend zur Bezeichnung von Server-Konfigurationsmanagement verwendet.
Im Kontext von Servern wird Konfigurationsmanagement auch häufig als IT-Automatisierung oder Server-Orchestrierung bezeichnet. Beide Begriffe betonen die praktischen Aspekte des Konfigurationsmanagements und die Fähigkeit, mehrere Systeme von einem zentralen Server aus zu steuern.
Dieser Leitfaden führt Sie durch die Vorteile der Verwendung eines Konfigurationsmanagement-Tools zur Automatisierung Ihrer Serverinfrastruktur-Einrichtung und wie ein solches Tool, Ansible, Ihnen dabei helfen kann.
Vorteile der Verwendung eines Konfigurationsmanagement-Tools
Es gibt eine Vielzahl von Konfigurationsverwaltungstools auf dem Markt, mit unterschiedlichen Komplexitätsgraden und vielfältigen Architekturstilen. Obwohl jedes dieser Tools seine eigenen Eigenschaften hat und etwas unterschiedlich arbeitet, bieten sie alle die gleiche Funktion: sicherzustellen, dass der Zustand eines Systems dem Zustand entspricht, der durch einen Satz von Bereitstellungsskripten beschrieben wird.
Viele der Vorteile der Konfigurationsverwaltung für Server ergeben sich aus der Fähigkeit, Ihre Infrastruktur als Code zu definieren. Dies ermöglicht Ihnen:
- Ein Versionskontrollsystem zu verwenden, um Änderungen in Ihrer Infrastruktur zu verfolgen
- Bereitstellungsskripte für mehrere Serverumgebungen wie Entwicklung, Tests und Produktion wiederzuverwenden
- Bereitstellungsskripte zwischen Kollegen zu teilen, um die Zusammenarbeit in einer standardisierten Entwicklungsumgebung zu erleichtern
- Den Prozess der Replikation von Servern zu optimieren, was die Wiederherstellung nach kritischen Fehlern erleichtert
Darüber hinaus bieten Konfigurationsverwaltungstools Ihnen eine Möglichkeit, einen bis mehrere hundert Server von einem zentralen Ort aus zu steuern, was die Effizienz und Integrität Ihrer Serverinfrastruktur erheblich verbessern kann.
Ansible Übersicht
Ansible ist ein modernes Konfigurationsverwaltungstool, das die Aufgabe der Einrichtung und Wartung von Remote-Servern erleichtert und mit einem minimalistischen Design konzipiert ist, um Benutzern einen schnellen Einstieg zu ermöglichen.
Benutzer schreiben Ansible-Bereitstellungsskripte in YAML, ein benutzerfreundliches Datenserialisierungsformat, das an keine bestimmte Programmiersprache gebunden ist. Dies ermöglicht es Benutzern, komplexe Bereitstellungsskripte intuitiver zu erstellen als mit ähnlichen Tools in derselben Kategorie.
Ansible erfordert keine spezielle Software auf den Knoten, die mit diesem Tool verwaltet werden. Ein Steuermaschine wird mit der Ansible-Software eingerichtet, die dann über SSH mit den Knoten kommuniziert.
Als Konfigurationsverwaltungstool und Automatisierungsframework kapselt Ansible alle allgemeinen Funktionen, die in anderen Tools derselben Kategorie vorhanden sind, und legt dabei weiterhin einen starken Fokus auf Einfachheit und Leistung:
Idempotentes Verhalten
Ansible verfolgt den Zustand von Ressourcen in verwalteten Systemen, um die Wiederholung bereits ausgeführter Aufgaben zu vermeiden. Wenn ein Paket bereits installiert wurde, wird es nicht erneut installiert. Ziel ist es, dass das System nach jeder Bereitstellungsausführung den gewünschten Zustand erreicht (oder beibehält), auch wenn es mehrmals ausgeführt wird. Dies charakterisiert Ansible und andere Konfigurationsverwaltungstools als idempotentes Verhalten. Bei der Ausführung eines Playbooks wird der Status jeder ausgeführten Aufgabe und ob die Aufgabe eine Änderung im System durchgeführt hat, angezeigt.
Unterstützung für Variablen, Bedingungen und Schleifen
Beim Schreiben von Ansible-Automatisierungsskripten können Sie Variablen, Bedingungen und Schleifen verwenden, um Ihre Automatisierung vielseitiger und effizienter zu gestalten.
Systemfakten
Ansible sammelt eine Reihe detaillierter Informationen über die verwalteten Knoten, wie Netzwerkschnittstellen und Betriebssystem, und stellt diese als globale Variablen namens Systemfakten bereit. Fakten können in Playbooks verwendet werden, um die Automatisierung vielseitiger und anpassungsfähiger zu machen, die sich je nach System, das bereitgestellt wird, unterschiedlich verhält.
Templating-System
Ansible nutzt das Jinja2 Python-Templating-System, um dynamische Ausdrücke und den Zugriff auf Variablen zu ermöglichen. Vorlagen können zur Erleichterung der Einrichtung von Konfigurationsdateien und Diensten verwendet werden. Beispielsweise können Sie eine Vorlage verwenden, um einen neuen virtuellen Host in Apache einzurichten, während Sie dieselbe Vorlage für mehrere Serverinstallationen wiederverwenden.
Unterstützung für Erweiterungen und Module
Ansible bietet Hunderte von eingebauten Modulen, die das Schreiben von Automatisierungen für häufige Systemverwaltungsaufgaben erleichtern, wie zum Beispiel die Installation von Paketen mit apt
und die Synchronisation von Dateien mit rsync
, sowie für die Handhabung von beliebter Software wie Datenbanksystemen (wie MySQL, PostgreSQL, MongoDB und andere) und Abhängigkeitsmanagement-Tools (wie PHP’s composer
, Ruby’s gem
, Node’s npm
und andere). Darüber hinaus gibt es verschiedene Möglichkeiten, Ansible zu erweitern: Plugins und Module sind gute Optionen, wenn Sie eine benutzerdefinierte Funktionalität benötigen, die standardmäßig nicht vorhanden ist.
Sie können auch Module und Plugins von Drittanbietern im Ansible Galaxy-Portal finden.
Einarbeitung in Ansible-Konzepte
Wir werden uns nun mit der Ansible-Terminologie und den Konzepten beschäftigen, um Ihnen zu helfen, sich mit diesen Begriffen vertraut zu machen, da sie in dieser Serie immer wieder auftauchen.
Kontrollknoten
Ein Kontrollknoten ist ein System, auf dem Ansible installiert und eingerichtet ist, um eine Verbindung zu Ihren Servern herzustellen. Sie können mehrere Kontrollknoten haben, und jedes System, das Ansible ausführen kann, kann als Kontrollknoten eingerichtet werden, einschließlich persönlicher Computer oder Laptops, die ein Linux- oder Unix-basiertes Betriebssystem verwenden. Derzeit kann Ansible nicht auf Windows-Hosts installiert werden, aber Sie können diese Einschränkung umgehen, indem Sie eine virtuelle Maschine einrichten, die Linux ausführt, und Ansible von dort aus verwenden.
Verwaltete Knoten
Die Systeme, die Sie mit Ansible steuern, werden als verwaltete Knoten bezeichnet. Ansible erfordert, dass verwaltete Knoten über SSH erreichbar sind und Python 2 (Version 2.6 oder höher) oder Python 3 (Version 3.5 oder höher) installiert haben.
Ansible unterstützt eine Vielzahl von Betriebssystemen, einschließlich Windows-Server als verwaltete Knoten.
Inventar
Eine Inventardatei enthält eine Liste der Hosts, die Sie mit Ansible verwalten. Obwohl Ansible normalerweise eine Standard-Inventardatei erstellt, wenn es installiert wird, können Sie projektspezifische Inventardateien verwenden, um Ihre Infrastruktur besser zu trennen und zu vermeiden, dass Befehle oder Playbooks versehentlich auf dem falschen Server ausgeführt werden. Statische Inventardateien werden normalerweise als .ini
-Dateien erstellt, aber Sie können auch dynamisch generierte Inventardateien verwenden, die in jeder Programmiersprache geschrieben sind und JSON zurückgeben können.
Aufgaben
In Ansible ist eine Aufgabe eine einzelne Arbeitseinheit, die auf einem verwalteten Knoten ausgeführt wird. Jede auszuführende Aktion wird als Aufgabe definiert. Aufgaben können als Einzelaktion über Ad-hoc-Befehle ausgeführt werden oder in einem Playbook als Teil eines Automatisierungsskripts enthalten sein.
Playbook
Ein Playbook enthält eine geordnete Liste von Aufgaben und einige weitere Anweisungen, um anzugeben, welche Hosts das Ziel dieser Automatisierung sind, ob ein Rechteausweitungssystem verwendet werden soll, um diese Aufgaben auszuführen, und optionale Abschnitte zur Definition von Variablen oder zum Einbinden von Dateien. Ansible führt Aufgaben sequentiell aus, und eine vollständige Playbook-Ausführung wird als Spiel bezeichnet. Playbooks sind im YAML-Format geschrieben.
Handler
Handler werden verwendet, um Aktionen auf einem Dienst auszuführen, wie das Neustarten oder Stoppen eines aktiv laufenden Dienstes auf dem verwalteten Knotensystem. Handler werden typischerweise durch Aufgaben ausgelöst und ihre Ausführung erfolgt am Ende eines Spiels, nachdem alle Aufgaben abgeschlossen sind. Auf diese Weise wird beispielsweise, wenn mehr als eine Aufgabe einen Neustart eines Dienstes auslöst, der Dienst nur einmal und nach Abschluss aller Aufgaben neu gestartet. Obwohl das Standardverhalten der Handler effizienter und insgesamt eine bessere Praxis ist, ist es auch möglich, die sofortige Ausführung eines Handlers zu erzwingen, wenn dies von einer Aufgabe benötigt wird.
Rollen
Eine Rolle ist eine Gruppe von Playbooks und zugehörigen Dateien, die in eine vordefinierte Struktur geordnet sind, die von Ansible bekannt ist. Rollen erleichtern die Wiederverwendung und Umgestaltung von Playbooks in teilbare Pakete von granularer Automatisierung für spezifische Ziele, wie z.B. die Installation eines Webservers, die Einrichtung einer PHP-Umgebung oder die Einrichtung eines MySQL-Servers.
Schlussfolgerung
Ansible ist ein minimalistisches IT-Automatisierungstool, das dank seines Einsatzes von YAML für seine Bereitstellungsskripte eine leichte Lernkurve aufweist. Es verfügt über eine große Anzahl von eingebauten Modulen, die verwendet werden können, um Aufgaben wie die Installation von Paketen und die Arbeit mit Vorlagen zu abstrahieren. Seine vereinfachten Infrastrukturanforderungen und zugängliche Syntax können für diejenigen, die mit der Konfigurationsverwaltung beginnen, eine gute Passform sein.
Im nächsten Teil dieser Serie werden wir sehen, wie man Ansible auf einem Ubuntu 20.04 Server installiert und beginnt.