Konfigurationsmanagement (englisch Configuration Management) ist die Disziplin, IT-Systeme automatisiert in einen definierten Soll-Zustand zu bringen und diesen dauerhaft zu halten. Statt jede Maschine von Hand einzurichten, beschreibt man den gewünschten Endzustand in Code und ein Werkzeug gleicht die Realität kontinuierlich daran an. Bekannte Vertreter sind Ansible, Puppet, Chef und SaltStack.

Desired State und Idempotenz

Das Herzstück ist das Konzept des Desired State (gewünschter Zustand): Eine Konfigurationsdatei legt fest, welche Pakete installiert, welche Dienste aktiv und welche Dateien vorhanden sein sollen. Das Werkzeug prüft bei jedem Lauf, ob der Ist-Zustand vom Soll abweicht, und korrigiert nur die Abweichung. Dadurch sind die Läufe idempotent: Mehrfach ausführen erzeugt kein Doppeltes, sondern immer dasselbe Ergebnis.

Agentenbasiert oder agentenlos

Die Werkzeuge unterscheiden sich im Transportweg. Ansible arbeitet agentenlos: Es verbindet sich per SSH mit den Zielsystemen, führt dort temporär Python-Code aus und benötigt keine dauerhafte Installation. Puppet, Chef und SaltStack setzen dagegen einen kleinen Agenten (Minion bzw. Agent) auf jedem verwalteten System voraus, der sich zum zentralen Master verbindet und Anweisungen entgegennimmt. Diese Architektur eignet sich besonders für sehr große Installationen, da der Master Änderungen aktiv an alle Systeme pushen kann.

Abgrenzung: Provisionierung und Infrastructure as Code

Konfigurationsmanagement bringt bestehende Systeme in den Soll-Zustand und hält sie dort. Davon abzugrenzen ist die Provisionierung, die ein System erst erzeugt und grundlegend einrichtet — etwa eine neue VM oder einen Cloud-Server anlegt. Beides zusammen ergibt Infrastructure as Code: Die komplette Infrastruktur wird als Code verwaltet, versioniert und reproduzierbar aufgebaut.

Praxis-Tipps

  • Konfigurationen immer in einem Versionsverwaltungssystem wie Git ablegen.
  • Konfigurationsmanagement und Provisionierung nicht vermischen: Terraform legt Infrastruktur an, Ansible richtet sie ein.
  • Mit Testumgebungen beginnen und Rollouts schrittweise (Canary) ausrollen.

Verwandte Grundlagen: Provisionierung, SaltStack, Ansible, Puppet, Chef, Infrastructure as Code.