Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vagrant & Co....

Preview:

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: klaus.alfert@zuehlke.com http://xing.to/alfert

Torben Knerr Email: torben.knerr@zuehlke.com

Guten Appetit! Folien: http://bit.ly/z_slideshare Beispiele: https://github.com/tknerr/oop-chef-demo

Recommended