diff --git a/bericht/anhang.tex b/bericht/anhang.tex index 0b36638..c42b6f0 100644 --- a/bericht/anhang.tex +++ b/bericht/anhang.tex @@ -31,8 +31,14 @@ die Möglichkeit, diese zu aktualisieren. Die Kommandozeilen-Argumente sind die gleichen wie bei \emph{pacman}, da das Tool im Grunde ein Wrapper für {\tt pacman} ist. -\subsubsection{Easybuild} +\subsection{Easybuild} \label{sec:easybuild} \href{http://hpcugent.github.io/easybuild/}{Easybuild} ist ein auf den HPC-Bereich ausgelegtes Projekt, welches die Installation/Verwaltung verschiedener Versionen -von Software ermöglicht. Darüber hinaus generiert es Environment-Modules und erkennt Abhängigkeiten. +von Software ermöglicht. Darüber hinaus generiert es Environment-Modules und +erkennt Abhängigkeiten. + +\subsection{Initsystem} +\label{sec:initsysteme} + +Prozess, der in einem Betriebsystem alle nachfolgenden Prozesse verwaltet und startet. diff --git a/bericht/chef/chef-comparison.tex b/bericht/chef/chef-comparison.tex index c893e3a..b254b71 100644 --- a/bericht/chef/chef-comparison.tex +++ b/bericht/chef/chef-comparison.tex @@ -2,9 +2,11 @@ \label{ssub:funktionsweise_von_chef} \href{http://www.getchef.com/chef/}{Chef} ist ein Framework, welches eine -automatisierte Serverkonfiguration und -verwaltung ermöglicht. (TODO - -Provisionierung und Deployment) Der Endanwender -beschreibt hierbei die Systemressourcen und ihre Zustände in der +automatisierte Serverkonfiguration und -verwaltung ermöglicht. Chef übernimmt +dabei Aufgaben der Provisionierung (Installation der grundlegenden Dienste, +Resourcenverwaltung, Einrichtung und Konfiguration von Middleware) bis hin zu +Deployment (Verteilung der eigentlichen Business-Anwendung). +Der Endanwender beschreibt hierbei die Systemressourcen und ihre Zustände in der Programmiersprache \href{https://www.ruby-lang.org/}{Ruby}. Diese Definitionen werden von dem Program \emph{Chef-Client} eingelesen und in notwendige Aktionen übersetzt, welche ausgeführt werden müssen, um den beschriebenen Zustand @@ -119,8 +121,8 @@ findet. Hier nochmal die einzelnen Verzeichnisse im Überblick: Implementierung. Deswegen muss für jede Ressource mindestens ein Provider existieren. Es kann mehrere Provider für eine Ressource geben, um zum Beispiel um mehrere Plattformenvarianten oder Betriebssysteme abdecken zu - können (z.B. bei Paketmanagern oder Initsystemen TODO - Initsystemen - erklären). In eigenen Cookbooks erstellte Resources/Provider nennt man LWRP + können (z.B. bei Paketmanagern oder Initsystemen - \ref{sec:initsysteme}). In + eigenen Cookbooks erstellte Resources/Provider nennt man LWRP (Lightweight-Resource/Provider). \item[recipes] In Recipes werden Ressourcen instanziiert, welche nötig sind, um die gewünschte Ziel zu erreichen. Dabei können Abhängigkeiten zwischen @@ -254,9 +256,9 @@ General-Purpose-Languages wie Ruby, Java oder C/C++ eine Domain-Specific-Language (DSL). Eine DSL ist eine eigens für den Anwendungszweck geschriebene und optimierte Sprache. Sie enthält häufig Elemente und Ausdrücke, welche es erlauben Probleme der Anwendungsdomain effizient zu lösen. Auf der -anderen Seite wird verzichtet auf umfangreiche Standardbibliotheken und -Sprachkonstrukte verzichtet, die in General-Purpose-Language üblich sind. -Puppets Sprache wurde an das Konfigurationsformat von Nagios angelehnt +anderen Seite wird auf umfangreiche Standardbibliotheken und Sprachkonstrukte +verzichtet, die in General-Purpose-Language üblich sind. Puppets Sprache wurde +an das Konfigurationsformat der Überwachungssoftware Nagios angelehnt (\cite{puppetlanguage}). Sie ist deklarativ gehalten und soll möglichst einfach erlernbar für Administratoren, auch ohne programmiertechnischen Hintergrund, sein. Der Schwerpunkt liegt auf der Beschreibung von \emph{Resources}. Die @@ -272,10 +274,10 @@ Puppets Sprache definiert werden. Stattdessen werden diese als Erweiterung des Parsers in Ruby implementiert, was wiederum den den Nachteil hat, dass dafür eine weitere Sprachen erlernt werden muss. Manche Unternehmen und Organisationen greifen bevorzugt auf Puppet zurück, weil es einfacher ist neue Mitarbeiter ohne -Rubykenntnisse in diesem Framework zu schulen (TODO - Beleg). Andere wie -bevorzugen die Flexibilität von Ruby. Facebook gab dies als Einen der Gründe an, -warum sie im Jahre 2013 von \emph{CFEngine2} (TODO - Link) auf \emph{Chef 11} -umgestiegen sind. +Rubykenntnisse in diesem Framework zu schulen. Andere wie bevorzugen die +Flexibilität von Ruby. Facebook gab dies als einen der Gründe an, warum sie im +Jahre 2013 von \emph{CFEngine2} auf \emph{Chef 11} umgestiegen sind +\cite{facebooklikeschef}. Das strukturelle Äquivalent zu \emph{Cookbooks} in Chef ist in Puppet das Puppet-Module. Diese werden in der Community ausgetauscht und entwickelt. Da @@ -290,15 +292,15 @@ Modulen, (Stand: 31.03.2014 - ermittelt über die weiteren wichtigen Quelle hat sich die Plattform \href{https://github.com}{Github} für beide Projekte entwickelt. Für einen Vergleich wurde die Anzahl der Suchtreffer für Projekte, die die Suchbegriffe -"Chef" und "Puppet" in der Suchmaschine auf Github herangezogen. Github filtert +``Chef'' und ``Puppet'' in der Suchmaschine auf Github herangezogen. Github filtert Forks (Abspaltungen) von Projekten aus den Suchergebnissen heraus und -schlüsselt die Ergebnisse nach Programmiersprache auf. Es werden alle +schlüsselt die Ergebnisse nach Programmiersprache auf. Es wurden alle Programmiersprachen in beide Projekte mit weniger als 100 Suchtreffer aus -Übersichtlichkeitsgründen nicht in das in Diagramm übernommen (siehe Tabelle). Kurze -Stichproben der Suchergebnisse, dass die Suchtreffer sich überwiegend mit den -eigentlichen Projekten Chef und Puppet beschäftigen. Anzumerken ist, das -Zielgruppe von Puppet eher Systemadminstratoren sind, während Chef auch von -vielen Entwicklern genutzt wird, wobei Letztere bevorzugt Github verwenden. +Übersichtlichkeitsgründen nicht in das in Diagramm übernommen (siehe Tabelle). +Eine kurze Stichproben der Suchergebnisse, dass die Suchtreffer sich überwiegend +mit den eigentlichen Projekten Chef und Puppet beschäftigen. Anzumerken ist, das +Zielgruppe von Puppet eher Systemadminstratoren aus besteht, während Chef auch +von vielen Entwicklern genutzt wird. Letztere verwenden bevorzugt Github. \begin{figure}[H] @@ -361,8 +363,8 @@ Sprache & Ruby & Puppet & Shell & Python & Javascript & Perl & PHP & Java & Vim \vspace{0.5cm} -Eine andere wichtige Statistik für Opensourceprojekte ist die Subscriber auf den jeweiligen -Mailinglisten. +Eine andere wichtige Statistik für Opensourceprojekte ist die Anzahl der +Subscriber auf den jeweiligen Mailinglisten. \begin{description} \item[chef@lists.opscode.com] Community-Mailingliste, 1620 Leser, \href{http://lists.opscode.com/sympa/info/chef}{Quelle}, Stand: 31.03.2014 @@ -386,7 +388,7 @@ Module-Namen und Manifest-Namen gebildet. Wenn das Module ``foo'' das Manifest Manifest \emph{init.pp}, bei dem die Class nur ``bar'' lauten würde. Diese Benennungskonvention wurde in Chef übernommen, um Recipes in Cookbooks zu referenzieren (anstelle von \emph{init.rb} lautet die Datei \emph{default.rb}). -Allerdings werden in Recipes keine seperaten Objekt definiert und der ganze +Allerdings werden in Recipes keine separaten Objekt definiert und der ganze Inhalt der Datei bildet das Recipe. Eine Class in Puppet kann über Parameter konfiguriert werden. Parameter werden @@ -418,25 +420,30 @@ schon aus Chef bekannte \emph{Definition}. Diese kann im Gegensatz zum Custom-Type auch direkt in der Puppet-Sprache mit Schlüsselwort \emph{define} definiert werden. +Um zu Beginn Informationen über das zu provisionierende System zu sammeln, wird +auf die Bibliothek \href{http://puppetlabs.com/facter}{Facter} zurückgriffen. In +frühen Versionen von Chef wurde die gleiche Bibliothek verwendet, bevor später +\href{http://docs.opscode.com/ohai.html}{Ohai} integriert wurde. + Chef benutzt die gleiche Template-Syntax wie Puppet (eRuby). Einziger Unterschied bei Chef ist die Funktion für verschiedene Plattformen/Plattformversionen verschiedene Templatevarianten der selben Datei im Cookbook vorzuhalten. Die Varianten werden durch Unterordner im \emph{templates/} unterschieden (z.B. \emph{templates/windows} oder -\emph{templates/ubuntu-12.04}). Falls kein der Plattform entsprechende Order +\emph{templates/ubuntu-12.04}). Falls kein der Plattform entsprechende Ordner existiert fällt Chef auf \emph{templates/default} zurück. Ein wesentlicher Unterschied zwischen Puppet und Chef ist die Reihenfolge der Ausführung von Resources. Chef überprüft die Resources in der Reihenfolge, in der sie in der Run-List und in den Recipes geladen werden. Puppet sortiert Resources um. Bei Puppet deswegen spricht man von modelbasiertem -Konfigurationsmanagment. Da manche Resources voneinander kann durch die Angabe -von Abhängigkeiten mittels der Parameter \emph{before} und \emph{require} +Konfigurationsmanagment. Da manche Resources voneinander abhängen kann durch +die Angabe der Parameter \emph{before} und \emph{require} die Reihenfolge festgelegt werden. Über die Parameter \emph{notify} und \emph{subscribe} können darüber hinaus Resourcen aktualisiert werden, wenn sich eine Abhängigkeit geändert hat (z.B. kann ein Dienst neugestartet werden, wenn sich die dazu -gehörige Konfiguration verändert hat). In Chef kann Letzeres über die -Paramether \emph{notifies} und \emph{subscribes} angegeben werden. +gehörige Konfiguration verändert hat). In Chef kann Letzeres über die Paramether +\emph{notifies} und \emph{subscribes} angegeben werden. Wie auch Chef bietet Puppet verschiedene Betriebsmodi. Im einfachsten Fall wird mit dem Befehl \emph{puppet apply} ein lokales Manifest geladen werden @@ -451,17 +458,24 @@ Manifeste in einem Git-Repository, wobei Puppet periodisch über einen Cron-Job aufgerufen wird und die ausgecheckten Manifeste ausführt. Während Chef-Server bis zur Version 10 wie Puppet-Master in Ruby geschrieben war, wurde der API-Teil von Chef-Server wurde in Version 11 in der Programmiersprache Erlang neugeschrieben. -Die Zahl der Nodes, die von einem Server bedient werden können soll vervierfacht -haben auf bis zu 10.000 Nodes pro Server (Quelle: \cite{chefscale}). Für Puppet -wurden keine verlässlichen Zahlen gefunden, wieviel Nodes pro Server betreut -werden können. Allerdings ist anzunehmen, dass die Zahl architekturbedingt unter -der von Chef liegt. +Die Zahl der Nodes, die von einem Server bedient werden, soll sich dabei +vervierfacht haben auf bis zu 10.000 Nodes pro Server (Quelle: +\cite{chefscale}). Für Puppet wurden keine verlässlichen Zahlen gefunden, wie +viele Nodes pro Server betreut werden können. Allerdings ist anzunehmen, dass +die Zahl architekturbedingt unter der von Chef liegt. Zu den von offiziell von Chef unterstützt Plattformen gehören Windows, MacOS X, verschiedene Linuxderivate (Debian, Ubuntu, Redhat\ldots) und Solaris. Puppet bietet breiteren Support und unterstützt zusätzlich Free- und OpenBSD sowie HP-UX und AIX. -%- Resume: Ähnliche Projekte, lösen das gleiche Problem auf unterschiedliche Weise +Chef und Puppet bieten den gleichen Funktionsumfang. Die darunter liegenden +Grundkonzepte sind ähnlich, so das Anwender des einen Systems mit wenig Aufwand +auch das andere System verstehen. Die beiden Firmen hinter den Produkten, Puppet +Labs und Chef, stehen, enwickeln das Produkt stetig weiter und bieten +kommerziellen Support. Während Puppet auf den klassischen Systemadminstrator +abzielt, ist Chef ein Produkt der +\href{http://www.getchef.com/solutions/devops/}{DevOps}-Bewegung, bei welcher +adminstrative Teil einer Organisation stärker Entwicklung verzahnt wird. % vim: set spell spelllang=de_de diff --git a/bericht/chef/chef-services.tex b/bericht/chef/chef-services.tex index 1ddebcf..4aa97ca 100644 --- a/bericht/chef/chef-services.tex +++ b/bericht/chef/chef-services.tex @@ -104,7 +104,7 @@ Für das Deployment wurden fünf Cookbooks geschrieben: und fügt, die in den Attributes konfigurierten, DNS-Einträge zu den entsprechenden Zonen hinzu. \item[dhcp] - Dieses Cookbook richtet den ISC-DHCP-Server (TODO Link) ein. Neben der + Dieses Cookbook richtet den \href{https://www.isc.org/downloads/dhcp/}{ISC-DHCP-Server} ein. Neben der Zuordnung von festen IP-Adressen zu Nodes, kann ein DNS-Server und ein NTP-Server festgelegt werden. diff --git a/bericht/sources.bib b/bericht/sources.bib index b2bb9c9..f3ab453 100644 --- a/bericht/sources.bib +++ b/bericht/sources.bib @@ -45,3 +45,15 @@ year = {2013}, month = {Februar} } + +@misc{facebooklikeschef, + author = {chef}, + title = {Scaling systems configuration at Facebook - Phil Dibowitz}, + url = {http://www.youtube.com/watch?v=SYZ2GzYAw_Q}, + year = {2013}, + month = {April} +} + + + +