Click here to load reader

Puppet - Umgebungen, Daten & Code, Abhängigkeiten

  • View
    309

  • Download
    1

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.

Text of Puppet - Umgebungen, Daten & Code, Abhängigkeiten

  • 1. Linux Tag 2013 - PuppetUmgebungen, Daten & Code, AbhngigkeitenAlexander PacnikKarlsruhe, 23.05.2013

2. Umgebungen2Die Agenda... worum es in diesem Vortrag gehtAbhngig-keitenTrennungvon Datenund CodeModulBestPractices 3. 3Aufgabe Repositories und Module fr heterogene Systemlandschaften verwaltenZiele Wartbarkeit erhhen Transparenz schaffen Prozess erzwingenWeg Umgebungen, Modellierung von Daten und AbhngigkeitenEinleitung... worum es in diesem Vortrag geht 4. 4Konfigurationsverwaltung So einfach und minimal wie mglich 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 berwachenEinleitung... worum geht es bei der Konfigurationsverwaltung? 5. 5Umgebungsverwaltung Redundanzen vermeiden Auseinanderlaufen verhindernKlrungen Paketabhngigkeiten in Puppet oder Paketmanagement Baremetal, Betriebsystem, Dienste, ApplikationenEinleitung... worum geht es bei der Umgebungsverwaltung? 6. Umgebungen6Reihenfolgen und Abhngigkeiten... Abhngigkeiten modellierenAbhngig-keitenTrennungvon Datenund CodeModulBestPractices 7. 7Ziel Umgebungen abbilden (Test, Abnahme, Produktion) Nach Mglichkeit gleiche Codebasis Versionsstnde abbilden (Feature, Release, Hotfix, Master) So wenig branchen wie mglich (Continous Integration) Workflow (Gleiche vs. getrennte Codebasis)Environments... die Verwaltung von Umgebungen mit Puppet 8. 8Erklrung Environment Environment Konfiguration (puppet.conf) manifest ($manifestdir/site.pp) modulepath ($confdir/modules) manifestdir ($confdir/manifests) templatedir ($vardir/templates) Zugriff in Modulen ber $environmentEnvironments... die Verwaltung von Umgebungen mit Puppet 9. 9Konfiguration auf dem Master (puppet.conf) Mglichkeit einfach neuen Code zu testen[master]environment = productionmanifest = $confdir/environments/$environment/manifests/site.ppmodulepath = $confdir/environments/$environment/modules[agent]environment = productionDynamic Environments... Weiterentwicklung mit temporren Umgebungen 10. 10Anwendung auf dem Node puppet agent --environment puppet agent --environment --noopDynamic Environments... Weiterentwicklung mit temporren Umgebungen 11. 11Anwendung zentral ber PuppetDynamic Environments... Weiterentwicklung mit temporren Umgebungen 12. 12Environments & VCS Best Practices Alles Versionieren Style und Syntax Check mit Puppet Lint (pre-commit) Monitoring fr alles was im Puppet verwaltet wirdEnvironments... die Verwaltung von Umgebungen mit Puppet 13. Umgebungen13Reihenfolgen und Abhngigkeiten... Abhngigkeiten modellierenAbhngig-keitenTrennungvon Datenund CodeModulBestPractices 14. 14Trennung von Daten und Code Mglichkeiten1. Top Scope Variable2. Node Inheritance3. Parametrisierte Klassen4. Extlookup5. HieraTrennung von Daten und Code... die Mglichkeiten 15. 15Variable im Top Scope Variable werden im zentralen Manifest definiert und in den Modulen verwendetVariable im Top Scope BeispielTrennung von Daten und Code... mittels Variablen 16. 16Variable 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 istTrennung von Daten und Code... mittels Variablen 17. 17Node Inheritance Variable werden in Nodes definiert und ber Vererbung die Hierarchie abgebildetNode Inheritance BeispielTrennung von Daten und Code... mittels Node Inheritance 18. 18Node 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 istTrennung von Daten und Code... mittels Node Inheritance 19. 19Parametrisierte Klassen Variable werden in Nodes definiert und ber Vererbung die Hierarchie abgebildetParametrisierte Klassen BeispielTrennung von Daten und Code... mittels parametrisierte Klassen 20. 20Parametrisierte Klassen Vor- und Nachteile Pro: Daten nicht mehr im Modulcode und Defaultwerte mglich (Lesbarkeit) Pro: klar wo die Variablen verwendet werden Con: Daten und Logik in params.pp ausgelagertTrennung von Daten und Code... mittels parametrisierte Klassen 21. 21Extlookup Hierarchischer Lookup einer Variable im datadir basierend auf Fact und KeyExtlookup BeispielTrennung von Daten und Code... mittels extlookup 22. 22Extlookup Vor- und Nachteile Pro: dynamische und hierarchische Abbildung von Werten Con: schlechte Wartbarkeit (CSV) Con: liefert nur den ersten Wert, keine zusammengesetzten WerteTrennung von Daten und Code... mittels extlookup 23. 23Hiera Hierarchischer Lookup einer Variable im datadir hnlich wie extlookupHiera KonfigurationTrennung von Daten und Code... mittels Hiera 24. 24Hiera Beispiele hiera spezifischen Wert anhand des Schlssels zurckliefern$local_var = hiera(my_name) hiera_array alle Strings als Array zurckliefern$local_array = hiera_array(my_array) hiera_hash alle Werte zu einem Hash zusammenfassen und zurckliefern$local_hash = hiera_hash(my_hash)Trennung von Daten und Code... mittels Hiera 25. 25Hiera auf der Kommandozeile Die YAML Datenbank abfragenhiera [Optionen] Wichtige Optionen --yaml --array --hashTrennung von Daten und Code... mittels Hiera 26. 26Hiera und Node Definitions Liste von Klassen aus Hiera abfragen und anwendenTrennung von Daten und Code... mittels Hiera 27. 27Hiera Vor- und Nachteile Pro: dynamische und hierarchische Abbildung von Werten Pro: Default Werte mglich Pro: Trennung von Code und Daten Pro: zusammengesetzten WerteTrennung von Daten und Code... mittels Hiera 28. 28Hiera 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}/hieradataTrennung von Daten und Code... mittels Hiera 29. 29Empfehlung So nah wie mglich am Code (Lesbarkeit) Seit weit entfernt wie ntig (Abstrahierbarkeit) Im Zweifel Hiera Default-Werte verwendenTrennung von Daten und Code... die Zusammenfassung 30. Umgebungen30Reihenfolgen und Abhngigkeiten... Abhngigkeiten modellierenAbhngig-keitenTrennungvon Datenund CodeModulBestPractices 31. 31Grund Reihenfolge im Manifest wird nicht beachtet (deklarativ) Abhngigkeiten zwischen Ressourcen mssen modelliert werdenProblem Reihenfolgen oft doch relevant z.B. Dienst installieren, konfigurieren und startenReihenfolgen und Abhngigkeiten... die Problemstellung 32. 32Reihenfolgen und Abhngigkeiten1. Metaparameter2. Chaining3. Die require Funktion4. Run StagesReihenfolgen und Abhngigkeiten... die Mglichkeiten 33. 33Metaparameter Einsatzzweck: Abhngigkeiten 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 Abhngigkeiten... die Verwendung von Metaparametern 34. 34Metaparameter BeispielReihenfolgen und Abhngigkeiten... die Verwendung von Metaparametern 35. 35Metaparameter Vor- und NachteilePro: funktionieren mit jedem Ressourcen TypCon: wird schnell unbersichtlichReihenfolgen und Abhngigkeiten... die Verwendung von Metaparametern 36. 36Chaining Einsatzzweck: Abhngigkeiten 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 wirddie Rechte benachrichtigt Best Practice: Pfeile nur in eine Richtung (rechts) verwendenReihenfolgen und Abhngigkeiten... Chaining 37. 37Chaining Anwendungsflle Ressourcen Deklarationen Puppet Code BlckeReihenfolgen und Abhngigkeiten... Chaining 38. 38Chaining Anwendungsflle Ressourcen Referenzen Referenz auf eine existierende Puppet Ressource (Typ und Titel)Reihenfolgen und Abhngigkeiten... Chaining 39. 39Resource Collectors Ressourcen gruppieren anhand bestimmter Attribute Syntax: Suchausdrcke mit !=, ==, and und orExkurs... Resource Collectors 40. 40Chaining Anwendungsflle Ressourcen Collectoren (auch virtuelle Ressourcen)Reihenfolgen und Abhngigkeiten... Chaining 41. 41 Chaining Vor und Nachteile Pro: Funktioniert fr Ressourcen und Gruppen von Ressourcen Pro: sehr flexibel vor allem im Zusammenspiel mit virtuellen Ressourcen Con: Gefahr von Dependency Cycles insbesondere mit virtuellen Ressourcenpuppet agent --configprint graphdirReihenfolgen und Abhngigkeiten... Chaining 42. 42Funktion require Einsatzzweck: Abhngigkeiten zwischen Klassen abbilden require (Klassen vor einer Ressource anwenden) Wird auch bei mehrfachen Aufrufen nur einmal ausgefhrt im Gegensatz zu includeFunktion require BeispielReihenfolgen und Abhngigkeiten... die require Funktion 43. 43Run Stages Einsatzzweck: Gruppe von Klassen die vor oder nach allem anderen laufen soll Definition ber einen Ressource Type, Verwendung durch Zuweisung einesMetaparameters in einer KlasseRun Stages BeispielReihenfolgen und Abhngigkeiten... run stages fr Massenabhngigkeiten 44. 44Run Stages Vor- und Nachteile Pro: Massenabhngigkeiten 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 Abhngigkeiten mit PaketrepositoriesReihenfolgen und Abhngigkeiten... run stages fr Massenabhngigkeiten 45. 45Zusammenfassung Abhngigkeiten innerhalb von Klassen mit Metaparametern und Chaining Abhngigkeiten zwischen Klassen mit der require Funktion Run Stages vermeiden So einfach wie mglich halten um Dependency Cycles zu vermeidenReihenfolgen und Abhngigkeiten... die Zusammenfassung 46. 46Vielen Dank fr Ihre Aufm