48
Linux Tag 2013 - Puppet Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Embed Size (px)

DESCRIPTION

Der Vortrag beschreibt Möglichkeiten zur sinnvollen Trennung von Daten und Module mit Puppet 3. Insbesondere in heterogenen Systemlandschaften und über Umgebungsgrenzen hinweg gilt es, die Freiheiten, die Puppet zur Verfügung stellt, richtig einzusetzen. Es wird die Verwendung von Variablen im Top Scope, parametrisierten Klassen und Hiera beschrieben, mit Hilfe derer dies erreicht werden kann. Der Umgang mit Default-Werten bzw. Parametern wird anhand der params.pp oder Hashes in Templates beschrieben und an Code-Beispielen verdeutlich. Im letzten Schritt wird auf notwendige Tests und den Umgang mit Modulabhängigkeiten eingegangen, die durch diese Aufteilung notwendig werden und zur Wartbarkeit des Codes beitragen.

Citation preview

Page 1: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Linux Tag 2013 - Puppet

Umgebungen, Daten & Code, Abhängigkeiten

Alexander Pacnik Karlsruhe, 23.05.2013

Page 2: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Umgebungen

2

Die Agenda ... worum es in diesem Vortrag geht

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 3: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 4: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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?

Page 5: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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?

Page 6: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Umgebungen

6

Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 7: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 8: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 9: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 10: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

10

Anwendung auf dem Node ‣  puppet agent --environment <name>

‣  puppet agent --environment <name> --noop

Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen

Page 11: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

11

Anwendung zentral über Puppet

Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen

Page 12: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 13: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Umgebungen

13

Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 14: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 15: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 16: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 17: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 18: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 19: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 20: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 21: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

21

Extlookup ‣  Hierarchischer Lookup einer Variable im datadir basierend auf Fact und Key

Extlookup – Beispiel

Trennung von Daten und Code ... mittels extlookup

Page 22: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 23: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

23

Hiera ‣  Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookup

Hiera – Konfiguration

Trennung von Daten und Code ... mittels Hiera

Page 24: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 25: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 26: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

26

Hiera und Node Definitions ‣  Liste von Klassen aus Hiera abfragen und anwenden

Trennung von Daten und Code ... mittels Hiera

Page 27: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 28: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 29: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 30: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Umgebungen

30

Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 31: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 32: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

32

Reihenfolgen und Abhängigkeiten 1.  Metaparameter

2.  Chaining

3.  Die „require“ Funktion

4.  Run Stages

Reihenfolgen und Abhängigkeiten ... die Möglichkeiten

Page 33: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 34: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

34

Metaparameter – Beispiel

Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern

Page 35: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

35

Metaparameter – Vor- und Nachteile Pro: funktionieren mit jedem Ressourcen Typ

Con: wird schnell unübersichtlich

Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern

Page 36: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 37: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

37

Chaining – Anwendungsfälle ‣  Ressourcen Deklarationen

‣  Puppet Code Blöcke

Reihenfolgen und Abhängigkeiten ... Chaining

Page 38: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

38

Chaining – Anwendungsfälle ‣  Ressourcen Referenzen

‣  Referenz auf eine existierende Puppet Ressource (Typ und Titel)

Reihenfolgen und Abhängigkeiten ... Chaining

Page 39: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

39

Resource Collectors ‣  Ressourcen gruppieren anhand bestimmter Attribute

‣  Syntax: <| [Ausdruck] |>

‣  Suchausdrücke mit „!=“, „==“, „and“ und „or“

Exkurs ... Resource Collectors

Page 40: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

40

Chaining – Anwendungsfälle ‣  Ressourcen Collectoren (auch virtuelle Ressourcen)

Reihenfolgen und Abhängigkeiten ... Chaining

Page 41: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 42: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 43: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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

Page 44: Puppet - Umgebungen, Daten & Code, Abhä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

Page 45: Puppet - Umgebungen, Daten & Code, Abhä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

Page 46: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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 [email protected]

Page 47: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Anhang

Page 48: Puppet - Umgebungen, Daten & Code, Abhängigkeiten

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