Chef ist ein Werkzeug für Konfigurationsmanagement und Infrastructure as Code. Mit Chef wird der Zustand von Servern in Code beschrieben — statt jeden Server von Hand einzurichten, wird eine gewünschte Konfiguration definiert und Chef bringt die Systeme in diesen Zustand.
Grundkonzepte
- Rezepte (Recipes): Beschreiben einzelne Konfigurationsschritte, etwa „Paket installieren“ oder „Dienst starten“.
- Cookbooks: Bündeln mehrere Rezepte, Dateien und Vorlagen zu einer wiederverwendbaren Einheit.
- Nodes: Die zu verwaltenden Systeme (Server, Container, VMs).
- Chef Server: Zentrale Instanz, die die Konfigurationsdaten bereitstellt und die Nodes orchestriert.
- Chef Client: Läuft auf jedem Node, holt die gewünschte Konfiguration und wendet sie an.
So arbeitet Chef
Der Chef Client auf einem Node fragt regelmäßig die gewünschte Konfiguration ab und gleicht sie mit dem Ist-Zustand ab. Unterschiede werden automatisch korrigiert — zum Beispiel ein gestoppter Dienst wieder gestartet oder eine fehlende Datei angelegt. Dadurch ist der Zielzustand idempotent: Mehrfaches Ausführen führt zum gleichen Ergebnis, ohne unerwünschte Nebenwirkungen.
Praxisbeispiel
Ein Cookbook „webserver“ könnte ein Rezept enthalten, das den Apache installiert, eine Konfigurationsdatei aus einer Vorlage erzeugt, den Dienst aktiviert und eine Firewall-Regel setzt. Neue Webserver werden so in Minuten eingerichtet, und alle Server sind identisch konfiguriert.
Chef im Vergleich
Chef gehört zur Familie der Konfigurationsmanagement-Werkzeuge wie Ansible und Puppet. Während Ansible agentenlos über SSH arbeitet und Puppet eine eigene Sprache nutzt, setzt Chef auf eine Ruby-basierte DSL und einen zentralen Chef Server. Alle drei folgen der Idee von Infrastructure as Code.