chef: Todos weitgehend entfernt

This commit is contained in:
Jörg Thalheim 2014-04-03 13:27:35 +02:00
parent 62ad17d07a
commit 414aed5046
4 changed files with 68 additions and 36 deletions

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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}
}