puppet - umgebungen, daten & code, abhängigkeiten · linux tag 2013 - puppe umgebungen, daten...
Post on 03-Nov-2019
3 Views
Preview:
TRANSCRIPT
Linux Tag 2013 - Puppet
Umgebungen, Daten & Code, Abhängigkeiten
Alexander Pacnik Karlsruhe, 23.05.2013
Umgebungen
2
Die Agenda ... worum es in diesem Vortrag geht
Abhängig- keiten
Trennung von Daten und Code
Modul Best
Practices
3
Aufgabe ‣ Repositories und Module für heterogene Systemlandschaften verwalten
Ziele
‣ Wartbarkeit erhöhen
‣ Transparenz schaffen
‣ Prozess erzwingen
Weg ‣ Umgebungen, Modellierung von Daten und Abhängigkeiten
Einleitung ... worum es in diesem Vortrag geht
4
Konfigurationsverwaltung
‣ So einfach und minimal wie möglich
‣ Daten und Code trennen
‣ Konfigurationen beim Anwenden testen
‣ Konfigurationsverwaltung erzwingen
‣ Alles unter Versionskontrolle stellen
‣ Konfiguration in ein VCS
‣ Daten in ein Repository (Paketmanager oder Artefakt Repository)
‣ Versionierung überwachen
Einleitung ... worum geht es bei der Konfigurationsverwaltung?
5
Umgebungsverwaltung
‣ Redundanzen vermeiden
‣ Auseinanderlaufen verhindern
Klärungen
‣ Paketabhängigkeiten in Puppet oder Paketmanagement
‣ Baremetal, Betriebsystem, Dienste, Applikationen
Einleitung ... worum geht es bei der Umgebungsverwaltung?
Umgebungen
6
Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren
Abhängig- keiten
Trennung von Daten und Code
Modul Best
Practices
7
Ziel
‣ Umgebungen abbilden (Test, Abnahme, Produktion)
‣ Nach Möglichkeit gleiche Codebasis
‣ Versionsstände abbilden (Feature, Release, Hotfix, Master)
‣ So wenig branchen wie möglich (Continous Integration)
‣ Workflow (Gleiche vs. getrennte Codebasis)
Environments ... die Verwaltung von Umgebungen mit Puppet
8
Erklärung Environment
‣ Environment Konfiguration (puppet.conf)
‣ manifest ($manifestdir/site.pp)
‣ modulepath ($confdir/modules)
‣ manifestdir ($confdir/manifests)
‣ templatedir ($vardir/templates)
‣ Zugriff in Modulen über $environment
Environments ... die Verwaltung von Umgebungen mit Puppet
9
Konfiguration auf dem Master (puppet.conf) ‣ Möglichkeit einfach neuen Code zu testen
[master]
environment = production
manifest = $confdir/environments/$environment/manifests/site.pp
modulepath = $confdir/environments/$environment/modules
[agent]
environment = production
Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen
10
Anwendung auf dem Node ‣ puppet agent --environment <name>
‣ puppet agent --environment <name> --noop
Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen
11
Anwendung zentral über Puppet
Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen
12
Environments & VCS Best Practices ‣ Alles Versionieren
‣ Style und Syntax Check mit Puppet Lint (pre-commit)
‣ Monitoring für alles was im Puppet verwaltet wird
Environments ... die Verwaltung von Umgebungen mit Puppet
Umgebungen
13
Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren
Abhängig- keiten
Trennung von Daten und Code
Modul Best
Practices
14
Trennung von Daten und Code – Möglichkeiten 1. Top Scope Variable
2. Node Inheritance
3. Parametrisierte Klassen
4. Extlookup
5. Hiera
Trennung von Daten und Code ... die Möglichkeiten
15
Variable im Top Scope ‣ Variable werden im zentralen Manifest definiert und in den Modulen verwendet
Variable im Top Scope – Beispiel
Trennung von Daten und Code ... mittels Variablen
16
Variable im Top Scope – Vor- und Nachteile ‣ Pro: Sehr einfach
‣ Pro: defacto Trennung von Code und Daten
‣ Con: immer noch im gleichen Repository
‣ Con: unklar wo die Variablen verwendet werden und welcher Werte gesetzt ist
Trennung von Daten und Code ... mittels Variablen
17
Node Inheritance ‣ Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildet
Node Inheritance – Beispiel
Trennung von Daten und Code ... mittels Node Inheritance
18
Node Inheritance – Vor- und Nachteile ‣ Pro: Sehr einfach
‣ Pro: defacto Trennung der Daten vom Code
‣ Con: immer noch im gleichen Repository
‣ Con: unklar wo die Variablen verwendet werden und welcher Werte gesetzt ist
Trennung von Daten und Code ... mittels Node Inheritance
19
Parametrisierte Klassen ‣ Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildet
Parametrisierte Klassen – Beispiel
Trennung von Daten und Code ... mittels parametrisierte Klassen
20
Parametrisierte Klassen – Vor- und Nachteile ‣ Pro: Daten nicht mehr im Modulcode und Defaultwerte möglich (Lesbarkeit)
‣ Pro: klar wo die Variablen verwendet werden
‣ Con: Daten und Logik in params.pp ausgelagert
Trennung von Daten und Code ... mittels parametrisierte Klassen
21
Extlookup ‣ Hierarchischer Lookup einer Variable im datadir basierend auf Fact und Key
Extlookup – Beispiel
Trennung von Daten und Code ... mittels extlookup
22
Extlookup – Vor- und Nachteile ‣ Pro: dynamische und hierarchische Abbildung von Werten
‣ Con: schlechte Wartbarkeit (CSV)
‣ Con: liefert nur den ersten Wert, keine zusammengesetzten Werte
Trennung von Daten und Code ... mittels extlookup
23
Hiera ‣ Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookup
Hiera – Konfiguration
Trennung von Daten und Code ... mittels Hiera
24
Hiera Beispiele ‣ hiera – spezifischen Wert anhand des Schlüssels zurückliefern
$local_var = hiera('my_name')
‣ hiera_array – alle Strings als Array zurückliefern
$local_array = hiera_array('my_array')
‣ hiera_hash – alle Werte zu einem Hash zusammenfassen und zurückliefern
$local_hash = hiera_hash('my_hash‘)
Trennung von Daten und Code ... mittels Hiera
25
Hiera auf der Kommandozeile ‣ Die YAML Datenbank abfragen
hiera <key> [Optionen]
‣ Wichtige Optionen
‣ --yaml <file>
‣ --array
‣ --hash
Trennung von Daten und Code ... mittels Hiera
26
Hiera und Node Definitions ‣ Liste von Klassen aus Hiera abfragen und anwenden
Trennung von Daten und Code ... mittels Hiera
27
Hiera – Vor- und Nachteile ‣ Pro: dynamische und hierarchische Abbildung von Werten
‣ Pro: Default Werte möglich
‣ Pro: Trennung von Code und Daten
‣ Pro: zusammengesetzten Werte
Trennung von Daten und Code ... mittels Hiera
28
Hiera Best Practices ‣ Hiera nicht in Templates sondern nur im Manifest verwenden (Lesbarkeit)
‣ Hierarchien minimal halten (Einfachheit)
‣ Hiera Daten pro Umgebung trennen
:datadir: '/etc/puppet/environments/%{environment}/hieradata'
Trennung von Daten und Code ... mittels Hiera
29
Empfehlung ‣ So nah wie möglich am Code (Lesbarkeit)
‣ Seit weit entfernt wie nötig (Abstrahierbarkeit)
‣ Im Zweifel Hiera
‣ Default-Werte verwenden
Trennung von Daten und Code ... die Zusammenfassung
Umgebungen
30
Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren
Abhängig- keiten
Trennung von Daten und Code
Modul Best
Practices
31
Grund ‣ Reihenfolge im Manifest wird nicht beachtet (deklarativ)
‣ Abhängigkeiten zwischen Ressourcen müssen modelliert werden
Problem ‣ Reihenfolgen oft doch relevant
‣ z.B. Dienst installieren, konfigurieren und starten
Reihenfolgen und Abhängigkeiten ... die Problemstellung
32
Reihenfolgen und Abhängigkeiten 1. Metaparameter
2. Chaining
3. Die „require“ Funktion
4. Run Stages
Reihenfolgen und Abhängigkeiten ... die Möglichkeiten
33
Metaparameter ‣ Einsatzzweck: Abhängigkeiten zwischen Ressourcen
‣ Before (Ressource vor einer anderen anwenden)
‣ Require (Ressource nach einer anderen anwenden)
‣ Notify (Ressource vor einer anderen anwenden und Änderungen mitteilen)
‣ Subscribe (Ressource nach einer anderen anwenden und Änderungen mitteilen)
Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern
34
Metaparameter – Beispiel
Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern
35
Metaparameter – Vor- und Nachteile Pro: funktionieren mit jedem Ressourcen Typ
Con: wird schnell unübersichtlich
Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern
36
Chaining ‣ Einsatzzweck: Abhängigkeiten zwischen Ressourcen(-gruppen)
‣ -> (ordering arrow)
Die Ressource links des Pfeils wird zuerst angewendet
‣ ~> (notification arrow)
Die Ressource links des Pfeils wird zuerst angewendet und bei Änderungen wird
die Rechte benachrichtigt
‣ Best Practice: Pfeile nur in eine Richtung (rechts) verwenden
Reihenfolgen und Abhängigkeiten ... Chaining
37
Chaining – Anwendungsfälle ‣ Ressourcen Deklarationen
‣ Puppet Code Blöcke
Reihenfolgen und Abhängigkeiten ... Chaining
38
Chaining – Anwendungsfälle ‣ Ressourcen Referenzen
‣ Referenz auf eine existierende Puppet Ressource (Typ und Titel)
Reihenfolgen und Abhängigkeiten ... Chaining
39
Resource Collectors ‣ Ressourcen gruppieren anhand bestimmter Attribute
‣ Syntax: <| [Ausdruck] |>
‣ Suchausdrücke mit „!=“, „==“, „and“ und „or“
Exkurs ... Resource Collectors
40
Chaining – Anwendungsfälle ‣ Ressourcen Collectoren (auch virtuelle Ressourcen)
Reihenfolgen und Abhängigkeiten ... Chaining
41
‣ Chaining – Vor und Nachteile ‣ Pro: Funktioniert für Ressourcen und Gruppen von Ressourcen
‣ Pro: sehr flexibel vor allem im Zusammenspiel mit virtuellen Ressourcen
‣ Con: Gefahr von Dependency Cycles insbesondere mit virtuellen Ressourcen
puppet agent --configprint graphdir
Reihenfolgen und Abhängigkeiten ... Chaining
42
Funktion „require“ ‣ Einsatzzweck: Abhängigkeiten zwischen Klassen abbilden
‣ require (Klassen vor einer Ressource anwenden)
‣ Wird auch bei mehrfachen Aufrufen nur einmal ausgeführt im Gegensatz zu include
Funktion „require“ – Beispiel
Reihenfolgen und Abhängigkeiten ... die „require“ Funktion
43
Run Stages ‣ Einsatzzweck: Gruppe von Klassen die vor oder nach allem anderen laufen soll
‣ Definition über einen Ressource Type, Verwendung durch Zuweisung eines Metaparameters in einer Klasse
Run Stages – Beispiel
Reihenfolgen und Abhängigkeiten ... run stages für Massenabhängigkeiten
44
Run Stages – Vor- und Nachteile ‣ Pro: Massenabhängigkeiten abbildbar
‣ Con: funktioniert nicht mit include, subscribe oder notify
‣ Con: Klassen die andere Klassen deklarieren verhalten sich im run stage anders
‣ Empfehlung: einzig valider Fall sind Abhängigkeiten mit Paketrepositories
Reihenfolgen und Abhängigkeiten ... run stages für Massenabhängigkeiten
45
Zusammenfassung ‣ Abhängigkeiten innerhalb von Klassen mit Metaparametern und Chaining
‣ Abhängigkeiten zwischen Klassen mit der require Funktion
‣ Run Stages vermeiden
‣ So einfach wie möglich halten um Dependency Cycles zu vermeiden
Reihenfolgen und Abhängigkeiten ... die Zusammenfassung
46
Vielen Dank für Ihre Aufmerksamkeit
Kontakt Alexander Pacnik Systems Engineering inovex GmbH Office Karlsruhe Zur Gießerei 16 76227 Karlsruhe +49 (0)173 3181 040 alexander.pacnik@inovex.de
Anhang
48
Quellen ‣ Puppet Style Guide
http://docs.puppetlabs.com/guides/style_guide.html
‣ Puppet Language Guide
http://docs.puppetlabs.com/guides/language_guide.html
‣ Puppet Referenzen
http://docs.puppetlabs.com/references/latest/
‣ Puppet Guides
http://docs.puppetlabs.com/guides/
‣ Puppet Blog
https://puppetlabs.com/blog/
Lizenz des Vortrags ‣ Creative Commons (by-nc-nd)
Anhang ... wo sie in Ruhe nachlesen können
top related