×

IT-Automatisierung mit Ansible

IT-Automatisierung mit Ansible

In der dynamischen und schnellen Welt der IT ist eins besonders wichtig: Effizienz. Als Team, das eine stetig steigende Anzahl an Servern betreut, suchen wir ständig nach Wegen, wie wir Aufgaben und Prozesse optimieren können. Genau hier kommt Ansible ins Spiel – ein Open-Source-Tool für IT-Automatisierung. Es hilft uns dabei, unsere Server einfacher, schneller und nachvollziehbar zu konfigurieren und zu pflegen.

Die Vorteile von Ansible

Ansible bietet eine Reihe von Vorteilen. Die wichtigsten schauen wir uns im Folgenden einzeln an:

Agentenlos

Im Gegensatz zu vielen anderen Automatisierungstools benötigt Ansible keine Software auf den Zielsystemen. Es nutzt stattdessen das bewährte SSH-Protokoll, um auf die Systeme zuzugreifen. Das bedeutet, dass alle Verbindungen über bereits bestehende und sichere Kanäle erfolgen, ohne dass zusätzliche Software auf den Servern installiert werden muss oder zusätzliche Netzwerkeinstellungen notwendig sind.

Einfachheit

Ansible setzt auf eine benutzerfreundliche Syntax, die es auch Einsteigern ermöglicht, schnell damit zu arbeiten. Die Aufgaben werden in sogenannten Playbooks beschrieben, die in YAML verfasst sind. Das macht die Konfiguration und Automatisierung für Nutzer verständlich und zugänglich.

Versionierung und Nachvollziehbarkeit durch Git

Ein großer Vorteil von YAML-Dateien ist, dass sie sich ideal zur Verwaltung in Versionierungssystemen wie z.B. Git eignen. Änderungen an den Playbooks oder Roles können problemlos nachverfolgt und jederzeit wieder rückgängig gemacht werden. Durch CI/CD-Pipelines lassen sich Änderungen direkt auf den Zielsystemen anwenden, ohne dass dabei der Überblick verloren geht.

Flexibilität

Ansible verfügt über eine Vielzahl von Modulen, die für verschiedene Aufgaben verwendet werden können. Ob es darum geht, Software zu installieren, Systeme zu konfigurieren oder Netzwerkinfrastrukturen zu verwalten – für fast jede Aufgabe gibt es ein passendes Modul. Und wenn Ansible mit seinen Standardmodulen einmal nicht auskommt, gibt es eine große Community, die regelmäßig neue Module beisteuert. So bleibt Ansible flexibel und erweiterbar, ohne dass man von Grund auf neu entwickeln muss. Außerdem werden Ansible und die Module mit Python entwickelt, was die Entwicklung eigener Module erleichtert.

Skalierbarkeit

Durch die strukturierte Aufteilung in Playbooks, Roles und das Inventory ist es leicht mit Ansible eine große Anzahl von Servern zu verwalten. Das Inventory lässt sich in Gruppen unterteilen, sodass man Playbooks gezielt nur auf bestimmten Systemen bzw. Gruppen ausführen kann.

Idempotenz

Ein besonders wichtiges Konzept in Ansible ist die Idempotenz. Dies bedeutet, dass eine Rolle oder ein Playbook immer das gleiche Ergebnis erzielt, egal wie oft es ausgeführt wird. Ein idempotenter Prozess verändert den Zustand eines Systems nur, wenn dies notwendig ist, und vermeidet unnötige Änderungen, die zu Fehlern oder inkonsistenten Zuständen führen könnten.

Variablen und Templating

Eine besonders starke Funktion von Ansible sind die Variablen. Diese können an verschiedenen Stellen definiert werden – sei es auf der Ebene eines Hosts oder einer Gruppe im Inventory oder in speziellen Dateien in Rollen. Mit Hilfe von Jinja2, einer leistungsstarken Templating-Engine, lassen sich diese Variablen dann in den Playbooks und Rollen verwenden, um dynamische Konfigurationen zu erstellen. Das bedeutet, dass ein und dasselbe Playbook mit unterschiedlichen Werten arbeiten kann, je nachdem, welchen Server es gerade konfiguriert.

Ansible in der Praxis

Aber wie kann Ansible konkret eingesetzt werden? Die Antwort auf diese Frage hängt von den Aufgaben ab, die automatisiert werden sollen. Ein grundlegendes Verständnis der Struktur und Funktionsweise von Ansible hilft dabei:

Die Basis für das Arbeiten mit Ansible bildet das Inventory, welches eine Liste der zu verwaltenden Systeme enthält. Dieses kann auch komplexe Gruppen von Servern definieren, die unterschiedliche Aufgaben ausführen müssen. Auf Basis des Inventories werden dann Playbooks erstellt. Diese sind eine Sammlung von Aufgaben, die auf den definierten Systemen ausgeführt werden sollen. Dabei kann ein Playbook eine oder mehrere Rollen (Roles) aufrufen, die wiederverwendbare Aufgaben enthalten können.

Welche Aufgaben erleichtert uns Ansible?

Wir nutzen Ansible z.B. für unsere regelmäßigen Updates der Betriebssysteme, den installieren Programmen und den Diensten, die wir (meistens) als Container deployed haben.
Dabei haben wir mehrere Gruppen für die verschiedenen Stages, wie z.B. Prod (Produktiv genutzte Server) und QS (Server zum Testen).
Während z.B. die Docker Versionen auf Prod-Servern auf konkrete Versionen gepinnt sind, nutzen wir auf QS-Servern „latest“. Verwaltet wird das in Ansible-Variablen an den Gruppen für die Stages. Ähnlich ist es bei den Image-Tags vieler Dienste. Für Prod nutzen wir nur vorher getestete Versionen, während auf QS fast alles auf „latest“, also der neusten Version ist. Eine nächtliche Pipeline, die auch unser Ansible ausführt, sorgt dann dafür, dass auf QS alles automatisch immer auf der neusten Version ist und wir zum Vorbereiten der Prod-Updates nicht erst alle Versionen händisch auf QS hochziehen müssen, bevor wir testen können, ob durch Updates irgendwas nicht mehr funktioniert.

Ein weiteres Beispiel ist z.B. das tägliche Prüfen der SSH-Keys. Wir haben in Ansible-Variablen im Inventory festgelegt, wer jeweils auf einen Server per SSH Zugriff haben soll. In einer dafür geschriebenen Rolle sind dann die Public-Keys der einzelnen User hinterlegt und jeden Tag wird geprüft, ob auch nur die Keys auf dem Server vorhanden sind, die wir in Ansible definiert haben.
Sollte jemand manuell einen Key auf einem Server abgelegt haben, wird dieser dabei entfernt und wir bekommen eine Nachricht darüber. So trägt Ansible auch zur Sicherheit unserer Server bei.

Fazit

Zusammenfassend lässt sich sagen, dass Ansible ein unglaublich mächtiges, aber gleichzeitig einfach zu handhabendes Werkzeug zur IT-Automatisierung ist. Mit seiner einfachen YAML-Syntax, der agentenlosen Architektur und der Flexibilität bietet es zahlreiche Vorteile.
Die Skalierbarkeit von Ansible macht es zu einer idealen Lösung für kleine wie auch für große Umgebungen. Wer auf der Suche nach einer schnellen und effizienten Möglichkeit ist, seine IT-Infrastruktur zu automatisieren, sollte Ansible auf jeden Fall mal ausprobieren.

Von Max-Henrik Achenbach | 12.05.2025
Max-Henrik Achenbach

Softwareentwicklung