Upload
zuehlke
View
836
Download
8
Embed Size (px)
DESCRIPTION
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops Chef, Knife, Vagrant und Veewee dürfen in keiner modernen DevOps Küche fehlen. Diese Werkzeuge sowie die Kernkonzepte von Chef sind die Hauptzutaten für unseren Vortrag. Anhand unserer Projekterfahrungen zeigen wir Ihnen wie Sie bestehende Rezepte aus der Community verwenden und nach Ihrem Geschmack verfeinern. Damit haben Sie das grundlegende Handwerkszeug, um ganze Systemlandschaften per Knopfdruck verlässlich und reproduzierbar aufzusetzen - sei es in der Cloud, in Ihrer eigenen Testumgebung, oder auf dem Entwickler-PC. Happy Cooking! Zielpublikum: Architekten, Entwickler, Projektleiter, Administratoren Vortrag von Klaus Alfert und Torben Knerr auf der OOP 2013 in München (22. Januar)
Citation preview
© 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