Contenu connexe Similaire à Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vagrant & Co (20) Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vagrant & Co1. © 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
2. © 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
3. © 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
4. © 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
6. © 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
7. © 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
8. © 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
9. © 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
10. © 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
11. © Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 1:
Wir brauchen VMs
22. Januar 2013
Folie 11
12. © 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
14. Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
Basebox
15. Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
App Server VM
16. Zutat 1: Wir brauchen VMs – ein einfaches Vagrantfile
Datenbank VM
17. Zutat 1: Wir brauchen VMs – Interaktion mit Vagrant
vagrant up
18. Zutat 1: Wir brauchen VMs – Interaktion mit Vagrant
vagrant ssh
19. © 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
22. Zutat 1: Wir brauchen VMs – VM Konfiguration im Detail
Name, CPUs, RAM, etc…
23. Zutat 1: Wir brauchen VMs – VM Konfiguration im Detail
vagrant reload
24. © 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!
25. © Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 2:
Provisionierung
22. Januar 2013
Folie 25
26. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 26
27. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 27
45. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 45
46. © Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 3:
Kochbuchverwaltung
22. Januar 2013
Folie 46
47. © Zühlke 2012
Zutat 3: Kochbuchverwaltung
Zurück zu unserem Szenario
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Woher kommt eigentlich das
PostgreSQL Kochbuch / Rezept ???
Folie 47
48. © Zühlke 2012
Zutat 3: Kochbuchverwaltung
Hier findet man Kochbücher!
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
http://community.opscode.com/cookbooks/
https://github.com/search?q=cookbook
Folie 48
49. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 49
50. © Zühlke 2012
Zutat 3: Kochbuchverwaltung
Ein einfaches Cheffile
Cheffile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 50
52. © Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Zutat 4:
Eigene Kochbücher
22. Januar 2013
Folie 52
53. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 53
54. © Zühlke 2012
Mit Knife kann man Kochbücher erstellen
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 54
Zutat 4: Eigene Kochbücher
Enter Knife
55. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 55
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
56. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Die Struktur des myapp Kochbuchs
In den Attributen werden Default-Werte definiert
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
Folie 56
57. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Die Struktur des myapp Kochbuchs
• myapp/attributes/db.rb
• myapp/attributes/web.rb
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 57
58. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
Folie 58
64. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Im Vagrantfile myapp::db anwenden
Vagrantfile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 64
65. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Im Vagrantfile myapp::db anwenden
Vagrantfile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
Statt postgresql::server
Folie 65
67. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Erweitertes Cheffile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 67
68. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
myapp
attributes
recipes
db.rb
web.rb
db.rb
default.rb
web.rb
Folie 68
74. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Im Vagrantfile myapp::web anwenden
Vagrantfile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 74
75. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Im Vagrantfile myapp::web anwenden
Vagrantfile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 75
Statt dem tomcat Rezept
76. © Zühlke 2012
Zutat 4: Eigene Kochbücher
Im Vagrantfile myapp::web anwenden
Vagrantfile
22. Januar 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert
C
Folie 76
Hier läuft die Datenbank
79. Oder was auch immer gerade ist…
Wir haben das Yabe Beispiel vom Play! Framework benutzt:
http://www.playframework.org/documentation/1.0/samples
80. © Zühlke 2012
DevOps mit Chef & Co
Torben Knerr, Klaus Alfert
Die DevOps-Küche
22. Januar 2013
Folie 80
81. © 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
+
+
82. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 82
83. © 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 2013DevOps mit Chef & Co | Torben Knerr, Klaus Alfert Folie 83
84. © 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
86. Dr. Klaus Alfert
Email: klaus.alfert@zuehlke.com
http://xing.to/alfert
Torben Knerr
Email: torben.knerr@zuehlke.com
http://xing.to/tknerr
Guten Appetit!
Folien: http://bit.ly/z_slideshare
Beispiele: https://github.com/tknerr/oop-chef-demo