© Zühlke 2012
Torben Knerr, Klaus Alfert
Zu viele Köche verderben den Brei… Kochschule für Devs und Ops mit Chef, Vagrant & Co
22. Januar 2013 Folie 1
© Zühlke 2012
Ein typisches Java Projekt:
• Web Applikation
• Datenbank
• Memcached
• Nginx
• GeoServer
Cluster und Failover sind natürlich auch gefordert!
Unser letztes Projekt…
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Nginx
Memcached
Tomcat Tomcat
DB Master
DB Slave
GeoServer App
22. Januar 2013 Folie 2
© Zühlke 2012
Unser letztes Projekt…
Mit einer typischen Deployment Pipeline:
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Lokal DEV TEST PROD
22. Januar 2013 Folie 3
© Zühlke 2012
Unser letztes Projekt…
Und typischen Problemen:
• Alle Umgebungen sind unterschiedlich
• Keiner kennt die Unterschiede so richtig
• Neue Entwickler brauchen 3 Tage bis die Umgebung lokal läuft
• Komplexere Szenarien sind lokal nicht testbar
• Lange Feedback-Zyklen in „shared“ Umgebungen (DEV)
• Unterschiedliche Ansprechpartner für Netz / OS / DB /…
• Und wie immer…
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013 Folie 4
© Zühlke 2012
Ein erster Lösungsansatz: Hey, wir bauen VMs!
Das hilft schon mal weiter:
• Vorbereitete VMs für die Entwickler mit Tomcat, Datenbank, Nginx, etc…
• Mit viel Liebe von Hand gefertigt
• Das Standardvorgehen bei unseren Embedded-Kollegen
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013
© Zühlke 2012
Ein erster Lösungsansatz: Hey, wir bauen VMs!
Aber…
• Manuelles Management von VMs ist schwierig (oder zumindest lästig)
• Prozesstreue ist von großer Bedeutung
• Wie versioniert man eigentlich eine 40GB große VM? In Subversion?
• Funktioniert lokal auf Entwickler PCs, aber unpassend für zentrale Infrastruktur
• Wie parametriert man solche VMs?
Fazit: hilft, aber geht nicht weit genug!
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013 Folie 7
© Zühlke 2012
Warum Scripting?
• Leichtgewichtige Skripte statt fetter VMs – Infrastruktur kann versioniert werden
• Umgebungen können reproduzierbar aufgesetzt werden – Möglichst wenig manuelle Tätigkeiten – Ausgangsbasis für „saubere“ Deployments
• Umgebungen werden explizit designed – Entstehen nicht zufällig – Werden explizit als ausführbare Spezifikation beschrieben
Wir haben Kontrolle über unsere Umgebung!
Unsere Lösung: Wir skripten VMs!
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013 Folie 8
© Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Willkommen in der DevOps Küche! Infrastruktur á la Carte
22. Januar 2013 Folie 9
© Zühlke 2012
Ziel: einfache Infrastruktur automatisiert aufsetzen
• Zum Beispiel auf dem Entwickler PC
• Separate VM für App Server und Datenbank
• Jederzeit reproduzierbar („clean setup“)
Unser Beispiel Szenario
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
App Server VM
Tomcat
Datenbank VM
PostgreSQL
.war
22. Januar 2013 Folie 10
© Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 1: Wir brauchen VMs
22. Januar 2013 Folie 11
© Zühlke 2012
Zutat 1: Wir brauchen VMs Enter Vagrant Was ist Vagrant?
• Vagrant ist Automatisierung für VirtualBox
• Konfiguration der VMs wird in ein Vagrantfile ausgelagert
• Einfache Befehle zum steuern der VMs: – vagrant up – vagrant ssh – vagrant halt – …
• http://vagrantup.com
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013 Folie 12
Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
Basebox
Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
App Server VM
Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
Datenbank VM
Zutat 1: Wir brauchen VMs – Interaktion mit Vagrant
vagrant up
Zutat 1: Wir brauchen VMs – Interaktion mit Vagrant
vagrant ssh
© Zühlke 2012
Zutat 1: Wir brauchen VMs Ein Blick in die VirtualBox GUI
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Ist das die App Server VM? Oder doch die Datenbank VM?
22. Januar 2013 Folie 19
Zutat 1: Wir brauchen VMs – VM Konfiguration im Detail
Zutat 1: Wir brauchen VMs – VM Konfiguration im Detail
Zutat 1: Wir brauchen VMs – VM Konfiguration im Detail
Name, CPUs, RAM, etc…
Zutat 1: Wir brauchen VMs – VM Konfiguration im Detail
vagrant reload
© Zühlke 2012
Zutat 1: Wir brauchen VMs Kontrolle in der VirtualBox GUI
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013 Folie 24
und die VM Parameter stimmen auch!
Besser!
© Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 2: Provisionierung
22. Januar 2013 Folie 25
© Zühlke 2012
Zutat 2: Provisionierung Zurück zu unserem Szenario
Nackte VMs reichen nicht
• Auf der DB-VM brauchen wir eine Datenbank z.B. PostgreSQL
• Auf dem App-VM brauchen wir einen Tomcat
Installation und Konfiguration dieser Software kann Chef übernehmen!
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 26
© Zühlke 2012
Zutat 2: Provisionierung Enter Chef
Was ist Chef?
• Chef ist Konfigurationsmanagement für Infrastruktur
• Installiert & konfiguriert Systeme von Grund auf
• Bietet eine DSL um Infrastruktur auf einer angemessenen Abstraktionsebene zu beschreiben
Mehr dazu:
• http://www.opscode.com/chef/
Vagrant unterstützt die Provisionierung von VMs via Chef!
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 27
Zutat 2: Provisionierung – PostgreSQL installieren
Zutat 2: Provisionierung – PostgreSQL installieren
Stelle den PostgreSQL Server bereit
Zutat 2: Provisionierung – PostgreSQL installieren
Spezifische Konfiguration
vagrant up db
Was steht im PostgreSQL Rezept?
Installiere das Package
Erzeuge die Konfig-Datei
Erzeuge die Konfig-Datei
Erzeuge die andere Konfig-Datei
Starte PostgreSQL als Service
Der Server ist auch selbst ein Client!
Zutat 2: Provisionierung – das gleiche mit Tomcat…
Zutat 2: Provisionierung – das gleiche mit Tomcat…
Stelle den Tomcat bereit
Zutat 2: Provisionierung – das gleiche mit Tomcat…
Tomcat Konfiguration
vagrant up web
© Zühlke 2012
Die Philosophie von Chef
Spezifikation des Zielzustandes
• Idempotenz
• „Selbstheilung“
DSL abstrahiert von systemspezifischen Details
• Resourcen
• Provider für das jeweilige System
Küche als Namensgeber
• Chef, Cookbook, Recipe, Knife, … 22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 45
© Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 3: Kochbuchverwaltung
22. Januar 2013 Folie 46
© Zühlke 2012
Zutat 3: Kochbuchverwaltung Zurück zu unserem Szenario
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Woher kommt eigentlich das PostgreSQL Kochbuch / Rezept ???
Folie 47
© Zühlke 2012
Zutat 3: Kochbuchverwaltung Hier findet man Kochbücher!
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
http://community.opscode.com/cookbooks/
https://github.com/search?q=cookbook
Folie 48
© Zühlke 2012
Zutat 3: Kochbuchverwaltung Enter Librarian
Was ist Librarian?
• Librarian bietet Dependency Management für Cookbooks
• Automatisiertes herunterladen und extrahieren
Abhängigkeiten werden in einem Cheffile spezifiziert
• Transitive Abhängigkeiten werden mit aufgelöst
• Unter Berücksichtigung von Quellen und Versionen
Mehr dazu
• https://github.com/applicationsonline/librarian
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 49
© Zühlke 2012
Zutat 3: Kochbuchverwaltung Ein einfaches Cheffile
Cheffile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 50
Zutat 3: Kochbuchverwaltung – ein einfaches Cheffile
Librarian „installiert“ die Kochbücher
© Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 4: Eigene Kochbücher
22. Januar 2013 Folie 52
© Zühlke 2012
Zutat 4: Eigene Kochbücher Zurück zu unserem Szenario
VMs mit Infrastruktur reichen nicht
• Wir brauchen ein DB-Schema und eine DB-User für unsere Anwendung
• Das WAR-File für unsere Anwendung muss im Tomcat deployed werden
Dafür gibt es kein wiederverwendbares Kochbuch, das wir einfach nutzen können!
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 53
© Zühlke 2012
Mit Knife kann man Kochbücher erstellen
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 54
Zutat 4: Eigene Kochbücher Enter Knife
© Zühlke 2012
Zutat 4: Eigene Kochbücher Die Struktur des myapp Kochbuchs
Ein Kochbuch, aber mit separaten Rezepten um die Datenbank und Webapp aufzusetzen
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 55
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
© Zühlke 2012
Zutat 4: Eigene Kochbücher Die Struktur des myapp Kochbuchs
In den Attributen werden Default-Werte definiert
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
Folie 56
© Zühlke 2012
Zutat 4: Eigene Kochbücher Die Struktur des myapp Kochbuchs
• myapp/attributes/db.rb
• myapp/attributes/web.rb
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 57
© Zühlke 2012
Zutat 4: Eigene Kochbücher Die Struktur des myapp Kochbuchs
Im „db“ Rezept wird PostgreSQL installiert, dann die Datenbank und der DB User angelegt
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
Folie 58
Ohne PostgreSQL macht es keinen Sinn
Hilfreiche Resourcen dazunehmen
Zuerst den User anlegen
Die Datenbank erzeugen
© Zühlke 2012
Zutat 4: Eigene Kochbücher Im Vagrantfile myapp::db anwenden
Vagrantfile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 64
© Zühlke 2012
Zutat 4: Eigene Kochbücher Im Vagrantfile myapp::db anwenden
Vagrantfile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Statt postgresql::server
Folie 65
vagrant provision db
© Zühlke 2012
Zutat 4: Eigene Kochbücher Erweitertes Cheffile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 67
© Zühlke 2012
Zutat 4: Eigene Kochbücher Die Struktur des myapp Kochbuchs
Im „web“ Rezept wird Tomcat installiert, die Webapp konfiguriert und im Tomcat deployed
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
Folie 68
Wir müssen Tomcat installieren
Hier liegt unser .war File
Datenbankkonfiguration
Applikation in Tomcat deployen
© Zühlke 2012
Zutat 4: Eigene Kochbücher Im Vagrantfile myapp::web anwenden
Vagrantfile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 74
© Zühlke 2012
Zutat 4: Eigene Kochbücher Im Vagrantfile myapp::web anwenden
Vagrantfile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 75
Statt dem tomcat Rezept
© Zühlke 2012
Zutat 4: Eigene Kochbücher Im Vagrantfile myapp::web anwenden
Vagrantfile
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
C
Folie 76
Hier läuft die Datenbank
vagrant provision web
Läuft unsere Anwendung denn nun?
Oder was auch immer gerade ist… Wir haben das Yabe Beispiel vom Play! Framework benutzt: http://www.playframework.org/documentation/1.0/samples
© Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Die DevOps-Küche
22. Januar 2013 Folie 80
© Zühlke 2012
Rekapitulation: Was haben wir bisher gemacht
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert 22. Januar 2013
Zutat 1 Wir brauchen VMs
Zutat 2 Provisionierung
Zutat 3 Kochbuchverwaltung
Zutat 4 Eigene Kochbücher
+
Folie 81
+
+
© Zühlke 2012
Textuelle Spezifikation der Infrastruktur
• Keine Shell-Skripte, sondern Spezifikation des Zielzustandes
• Knackig kurz, aber nicht kryptisch
• SCM-freundlich: Kilobyte statt Gigabyte
• Komplexe Infrastruktur steht auf Knopfdruck bereit
• Immer wieder ausführbar und wiederholbar
• Wiederverwendbarkeit auf Infrastrukturebene
Was haben wir erreicht?
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 82
© Zühlke 2012
Wir haben nur an der Oberfläche geraspelt
Chef & Vagrant bieten noch sehr viel mehr
• Provisionierung in der Cloud oder ihrer Virtualisierungsumgebung
• Erweiterungsmöglichkeiten der DSL dank Ruby – Eigene Resourcen und Provider – Programmierung innerhalb der Rezepte
• Chef-Server – Rechte-Management – Search – Environments
Eine populäre Alternative zu Chef ist Puppet.
• Bietet einen reinen DSL-Ansatz ohne Ruby.
22. Januar 2013 DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 83
© Zühlke 2012
Wenn Infrastruktur Code ist, dann muss Infrastruktur auch getestet werden!
DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Lint Checking
• foodcritic
Unit-Level Testing
• chefspec
• fauxhai
Smoke Tests (von Innen)
• chef-minitest-handler
Acceptance Testing (von Außen)
• cucumber-nagios
22. Januar 2013 Folie 84
Dr. Klaus Alfert Email: [email protected] http://xing.to/alfert
Torben Knerr Email: [email protected]
Guten Appetit! Folien: http://bit.ly/z_slideshare Beispiele: https://github.com/tknerr/oop-chef-demo