Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Puppet - Entwicklungsworkflow und Basismodule
1. IT Engineering – Puppet
Entwicklungsworkflow und Basismodule
Alexander Pacnik
Karlsruhe, 21.05.2014
2. 2
Ziel
‣ Lokale Entwicklungsumgebung für Puppet
‣ Einen möglichen Workflow zeigen
Problemstellung
‣ Wie kann ein Entwicklungsworkflow aussehen?
‣ Wie sieht sieht eine Vorlagen für Module (Skeleton) aus?
‣ Was bedeutet Puppet Containment?
‣ Einfache Benutzerverwaltung für kleine Umgebungen.
Einleitung
... worum es in diesem Vortrag geht
4. 4
Der Workflow im Überblick
‣ Tasks die Ant zur Verfügung stellt
Workflow
... Überblick
5. 5
Der Verzeichnisstruktur im Überblick
‣ Enthält allen Code für eine Umgebung und wird über librarian / Git aufgebaut
Workflow
... Überblick
6. 6
Ein Git Repository pro Modul
‣ Nachteil: viele Module
‣ Vorteile:
‣ Entwicklung findet nur auf Modulebene statt
‣ Verschiedene Modulversionen in unterschiedlichen Umgebungen möglich
Workflow
... Puppet Modul Code in einzelne Repositories
7. 7
1. Module definieren (librarian-puppet)
‣ Tool um Module die in einzelnen Git Repositories liegen herunter zu laden
‣ Unter configuration/modules liegen keine Puppet Module
‣ In configuration/Puppetfile liegen die Metainformationen
Workflow
... Benötigte Module definieren
9. 9
Weitere Nützliche Tasks
‣ gcheck - git: check git repositories (run before lup)
‣ lreset - librarian: rm caches and modules and rebuild structure
‣ ll - librarian: show all modules, versions and dependencies
‣ llo - librarian: show all outdated modules
‣ list - list available puppet modules
Workflow
... nützliche Tasks für Zwischendurch J
10. 10
Module in Vagrant testen oder anwenden
‣ pkn = puppet apply –noop
‣ pk = puppet apply
‣ Optional: Environment oder einen Node (SSH Konfiguration) angeben
‣ Erläuterung: startet wenn nötig die Vagrant Box, synct den Puppet Code, führt
puppet apply aus und generiert die Performance-Auswertung sowie die Puppet
Graphen und zeigt diese an.
Workflow
... Puppet Code in Vagrant testen
11. 11
Module via SSH testen oder anwenden
‣ Da die Logik nicht im Vagrantfile steckt, kann der Befehl für beliebige Hosts via
SSH verwenden werden
‣ „node“ entspricht einer SSH Konfigurationsdatei unter .ssh/node.properties
Workflow
... Puppet Code remote testen
12. 12
Module Ausgabe auswerten
‣ Auf der Konsole sieht man die detaillierte Puppet Apply Ausgabe und
‣ Die Performance Ausgabe des letzten Puppet Runs
‣ Bei erfolgreicher Ausführung werden noch die Puppet Graphen angezeigt
Workflow
... Puppet Ausgabe auswerten
14. 14
Empfehlung
‣ Als Basis eine produktionsnahe VM verwenden (vgl. Packer / Vagrant Slides)
‣ Puppet Code sollte mit „puppet apply“ testbar sein
‣ Puppet Code sollte auch ohne ENC testbar sein
‣ Hiera verwenden
‣ ENC nur als Classifier
‣ Puppet Code und Daten in Hiera sind versionierbar, die Daten in der ENC nicht
Workflow
... Empfehlung
15. 15
Fazit
‣ Wer die Empfehlungen umsetzt, kann Änderungen am Puppet Code in wenigen
Sekunden lokal testen (in der Regel < 30s). Selbst nach einem „vagrant destroy“
und einer vollständigen Provisionierung laufen die Tests meist in 1-2 Minuten
durch.
‣ Geschwindigkeit und Konventionen sind für eine schnelle Entwicklung
entscheidend, welche am einfachsten lokal umzusetzen ist.
Workflow
... Empfehlung
19. 19
Fail fast Prinzip
‣ Beispiel:
Skeleton
... abbrechen wenn die Plattform nicht getestet wurde
20. 20
Validierung
‣ Alle Parameter der Klasse sollten validiert werden
‣ Beispiel:
Error: No valid sting(optional default value) for string1 defined. at /srv/
repositories/puppet/modules/skeleton/manifests/init.pp:26 on node
Skeleton
... Parameter auf Korrektheit prüfen
21. 21
Reihenfolge der Klassen festlegen
‣ Eine Möglichkeit (vgl. Containment Kapitel)
Skeleton
... Abhängigkeiten zwischen Klassen festlegen
23. 23
Modul Syntax prüfen - pcheck
‣ Bash Funktion, um den Modul-Syntax zwischen durch zu testen, falls im Modul
unter tests/ ein check Skript liegt
‣ Vorteil: schnell und zeigt Syntaxfehler
‣ Aber: Vagrant & SSD sind so schnell, das ich es fast nicht mehr verwende
Einleitung
... worum es in diesem Vortrag geht
25. 25
Problem 4
‣ Ach wie schön, ein Dependency Cylce J
‣ Was bedeutet Containment?
Containment
... Abhängigkeiten zwischen Klassen modellieren
26. http://docs.puppetlabs.com/puppet/latest/reference/lang_containment.html 26
Zitat
‣ However, unlike resources, Puppet does not automatically contain classes when
they are declared inside another class. This is because classes may be declared
in several places via include and similar functions. Most of these places shouldn’t
contain the class, and trying to contain it everywhere would cause huge
problems.
‣ Instead, you must manually contain any classes that need to be contained.
Containment
... Abhängigkeiten zwischen Klassen modellieren
40. 40
Möglichkeiten
1. Zentrale Benutzerverwaltung über ein Tool (beispielsweise LDAP)
2. Datei basierte Benutzerverwaltung mit Puppet und Hiera
Aufgaben
‣ Benutzer verwalten
‣ SSH Keys verwalten
‣ Sudo Regeln verwalten
Hands-on
... um die Übersicht zu behalten
41. 41
Eine Define für die Verwaltung der Ressourcen
Hands-on
... um die Übersicht zu behalten
42. 42
Benutzer in Hiera definieren
‣ Struktur
‣ YAML
Hands-on
... um die Übersicht zu behalten
43. 43
Eine Liste aller verfügbaren Benutzer aufbauen (virtual)
Hands-on
... um die Übersicht zu behalten
44. 44
Benutzer anhand von Kriterien ausrollen wo sie benötigt werden
Hands-on
... um die Übersicht zu behalten
45. 45
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!
http://docs.puppetlabs.com/puppet/latest/reference/lang_containment.html
Hands-on
... um die Übersicht zu behalten
46. 46
Fazit
‣ Verzeichnisstruktur nach Aufgaben und Umgebungen sortieren
‣ Die lokale Testumgebung ist der erste Umgebung die funktionieren muss!
Fazit
... um die Übersicht zu behalten
47. 47
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