Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagrant und Puppet
1. IT Engineering – Continuous Delivery
Development Tool Chain
Virtualisierung, Packer, Vagrant und Puppet
Alexander Pacnik
Karlsruhe, 20.05.2014
2. 2
Ziele
‣ Continuous Delivery – einfache, atomare Änderungen sollten immer möglich sein
Voraussetzung
‣ Dev/Prod Parity – Werkzeuge und Prozesse der Umgebungen identisch halten
‣ Vollständige Automatisierung der Prozesse und Tests
‣ Infrastructure as Code
Einleitung
... worum es in diesem Vortrag geht
3. 3
Problemstellung
‣ Entwicklungsumgebung für Operations zur Verfügung stellen
‣ Entwicklungsumgebung für Development zur Verfügung stellen
‣ Ein (!) Tool pro Aufgabe festlegen – heute Image Verwaltung mit Packer
‣ Entscheidungskriterien : Wer nutzt es? Wie wird es verwendet?
‣ Teil der DoD und für alle Beteiligten verbindlich
Einleitung
... worum es in diesem Vortrag geht
5. 5
VirtualBox
‣ Virtualisierungslösung die auf OSX, Linux und Windows funktioniert
‣ Vorteil: nur ein Host Betriebssystem das berücksichtigt / getestet werden muss
‣ Console: VBoxManage
‣ Installation: Installer
Quellen
‣ VirtualBox: https://www.virtualbox.org
Virtualisierung
... mit VirtualBox
6. 6
VMware Fusion
‣ Virtualisierungslösung für OSX
‣ Vorteil: Bessere Integration in die VMware Welt
‣ Console: vmrun (steuern) und ovftool (konvertieren)
‣ Installation: Installer
Quellen
‣ VMware Fusion: http://www.vmware.com/de/products/fusion
‣ VMware Tools Versionen: http://packages.vmware.com/tools/versions
‣ OVF Tool: https://www.vmware.com/support/developer/ovf/
Virtualisierung
... mit VMware Fusion
8. http://www.packer.io/intro/index.html 8
Was ist Packer?
‣ Packer is an open source tool for creating identical machine images for multiple
platforms from a single source configuration.
Image Bauen
... eine Einführung
10. http://www.packer.io/docs/basics/terminology.html 10
Terminologie
‣ Artifacts – das Ergebnis eines Builds (Image)
‣ Templates – JSON Datei die die ganze Konfiguration enthält
‣ Builders – Konfiguration für eine bestimmte Plattform (Virtualbox, AWS, ...)
‣ Post-processors – Schritte nach einem Build (Artefakte hochladen / komprimieren)
‣ Provisioners - installieren Software in die laufende VM (Shell, Puppet, Chef, ...)
‣ Kickstart / Preseeding – Konfigurationsdatei für die OS Installation
Image Bauen
... die wichtigsten Begriffe
12. http://www.packer.io/docs/templates/configuration-templates.html 12
Variablen in Templates
‣ Werden in einen "variables": { ... } eingeschlossen, Definition: “key“: “value“
‣ Value = ““ entspricht einer Variable die optional übergeben werden kann
‣ Value = null führ zu einem Validate-Fehler wenn die nicht gesetzt wird
‣ Im Template werden sie wie folgt verwendet: "{{user `key`}}“
‣ Umgebungsvariablen können auch ausgelesen werden: "{{env `LANG`}}
‣ Variablen können über die CMD übergeben oder aus einer Datei ausgelesen werden
‣ Beispiel:
Image Bauen
... Templates schreiben
13. 13
Provisioners
‣ Starten Skripte (Shell, Puppet, ...) in der laufenden VM
‣ Können auf Builds eingeschränkt werden (nur für Vagrant ausführen, etc)
‣ Können für einzelne Builds überschrieben werden um Unterschiede abzubilden
Image Bauen
... Provisioners
14. 14
Debugging
‣ Viele Builder unterstützen "headless": "false“
‣ Am Ende der Skripte ein Sleep einbauen und SSH in die Maschine
‣ Umgebungsvariable PACKER_LOG auf irgendeinen Wert setzen
Image Bauen
... Debugging wenn Fehler auftreten
21. 21
Konfigurationen prüfen und ggf. anpassen
‣ Umgebung: build_images/conf/build_images.properties
‣ Template: build_images/templates/centos/centos65-config.json
‣ Kickstart: build_images/templates/centos/public_html/centos6.cfg
Hands-on
... die Konfiguration für unsere Box anpassen
22. 22
Antfile
‣ Optional: Bash Funktion erstellen um Antfiles direkt ausführen zu können
‣ $EDITOR ~/.profle
Hands-on
... die Arbeit mit Ant vereinfachen
24. 24
Download
‣ Die ISOs die in den Templates verwendet werden konfigurieren
build_images/conf/images.conf
‣ Konfigurierte ISOs herunterladen
‣ Anschließend die md5 Summe berechnen und in der Konfiguration eintragen
build_images/templates/centos/centos65-config.json
Hands-on
... das ISO für die Installation herunterladen
27. 27
Kickstart / Preseeding
‣ Passend zum Projekt die Kickstart / Preseeding Datei anpassen
‣ OS Version
‣ Sprache und Zeitzone
‣ Partitionierungsschema
‣ ...
‣ Beispiel: build_images/templates/centos/public_html/centos6.cfg
Hands-on
... die Konfiguration anzeigen
28. 28
packer build
‣ Box mit angegeben Typ bauen und optional Puppet ausführen
Hands-on
... die Box bauen
29. 29
Skripte
‣ Die Basisinstallation nach Kickstart / Preseeding erfolgt mit Shell Skripten
‣ Beispielsweise alles für den ersten Puppet Run vorbereiten
Hands-on
... die laufende VM konfigurieren
30. 30
Konventionen für das Verwenden von Puppet
‣ Packer liegt unter build_images/
‣ Puppet Module liegen unter configuration/modules/
‣ Hieradata liegt unter configuration/hieradata/
‣ Modul das angewendet werden soll hat ein Manifest unter tests/init.pp
‣ Der Packer Code: scripts/puppet_apply.sh
Hands-on
... eine mögliche Puppet Integration
31. 31
list
‣ Alle Vagrant Boxen im „work/cache_boxes“ Verzeichnis anzeigen
Hands-on
... Boxen anzeigen und ...
34. 34
vmware2ova / vbox2ova
‣ Box-Datei aufräumen, so dass ein Standard konformes OVA entsteht
‣ vbox2ova: metadata.json aus box entfernen
‣ vmware2ova: box mit OVF Tool konvertieren
‣ Die Datei kann dann in eine Virtualisierungslösung importiert werden
Hands-on
... Box konvertieren um sie ohne Vagrant verwenden zu können
35. 35
Box testen
1. VirtualBox / VMware Fusion – OVA Datei importieren (UI oder Console)
2. Mit Vagrant die Box nach dem publish_local testen
Hands-on
... um die Übersicht zu behalten
36. 36
Fazit
‣ Entwicklungsmaschinen so nah wie möglich an den produktiven bauen
‣ Immer ein Image für Engineering Tests bereit halten (minimales Golden Image)
‣ Entwicklern immer ein Image für die Entwicklung zur Verfügung stellen
‣ Erfolgskriterium: Wenn die Vagrant Box und das Deployment Tool von Dev
verwendet wird, haben wir die richtige Lösung gefunden.
‣ Überall die gleichen Tools für Configuration und Deployment verwenden
‣ Die einfachste Lösung verwenden die funktioniert
Hands-on
... um die Übersicht zu behalten
37. 37
Next Steps
1. Tools installieren
2. Beispiel aus unserem Git Server clonen
3. Skripte ausprobieren, Beteiligung an der Weiterentwicklung erwünscht! J
4. Dokumentation der Tools vollständig lesen!
Hands-on
... um die Übersicht zu behalten
38. 38
Vielen Dank für Ihre Aufmerksamkeit
Kontakt
Alexander Pacnik
IT Engineering & Operations
Project Management
inovex GmbH
Ludwig-Erhard-Allee 6
76133 Karlsruhe
Mobil: +49 (0)173 3181 040
Mail: alexander.pacnik@inovex.de