Whitepaper IT-Automation mit Puppet Release 1.0
Whitepaper IT-Automation mit Puppet Inhaltsverzeichnis Einleitung...3 Fallbeispiel IT-Automation mit Puppet...4 Strukturierung der Konfigurationsdaten...5 Übernahme der Informationsstruktur...6 Puppetisierung der Informationsstruktur...7 Erstellen eines Templates...7 Erstellen eines Puppet-Manifests...8 Zuweisung der Konfigurationsdaten (Deklaration)...9 Ergebnis nach der Puppet-Verarbeitung...10 Anpassungen und manuelle Eingriffe...10 Zusammenfassung...11 Fazit...12 Über Puppet...13 Impressum...14 Herausgeber...14 Lizenz...14 Seite 2 von 15
Einleitung Public Cloud, Private Cloud, Hybrid Cloud, On Demand Computing sind die aktuellen Themen im IT-Infrastrukturmanagement. Aber ohne zentrale Verwaltungswerkzeuge hätten diese Neuerungen nicht eine solche Hype erfahren, denn konventionelle Administration mit vielen Sysadmins in Cloud-Umgebungen ist schlicht zu teuer. Ein solches Werkzeug für Systemadministration und IT-Automation ist Puppet. Ähnlich dem Puppenspieler, der an den richtigen Fäden seiner Marionetten zieht, um mit seinem Puppenspiel den Zuschauer zu verzaubern, verwaltet Puppet Konfgurationen von Servern, Applikationen, Services, Dateien, Software-Paketen etc. Durch die deklarative Sematik der Puppet-Syntax Der Webserver soll aktiv sein legt der Systemadministrator die Zielkonfguration fest und rollt diese über die Puppet-Clients in seiner Umgebung aus. Dass Puppet nicht nur für große und sehr große IT-Landschaften ausgelegt ist, möchte ich Ihnen mit diesem Whitepaper beweisen und die Einsatzmöglichkeiten in kleinen und mittelständischen Unternehmen (KMU) vorstellen. Die Zielgruppe dieses Whitpapers sind IT-Leiter, Systemadministratoren, IT- Architekten und Geschäftsführer von KMU. Seite 3 von 15
Fallbeispiel IT-Automation mit Puppet Grundsätzlich möchte niemand immer das gleiche Tun, dennoch fnden sich immer wieder Beispiele dafür, dass es getan werden muss. An Hand eines Fallbeispiels möchte ich aufzeigen, wie wiederkehrende Arbeiten mit Puppet automatisiert werden können. Stellen wir uns einen selbstständigen Web-Entwickler vor, der für die Entwicklung von Internetportalen für Firmenkunden tätig ist. Für diese Firmenkunden hat er sich eine Test- und Entwicklungsumgebung mit den jeweiligen Instanzen seiner Kunden aufgebaut. Aufgrund seines geschäftlichen Erfolgs verwaltet er mittlerweile einige Dutzend Portalinstanzen. Leider ist mit der Anzahl der Instanzen nicht unbedingt auch die Qualität der Verwaltung gewachsen. Im Gegenteil, es wird vieles manuell und punktuell mit selbstgeschriebenen Shell-Skripten administriert. Das Aufsetzen einer neuen Kundeninstanz ist geprägt von sich immer wiederholenden Befehlsaufrufen, Editieren von Konfgurationsdateien und dem Testen der jeweiligen Konfguration. Daher benötigt das Deployment einer neuen Kundeninstanz immer noch die gleiche Zeit, wie schon bei der Gründung seiner Web-Agentur. Wie Sie mit der Unterstützung von Puppet mehr Zeit für Ihre Projekte gewinnen, zeige ich Ihnen am Beispiel von virtual host des Apache HTTP Server der Apache Software Foundation 1. In einem virtual host wird der Content für einen Web-Seite gekaspelt vom Rest des Webservers unter einem bestimmten Domain-Namen verwaltet und ausgeliefert. Dies ist eine gängige Praxis um verschiedenste Domains auf einem Webserver zu hosten. 1 Als ehrenamtliche Organisation fördert die Apache Software Foundation die Apache-Softwareprojekte wie den Apache Webserver, Apache Tomcat, Apache OpenOffice, Apache Lucene und viele andere. Weitere Informationen: http://apache.org Seite 4 von 15
Strukturierung der Konfigurationsdaten Die Automatisierung von IT-Systemen erfordert eine Standardisierung der Daten im Unternehmen. In unserem Beispiel müssen für die virtual hosts des Webservers die Pfade auf dem Linuxsystem, standardisiert sein. Die Basisarchitektur für die Kundeninstanzen wird wie folgt defniert: Verzeichnis Pfad auf dem Server Basisverzeichnis des Webservers /var/www Basisverzeichnis des Kunden kunde001 DocumentRoot eines virtuellen Hosts von Kunde kunde001 /var/www/kunde001 /var/www/kunde001/www.vh001.de Pfad für die Logdateien der Instanz Pfad für die Konfgurationsdatei der Instanz /var/log/www/kunde001/www.vh001.de /etc/apache2/kunde001/www.vh001.de An dieser Architektur sieht man schon, dass es recht unkompliziert ist kunde001 und www.vh001.de zu strukturieren und als Variable darzustelle: $KUNDE = kunde001 $VIRTUALHOST = www.vh001.de Nun ist die Strukturierung der Daten abgeschlossen und es kann die Puppetisierung beginnen. Aufgrund dieser klaren Verzeichnisstrukturen können auch weitere Systeme wie Backup und Monitoring ohne großen Aufwand in den Webserver integriert werden. Diese angeschlossenen Systeme sind dadurch in der Lage mit einer wachsenden Seite 5 von 15
Anzahl von virtual hosts zu skalieren. Übernahme der Informationsstruktur Puppet bietet ähnlich einer Datenbank die Möglichkeit diese herausgearbeiteten Informationsstrukturen und deren Werte zu speichern. In Puppet werden sogenannte Manifeste geschrieben, um bestimmte Systemkonfgurationen zu manifestieren. Dabei handelt es sich um ASCII-Dateien, die mit jedem Texteditor bearbeitet werden können. Neben den Manifesten gibt es noch weitere Objekte wie Files oder Templates etc. 2. Der Automationsgrad eines Puppet-Umgebung wird nur durch die Vorstellungskraft des Administrators limitiert, so dass dies nur einen kleinen Teil dereinen Automations-möglichkeiten wiederspiegelt: Mit Puppet können Services gestartet oder gestoppt werden Es können hinterlegte Dateien verteilt werden In bestehenden Konfgurationsdateien können Werte verändert werden es kann sicher gestellt werden, dass eine Aktion ausgelöst wird es können rekursiv Konfgurationsarrays verarbeitet werden Software-Pakete können installiert werden 2 Puppet-Dokumentation im Internet: http://docs.puppet.com/ Seite 6 von 15
Puppetisierung der Informationsstruktur Erstellen eines Templates Zunächst wird aus der virtual host -Konfgurationsdatei ein Puppet-Template generiert. Mit einem Editor werden die statischen Daten durch Variablennamen in der Puppet Syntax ersetzt (fett). cat /etc/puppet/modules/apache2/files/virtualhost.conf.erb <VirtualHost *:80> ServerName <%= virtualhost %> ServerAdmin admin@<%= virtualhost %> DocumentRoot /var/www/<%= kunde %>/<%= virtualhost %> ErrorLog /var/log/www/<%= kunde %>/<%= virtualhost %>-error_log CustomLog /var/log/www/<%= kunde %>/<%= virtualhost %>-access_log common <Directory /var/www/<%= kunde %>/<%= virtualhost %> Allow from all Options +Includes +Indexes +FollowSymLinks AllowOverride all </Directory> </VirtualHost> Puppet wird beim Verarbeiten wiederum diese Variablen mit den für diesen Server notwendigen Konfgurationsdaten ersetzen und eine virtualhost.conf-datei erstellen. Seite 7 von 15
Erstellen eines Puppet-Manifests Das Puppet-Manifest legt die Logik für die Automation fest. Es wird deklarativ festgelegt, wie der Zielzustand des Virtualhosts auszusehen hat. cat /etc/puppetlabs/puppet//modules/apache2/manifests/init.pp: class apache2 { } package { 'apache2': ensure => present, } file { '/etc/apache2/${kunde}/${virtualhost}.conf': content => template('apache2/virtualhost.conf.erb'), notify => Service('apache2'), service { 'apache2': ensure => running, } Was deklariert dieses Beispielmanifest 3? 1. Es wird dafür gesorgt, dass das Paket apache2 installiert ist 2. Dass aus dem Template eine virtual host -Datei erzeugt wird 3. Puppet informiert den Service apache2 darüber, das dieser seiner Konfguration neu einlesen soll und dadurch den Content des neuen virtual host ausliefern kann. 3 Dieses Manifest dient nur der Veranschaulichung der Arbeitsweise von Puppet und ist daher recht einfach gehalten. Für den produktiven Betrieb von Puppet sollten die Daten von der Logik getrennt sein. Seite 8 von 15
Zuweisung der Konfigurationsdaten (Deklaration) Die Zuweisung der Konfgurationsdaten für den Kunden kunde001 erfolgt zentral für die Umgebung in der site.pp cat /etc/puppetlabs/puppet/manifests/site.pp: node 'webserver.beispiel-web-agentur.de' { } $kunde = 'kunde001' $virtualhost = 'www.vhost001.de' include apache2 Mit dem letzten und wichtigen Schritt ist die Puppetisierung des Kundensystems abgeschlossen und dieses kann in die Umgebung ausgerollt werden. Um weitere Kundensysteme auszurollen, kann man in der site.pp weitere Hosts in ähnlicher Weise anlegen. Seite 9 von 15
Ergebnis nach der Puppet-Verarbeitung Mit der Ausführung des Puppet-Agenten wird der neue Virtualhost www.vhost001.de des Kunden kunde001 auf dem Webserver ausgerollt: cat /etc/apache2/kunde001/www.vhost001.de.conf <VirtualHost *:80> ServerName www.vhost001.de ServerAdmin admin@www.vhost001.de DocumentRoot /var/www/kunde001/www.vhost001.de ErrorLog /var/log/www/kunde001/www.vhost001.de-error_log CustomLog /var/log/www/kunde001/www.vhost001.de-access_log common <Directory /var/www/kunde001/www.vhost001.de Allow from all Options +Includes +Indexes +FollowSymLinks AllowOverride all </Directory> </VirtualHost> Anpassungen und manuelle Eingriffe Durch die o. a. drei Schritte wurde die Administration der Komponente virtual host des Webservers automatisiert. Anpassungen werden ab sofort über die Änderung des Puppet-Manifests ausgebracht. Manuelle Änderungen (schneller Fix eines Fehlers) sind selbstverständlich möglich. Jedoch sollten diese Konfgurationsänderungen im Puppet-Manifest nachgeführt werden, da Puppet das System immer in den Zustand bringt wie es das Manifest deklariert! Seite 10 von 15
Zusammenfassung An diesem Fallbeispiel wurde aufgezeigt, wie man mit Puppet einfach, aber efektiv eine Test- und Entwicklungsumgebung automatisiert verwalten kann. Mit der Einführung der IT-Automation hat man wieder mehr Zeit sich um seine Kunden zu kümmern und dies macht sich auch bei der Akquise von Neukunden bemerkbar. Und somit schließt sich wieder der Kreis, da mit Puppet verwaltete Infrastrukturen einfach mitwachsen können. Selbstverständlich steigert die Automation auch den Qualitätsgrad der IT- Infrastruktur und dieser ist wiederum ein gutes Verkaufsagrument. Seite 11 von 15
Fazit Wie man an diesem Fallbeispiel erkennen kann, ist Puppet ein sehr fexibeles Werkzeug, um Umgebungen einfach verwalten zu können. Es ersetzt das gewohnte Arbeiten an der Konsole durch intelligente Datenstrukturen und Algorithmen. Puppet unterstützt die Skalierung von IT-Umgebungen und vereinfacht die Integration von weiteren Systemen. Gerade KMU's proftieren von diesem Werkzeug, da es die Möglichkeit bietet Konfgurationen zentral und standardisiert für den/die Server abzulegen und auch wieder einspielen zu können. Don't change a running system verliert mit dem Einsatz von Puppet seinen Schrecken. Es können auch einzelne Systeme automatisiert verwaltet werden, da es in erster Linie auf den Automatisierungszweck und nicht auf die Anzahl der zu verwalteten Systeme ankommt. Auch Wachstumsphasen eines Unternehmens (bei Gründern wichtig!) wird durch Puppet untersützt, den Übergang von einem Application-Server auf zwei Application- Server ist nur noch eine Frage der Deklaration, was auf welchem Server betrieben werden soll. Diesen Vorteilen steht ein weiteres Werkzeug gegenüber, welches erlernt und gepfegt werden muss. Aufgrund der einfachen Syntax der Puppet- Deklarationssprache ist es möglich sich recht schnell einzuarbeiten, so dass der Lernaufwand die Einsparungen von Zeit, Kosten und Steigerung der Qualität dies rechtfertigt. Nicht zu vergessen ist die Tatsache, dass es sich bei Puppet um ein kostenfreies Open Source Produkt handelt. Wenn wir Ihr Interesse geweckt haben und Sie weitere Information oder eine Demonstration dieser IT-Automationslösung wünschen, kontaktieren Sie uns über http://zapp-it.com/kontakt. Gerne beraten wir Sie wie man in Ihrem Unternehmen Puppet erfolgreich einsetzen kann. Seite 12 von 15
Über Puppet Puppet ist ein Software-Produkt zur IT-Automation. Puppet unterstützt Sysadmins bei der Administration von IT-Infrastrukturen. Puppet ermöglicht den gesamten Lebenszyklus eines IT-Systems zu verwalten, die Provisionierung und Konfguration, die Orchestrierung (das Zusammenspiel von Protokollen und Systemen) sowie das Reporting. Mit Puppet kann man wiederholende Aufgaben einfach und unkompliziert automatisieren. Ob dies nur ein System oder ganze Cloud-Infrastukturen betrift, das spielt dabei keine Rolle. Das zentrale Managementsystem (Puppetmaster) wird auf einem Linux Betriebssystem (RHEL, CentOS oder Debian) installiert. Puppet-Agenten stehen für verschiedenste Betriebssysteme wie Microsoft Windows TM, IBM AIX TM, Oracle Solaris TM und diversen Linux Distributionen zur Verfügung. Entwickelt wurde Puppet von Lukas Kanies (CEO Puppetlabs ). Als leidenschaftlicher Programmierer für Systemadministrationswerkzeuge hat er 2005 Puppet entworfen sowie die Fa. Puppet, mit der Idee bessere Werkzeuge für den IT-Betrieb zu entwickeln, gegründet Puppet vertreibt die kommerzielle Version von Puppet als Puppet Enterprise. Der Funktionsumfang der Enterpise-Version ist umfangreicher als die Community-Version und bietet unter anderem auch 24x7-Support für unternehmenskritische Puppet- Infrastrukturen. Weitere Information fnden Sie: Kommerzielle Web-Seite: http://puppet.com/ Puppet Community: http://puppet.com/community/overview Seite 13 von 15
Seite 14 von 15
Impressum Herausgeber Christoph Zapp ZappIT Solutions Christoph Zapp Morschheimer Str. 15 67292 Kirchheimbolanden www.zapp-it.com Veröfentlicht 2016 Copyright 2016 Christoph Zapp Lizenz Dieses Whitepaper steht unter einer CC-BY-ND-3.0-Lizenz. Der Autor soll wie folgt genannt werden: by Christoph Zapp, im Auftrag von ZappIT Solutions Christoph Zapp, http://www.zapp-it.com Diese Lizenz erlaubt die Weiterverbreitung dieses Dokumentes, kommerziell wie nicht-kommerziell, solange dies ohne Veränderungen und vollständig geschieht und der Autor als Urheber genannt wird. Details zur Lizenz erfahren Sie unter : http://creativecommons.org/licenses/by-nd/3.0/de/. Seite 15 von 15