Continuous Delivery Pipelines setzen identische Konfigurations- und Deployment-Prozesse von Entwicklung bis Betrieb voraus. Um diese zu ermöglichen, zeigt der Referent, wie virtuelle Maschinen (Linux/Windows) mit Packer (packer.io) erstellt, mit Puppet konfiguriert und mit Vagrant in virtuellen Umgebungen verwendet werden. Der Fokus liegt zum einen auf der einfachen und schnellen Verwendung vorkonfigurierter VMs für die lokale Entwicklung und zum anderen auf den Herausforderungen und Erfahrungen, die sich bei der Verwendung von Puppet ergeben, wenn der gleiche Konfigurations-Code für verschiedene Umgebungen verwendet wird.
5. 5
Entwicklungsumgebungen
... Einführung
Herausforderungen
‣ Continuous Integration – Code ständig integrieren und testen
‣ Continuous Delivery – vollständige Automatisierung der Prozesse und Tests
‣ Dev / Prod Parity – Werkzeuge und Prozesse der Umgebungen identisch halten
‣ Infrastructure as Code – Nachvollziehbarkeit, alles kommt aus einem Repository
6. Packer
... Was ist Packer?
Ziel
‣ Packer is a tool for creating identical machine images for multiple platforms from a
single source configuration. 1
‣ Dieser Vortrag zeigt die Verwendung von Packer zur Erstellung von lokalen
Entwicklungsumgebungen
‣ Beispiel: Image erstellen
‣ Beispiel: Image mit Vagrant verwenden
1 Quelle: packer.io 6
8. 8
Packer
... das heutige Beispiel in der Übersicht
9. Packer
... die Struktur der Packer Templates
Quelle: https://packer.io/docs/templates/configuration-templates.html 9
10. 1. Builder
... die Installation der VM
Builder
‣ beschreiben die virtuelle Infrastruktur auf der die Images erstellt werden sollen
‣ Unterstützt werden: Virtualbox, VMware, Amazon AWS, ...
Vorgehen
1. Startet die VM auf der entsprechenden Plattform
2. Startet die Betriebssysteminstallation (Kickstart, Boostrap oder Unattended.xml)
3. Wartet auf den SSH Login
Quelle: https://packer.io/docs/templates/builders.html 10
12. 2. Provisioners
... die Konfiguration der VM
Provisioners
‣ Skripte die nach der Betriebssysteminstallation aufgerufen werden können
‣ Unterstützt werden: Shell, Puppet, Chef, Salt, ...
Vorgehen
1. Ruft einen oder mehrere Provisioner Blöcke in der entsprechenden Reihenfolge auf
Quelle: https://packer.io/docs/templates/provisioners.html 12
13. 2. Provisioners
... Beispiel
Quelle: https://packer.io/docs/templates/provisioners.html 13
14. 3. Post-Processors
... die virtuelle Maschine paketieren
post-processors
‣ Aktionen die nach der Erstellung ausgeführt werden
‣ Unterstützt werden: Vagrant, Docker, ...
Vorgehen (Vagrant)
1. Virtuelle Maschine stoppen
2. Dateien komprimieren
Quelle: https://packer.io/docs/templates/post-processors.html 14
15. 3. Post-Processors
... Beispiel: die virtuelle Maschine für Vagrant paketieren
Quelle: https://packer.io/docs/templates/post-processors.html 15
16. 4. Variables
... Der Umgang mit dynamischen Templates
‣ Variablen definieren
‣ Variablen verwenden
Quelle: https://packer.io/docs/templates/user-variables.html 16
18. 4. Variables
... Beispiel: Wert einer Variablen in die virtuelle Maschine durch reichen
1. Variable im Template definieren
2. Variable im Template als Environment Variable der VM bekannt machen
3. Variable über den Aufruf beim Start übergeben
4. Variable kann dann in Provisioner-Skripten ganz normal verwendet werden
Quelle: https://packer.io/docs/templates/user-variables.html 18
21. 21
Packer Debugging
... wenn Fehler auftreten
‣ im JSON Template kann der Parameter “headless” auf “false” gesetzt werden, um
die Virtualbox Console anzuzeigen
‣ ssh in die virtuelle Maschnine während Packer läuft
(Port wird am Anfang im Output angezeigt: “ssh -p nnnn root@127.0.0.1”)
‣ da die VM am Ende der Provisionierung ausgeschaltet wird, sollte ein sleep am
Ende eines der Shell Skripte eingebaut werden, um genug Zeit für das Debugging
per SSH zu haben.
‣ Packer Debug Logging kann mit der Umgebungsvariable
PACKER_LOG=irgend_ein_Wert aktiviert werden
22. 22
Packer
... Fazit
Packer
‣ Maschine Images von DEV bis Prod mit den gleichen Code erstellen
‣ Nur den minimal notwendigen Code mit Shell Skripten erstellen
‣ Konfigurationsmanagement mit Puppet, Chef, ... umsetzen
‣ Nach Möglichkeit eigene Paket- und ISO-Repositories verwenden
‣ Versions spezifische Konfigurationen auslagern
24. 24
Vagrant
... Überblick
Vagrant Vorteile
‣ Steuert lokale Virtualbox oder VMware Installation
‣ Lokale Entwicklungsumgebung von einer definierten Baseline starten
‣ Vorinstallierte VMs über einen zentralen Webserver zum Download anbieten
25. 25
Vagrant
... Beispiel: Vagrantfile zum testen der Packer Artefakte
27. Vagrant
... Beispiel: Vagrantfile zum testen von Puppet Code
Puppet mit Packer verwenden
‣ Am einfachsten ist es Puppet Module mit einer „tests/init.pp“1 zu versehen, die mit
puppet apply ausführbar ist
‣ Idealerweise wird der Puppet Code in Components / Profiles und Roles gegliedert2
Puppet mit Vagrant verwenden
1 Quelle: https://docs.puppetlabs.com/guides/tests_smoke.html
2 Quelle: http://de.slideshare.net/inovex/puppet-designing-modules 27
28. 28
Vagrant
... Fazit
Takeaway
‣ Packer: ideal zum Erstellen von Images, als Baseline für Projekte
‣ Puppet: übernimmt die Konfiguration des Images
‣ Vagrant: ideal um lokale Entwicklungsumgebungen zu steuern
‣ Konfiguration und initiale Installation so weit wie möglich schon mit Packer umsetzen
‣ Images als auch Vagrantfiles immer versioniert in einem Repository ablegen
29. 29
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