Configuration Management mit Chef: Rezepte mit Berkshelf hochladen und mit Knife anwenden

    Chef-Rezepte hochladen mit BerkshelfFür das Hochladen oder Synchronisieren unserer auf der Chef-Workstation verfassten Rezepte benötigen wir das Helfer-Tool Berkshelf, einen Abhängigkeits-Manager für Chef-Cookbooks. Er erlaubt es Nutzern, sich auf die Funktionalität von Community-Cookbooks zu verlassen und diese sicher in Ihren Workflow aufzunehmen.

    Mit Berkshelf kann man auch sicherstellen, dass die jeweiligen Continuous-Integration-Systeme repro­duzierbar die gleichen Cookbook-Versionen aus­wählen und deren Abhängigkeiten hochladen oder bündeln, ohne dass eine lokal verwaltete Kopie erforderlich ist.

    Berkshelf ist im Chef Development Kit enthalten. Wurde das Chef-Development-Kit (ChefDK) erfolgreich installiert, lässt sich Berkshelf wie folgt bereitstellen:

    berks install

    Dies muss im Hauptverzeichnis des jeweiligen Cookbooks passieren, in dem auch das Berksfile liegt. Die Ausgabe sollte so aussehen:

    Resolving cookbook dependencies...
    
    Fetching 'simple-webapp' from source at .
    Fetching cookbook index from https://supermarket.chef.io... 
    Installing compat_resource (12.19.0) 
    Installing chef-client (8.1.7)
    Installing cron (4.1.3)
    Installing logrotate (2.2.0)
    Installing ohai (5.1.0)
    Using simple_webapp (0.1.1) from source at .
    

    Nun können wir Berkshelf verwenden, um das neue Cookbook samt seiner Abhängigkeiten wie folgt auf den Chef-Server hochzuladen.

    berks upload

    Chef-Rezepte mit berks hochladen

    Anschließend listen wir mit dem knife-Befehl alle Cookbooks auf dem Chef-Server auf.

    knife cookbook list

    Die Ausgabe sollte so aussehen:

    chef-client 8.1.7
    compat_resource  12.19.0
    cron 4.1.3
    logrotate 2.2.0 
    ohai 5.1.0
    simple-webapp 0.1.1 
    windows 3.1.1
    

    Damit sind wir in der Lage, mit folgendem Kommando die Chef-Client-Tools direkt per Bootstrapping auf dem vorhandenen Web-Server zu installieren und dann das Standardrezept namens simple-webapp zur Bereitstellung der Web-Applikation anzuwenden.

    knife bootstrap [WebServer-PrivateIp] -N [EC2InstanceID] --ssh-user ec2-user --sudo --identity-file ~/.ssh/[KeyName].pem --run-list 'recipe[simple_webapp],recipe[chef-client]'

    Hierbei ist WebServer-PrivateIp die private IP des laufenden (EC2-basierten) Web-Servers, EC2InstanceID seine Instanz-ID und KeyName der Namen des Schlüsselpaars für den SSH-Zugriff.

    Beispiel-Script zur Einrichtung einer EC2-Linux-Instanz

    Im Haupt­verzeichnis des Starter-Kits findet sich ein passendes Beispiel-User-Daten-Script, mit dem sich eine Linux-EC2-Instanz einrichten und durch Chef verwalten lässt. Das Script erledigt folgende Aufgaben:

    • Integration des Chef-CA-Pfads
    • Installation der passenden Apache-Version für das jeweilige OS (Debian, Ubuntu etc.)
    • Installation und Konfiguration der AWS-CLI
    • Verknüpfung des neuen Knotens mit dem Server (mittels Chef-Client-Key und associate-node)
    • Die initiale Chef-Konfiguration (Chef-Server-URL, Node-Name, CA-File)
    • Einrichtung des chef-clients
    • Installation des Trusted-Certs

    Die zugeordneten Rezepte könnten in der Variablen RUN_LIST stehen.

    Beispiel-Script zur Installation von Ubuntu in einer EC2-Instanz mit Chef

    Beim Bootstrapping ist es erforderlich, dass eine IP-Route zwischen Chef-Server und dem zu konfigurierenden Zielsystem existiert. Wer also seine Chef-Workstation on premises, den Web-Server aber in einer AWS-VPC betreibt, braucht eine entsprechende VPN-Verbindung.

    Natürlich kann man aber auch den zu konfigurierenden Web-Server im eigenen Rechenzentrum betreiben, sofern auf diesem die erforderlichen Agenten installiert sind. Dann muss man aber dafür sorgen, dass dieser vom Chef Automate Server aus erreichbar ist.

    Keine Kommentare