Konfigurationsmanagement ist die Praxis, den Zustand von Systemen zentral, beschrieben und wiederholbar zu verwalten. Statt auf jedem Server Einstellungen von Hand zu ändern, definiert man den Sollzustand in einer Datei; ein Werkzeug setzt ihn durch und erkennt Abweichungen. Ziel ist die Abkehr von gewachsenen Einzelsystemen.

Die zentralen Begriffe

  • Deklarativ: Beschrieben wird das Ergebnis („Paket nginx ist installiert, Dienst läuft, Port 80 offen“), nicht der Weg. Das Werkzeug entscheidet, welche Schritte nötig sind.
  • Idempotenz: Ein zweiter Durchlauf ändert nichts mehr. Das ist die wichtigste Eigenschaft überhaupt – sie macht wiederholtes Anwenden gefahrlos.
  • Inventar: die Liste der verwalteten Systeme, oft gruppiert („webserver“, „datenbank“, „standort-hamburg“).
  • Rollen: wiederverwendbare Pakete von Einstellungen, etwa „nginx-rolle“ oder „postgres-rolle“, die sich kombinieren lassen.
  • Bericht: Was hat sich geändert, was war schon korrekt? Ohne Bericht ist ein Lauf nicht nachvollziehbar.

Gängige Werkzeuge und ihre Eigenarten

  • Ansible: agentenlos über SSH, Playbooks in YAML. Niedrige Einstiegshürde, läuft von einem Steuerrechner aus. Bei sehr vielen Hosts wird die serielle Verarbeitung zum Engpass.
  • Puppet: Agent-basiert, eigene Sprache. Kataloge werden zentral kompiliert und auf die Agents verteilt. Stark bei sehr großen, langlebigen Umgebungen.
  • Chef: Agent-basiert, Konfiguration in Ruby. Kochbuch-Metapher („Recipes“, „Cookbooks“) und flexible Programmlogik.
  • SaltStack: Agent-basiert mit sehr schneller Nachrichtenvermittlung; nutzt Python und YAML und eignet sich für Massenoperationen und Ereignissteuerung.

Beispiel: rollenorientierte Struktur

inventory/
  production.ini          # Gruppen und Hosts
roles/
  nginx/
    tasks/main.yml
    templates/nginx.conf.j2
    handlers/main.yml
    defaults/main.yml
site.yml                  # welche Rolle auf welche Gruppe
group_vars/
  webserver.yml           # Werte je Gruppe
host_vars/
  web01.yml               # Werte je Host

Die Trennung von Rollen (was zu tun ist) und Variablen (mit welchen Werten) ist der Schlüssel zu Wiederverwendung: Dieselbe Rolle versorgt Test- und Produktionssysteme, nur die Werte unterscheiden sich.

Meldewege und Prüfung

Ein Werkzeug, das Konfiguration durchsetzt, muss seinen Erfolg auch melden. Dry-Run-Modi (--check bei Ansible, --noop bei Puppet) zeigen Änderungen an, ohne sie auszuführen; Änderungsberichte müssen auswertbar sein, damit ein ungeplanter Neustart eines Dienstes auffällt. Diese Berichte gehören in die Überwachung – nicht in eine Datei, die niemand liest.

Zusammenspiel mit anderen Werkzeugen

Konfigurationsmanagement beschreibt was auf der Maschine passiert; Terraform beschreibt, welche Maschinen es gibt (Infrastructure as Code). Beide ergänzen sich: Terraform erzeugt die Instanz, Cloud-init macht sie erreichbar, Ansible oder ein anderes Werkzeug konfiguriert sie – oder die Konfiguration steckt schon im Packer-Abbild. Je unveränderlicher die Umgebung, desto weniger Arbeit bleibt für das laufende Konfigurationsmanagement.

Verwandte Grundlagen: Ansible, Terraform, Unveränderliche Infrastruktur, GitOps.