Einführung in Puppet und Vagrant

39
Vagrant - How to make your Dev-Env awesome. Eine kleine Einführung in puppet und vagrant. Sönke Ruempler -- @s0enke PHP Unconference 2011

Transcript of Einführung in Puppet und Vagrant

Page 1: Einführung in Puppet und Vagrant

Vagrant - How to make your Dev-Env awesome.

Eine kleine Einführung in puppet und vagrant.

Sönke Ruempler -- @s0enke

PHP Unconference 2011

Page 2: Einführung in Puppet und Vagrant
Page 3: Einführung in Puppet und Vagrant
Page 4: Einführung in Puppet und Vagrant

Ich

"last level support" - von strace bis OOP

"WannaBe-DevOP"

"Systems thinking"

Page 5: Einführung in Puppet und Vagrant

Jimdo

Website Builder

seit 2007

"Startup"

5 Millionen Registrations

12 Sprachen

Page 6: Einführung in Puppet und Vagrant

Agenda

a.k.a. "Der Inhalt ist immer invers proportional zum Aufwand, der ins Layout gesteckt wurde" :-)

● Was ist Konfigurationsmanagement?● Was ist puppet?● Was ist vagrant?● Live-Hacking: Starten eines kleinen Clusters auf dem

Laptop inkl. einer Hello-World-App

Page 7: Einführung in Puppet und Vagrant

Configuration Management

Wer kennt es?

Wie setzt ihr Server auf?

● Golden Image?● Bash Script?● Wiki?● Tool?

Page 8: Einführung in Puppet und Vagrant

Server-Admin Probleme

Wie setze ich einen Server reproduzierbar auf?

Denn:

Wiki / Doku verstaubt oder wird nicht gefunden

Wie hält man es auf Stand? Einloggen auf alle n Server?

Page 9: Einführung in Puppet und Vagrant

http://www.slideshare.net/socializedsoftware/crash-course-in-open-source-cloud-computing

Page 10: Einführung in Puppet und Vagrant

Infrastructure as code

http://www.puppetlabs.com/

Page 11: Einführung in Puppet und Vagrant

ausführbare, testbare und versionierteServer-Dokumentation

Config-Deployment schnell, oft und reproduzierbar

Page 12: Einführung in Puppet und Vagrant

seit 2004

Page 13: Einführung in Puppet und Vagrant

eine deklarative, abstrakte DSL für Sysadmins, um Systemkonfiguration zu beschreiben

Page 14: Einführung in Puppet und Vagrant

Idempotent

f(x) = f(f(x))

Page 15: Einführung in Puppet und Vagrant

Manifests

Page 16: Einführung in Puppet und Vagrant

puppet classes

class webserver { package { "apache2": ensure => present, # apt-get etc. } file { "/etc/apache2/apache2.conf" : ensure => present source => "puppet:///apache2/apache2.conf" }}

Page 17: Einführung in Puppet und Vagrant

puppet nodes

node "web" { $db_server = "db1" include webserver }

node db1, db2, db3 { include mysql}

Page 18: Einführung in Puppet und Vagrant

Services

Modules (google: "puppet <package/daemon>")

Variables, Templates

Inheritance, zB bei Nodes

Page 19: Einführung in Puppet und Vagrant

http://www.puppetlabs.com/puppet/how-puppet-works/

Page 20: Einführung in Puppet und Vagrant

Client / Server

Page 21: Einführung in Puppet und Vagrant
Page 22: Einführung in Puppet und Vagrant

?

Questions so far ...

Page 23: Einführung in Puppet und Vagrant
Page 24: Einführung in Puppet und Vagrant

vagrant - even the logo is cool!

www.vagrantup.com - kudos to Mitchell Hashimto

Page 25: Einführung in Puppet und Vagrant

Dev-Umgebung: Ist-Analyse

Wie entwickelt ihr und wie setzt ihr euer Dev-System auf?

● Lokal auf dem Desktop?● Testserver?● Sandboxes auf VM-Server?● lokale VMs?● Noch anders?

Page 26: Einführung in Puppet und Vagrant
Page 27: Einführung in Puppet und Vagrant

Soll-Zustand(Businessanforderungen)

Page 28: Einführung in Puppet und Vagrant

vagrant to the rescue!

Page 29: Einführung in Puppet und Vagrant

Soll-Zustand I

Isolation der Testumgebung

vs.

Dein Desktop - ein Softwarezoo: Browser, Webserver, Musikplayer, Datenbankserver, Editor)

oder

geteilter Testserver: Shared Ressourcen, Shared Software -> Kollisionen (Beispiel: memcache keys oder "Lass uns mal PHP

5.3 ausprobieren")

Page 30: Einführung in Puppet und Vagrant

Soll-Zustand II

Wiederholbar

vs.

nach 6 Monaten findet Kunde einen Bug, wie lange brauchst du, um das Projekt "rauszukramen" und den Fehler

zu reproduzieren / fixen ?

oder z. B. lange Einrichtung bei Neuem Mitarbeiter / Projektbeteiligter

oder: 3 Wochen Urlaub, Testsystem völig outdated

Page 31: Einführung in Puppet und Vagrant

Soll-Zustand III

Einheitlichkeit

vs.

"It works on my machine"

Anderes OS als in Produktion (!)

Andere Kernel (32 vs. 64bit), Libs, Software und Versionen als in Produktion

... PHP (is_a() anyone?)

Page 32: Einführung in Puppet und Vagrant

Definition: Was ist vagrant

"Vagrant is a tool for building and distributing virtualized development environments."

"By providing automated creation and provisioning of virtual machines using Oracle’s VirtualBox, Vagrant provides the tools to create and configure lightweight, reproducible, and portable virtual environments.

Page 33: Einführung in Puppet und Vagrant

Was ist vagrant?

● "Dev-Env zum Mitnehmen"● Verwaltung des VM Lebenszyklus● Shared Folders / lokales NFS● SSH● Konfiguration der VMs via Puppet / Chef / bash-script● komplexe Multi-VM-Setups inkl. privatem Netzwerk● Framework zur Erstellung von VM-BaseImages (Base

Boxes)

Page 34: Einführung in Puppet und Vagrant

Vagrantfile

● Beschreibt die VM(s)● Eins pro Projekt - kommt mit in die Versionskontrolle

deines Projekts● Configfile ist Ruby (und damit scriptbar)

That's it (für eine VM)!

Page 35: Einführung in Puppet und Vagrant

==

Hardware Software

Page 36: Einführung in Puppet und Vagrant

Workflow(s)

vagrant initvagrant upvagrant reloadvagrant provisionvagrant sshvagrant haltvagrant destroy

Page 37: Einführung in Puppet und Vagrant

NO! ZOMG ACTION!!11

Page 38: Einführung in Puppet und Vagrant

Action!

soenke♥kellerautomat:~$ gem install vagrant

Page 39: Einführung in Puppet und Vagrant

beyond ...

Vagrant -> Cloud: mccloud

(https://github.com/jedi4ever/mccloud (by Patrick Debois - father of devopsdays!))

cucumber-nagios: Ecosystem as Code

cucumber-puppet: Behavior Driven Administration