ltcp/bericht/chef/chef-comparison.tex

128 lines
5.7 KiB
TeX

\subsubsection{Funktionsweise von Chef}
\label{ssub:funktionsweise_von_chef}
\href{http://www.getchef.com/chef/}{Chef} ist ein Framework, welches es
ermöglicht automatisiert Server zu konfigurieren und zu verwalten. Der
Endanwender beschreibt hierbei die Systemresourcen und ihre Zustände in der
Programmiersprache \href{https://www.ruby-lang.org/}{Ruby}. Diese Definitionen
werden von \emph{Chef-client} eingelesen und in notwendige Aktionen übersetzt,
welche ausgeführt werden müssen, um den beschriebenen Zustand umzusetzen.
Die Gesamtheit aller Definitionen/Einstellungen nennt man das \emph{Chef-repo}.
Diese untergliedert sich in mehrere \emph{Cookbooks}\label{cookbook}, welche die
Grundverwaltungseinheit darstellt. Jedes dieser Cookbooks, erfüllt einen
bestimmten Teilaspekt des Systems, (z.B. die Einrichtung eines Webservers
\href{https://github.com/opscode-cookbooks/apache2}{Apache}). Coobooks
können versioniert werden. Es können Abhängigkeiten zwischen mehreren
Cookbooks angegeben werden.
Eine physikalische oder virtuelle Maschine wird als \emph{node} bezeichnet.
Einer Node können \emph{Attributes}, \emph{Roles} und Cookbooks zugewiesen
werden. Roles bieten eine Möglichkeit Nodes, welche die gleiche
Aufgaben in einer Organisation besitzen, zu gruppieren (z.B. webserver).
Es gibt mehrere Möglichkeiten \emph{Chef} zu betreiben:
\begin{description}
\item[chef-solo] Dies ist die einfachste Ausführungsform. Hierbei wird lädt
\emph{Chef-client} alle nötigen Daten aus einem lokalen Verzeichnis. Diese
Form wurde für die Umsetzung der Aufgabenstellung.
\item[chef-server] Hierbei authentifiziert sich \emph{Chef-client} über eine
\emph{REST-Api} zu einem \emph{chef-server} mittels Zertifikaten. Auf diesem
wird das Chef-repo zentral verwaltet. Der Chef-client bekommt von diesem
alle nötigen für die zu provisionierende \emph{node}. Chef-server bietet
eine Weboberfläche für die Administrierung an. Die Attribute aller Nodes sind
über die eingebaute Suchemaschine \emph{Solr} durchsuchbar.
\item[Enterprise Chef/Hosted Enterprise Chef] Ähnlich wie Chef-server aber
bietet bessere Skalierbarkeit, rolenbasierte Benutzerverwaltung, bessere Überwachung,
Push-Deployment und eine verbesserte Weboberfläche~\cite{chefenterprise}
\end{description}
\textbf{Aufbau eines Cookbook}
\label{aufbau_eines_cookbook}
Hier ist die Ordnerstruktur des Cookbook apt (TODO Link) dargestellt:
\begin{lstlisting}
> apt-2.3.4/
> attributes/
default.rb
> files/
> default/
apt-proxy-v2.conf
> libraries/
helpers.rb
network.rb
> providers/
preference.rb
repository.rb
> recipes/
cacher-client.rb
cacher-ng.rb
default.rb
> resources/
preference.rb
repository.rb
> templates/
> debian-6.0/
> default/
01proxy.erb
acng.conf.erb
> ubuntu-10.04/
acng.conf.erb
CHANGELOG.md
metadata.json
metadata.rb
README.md
\end{lstlisting}
Die Verzeichnisnamen sind fest vorgeben. Jedes Verzeichnis hat seine eigene
Funktion. Dies hat den Vorteil, das man sich schnell in neuen Cookbooks zurecht
findet. Hier nochmal die einzelnen Verzeichnisse im Überblick:
\begin{description}
\item[attributes] setzt Standardwerte (Attribute) für das Cookbook. Dies
können Strings, Zahlen oder Arrays sein. Die gesetzten Attribute können in
Roles, Nodes oder anderen Cookbooks überschrieben werden. Hierfür gibt es
die Prioritäten default, force\_default, normal und override um das
überschreiben deterministisch zu machen. Attributes sind hierarchisch
organisiert. In der Regel ist die höchste Ebene der Name des Cookbooks.
(z.B. normal.mysql.client.packages)
\item[files] Hier können statische Dateien eingefügt werden, welche dann auf
dem Zielsystem in das entsprechende Verzeichnis kopiert werden können.
\item[libraries] In diesem Verzeichnis können Hilfsfunktionen definiert werden.
\item[resources] Ressourcen beschreiben, die Bestandteile eines Systems. Eine
Ressource kann z.B. eine Datei, ein Prozess oder ein Packet sein. Man
beschreibt, welchen Zustand (action in Chef genannt) diese Ressource haben
soll und Chef versucht diesen Zustand herzustellen. Chef liefert von Haus
viele wichtige Ressourcen mit. In Cookbooks kann man darüber hinaus eigene
Ressourcen definieren.
\item[providers] Während Ressourcen nur die Schnittstelle beschreiben, mit
allen Attributen, die gesetzt werden können, ist der Provider eine konkrete
Implementierung. Deswegen muss jede Ressource mindestens einen Provider
besitzen. Es kann mehrere Provider für eine Ressource geben, um zum Beispiel
um mehrere Plattformen/Betriebssysteme abzudecken (z.B. bei Packetmanagern
oder Initsystemen).
\item[recipes] In Recipes werden Ressourcen instantiiert, welche nötig sind
um die gewünschte Aufgabe zu erreichen. Dabei können Abhängigkeiten zwischen
diesen angegeben werden.
\item[templates] Häufig werden dynamisch generierte Dateien benötigt, um zum
Beispiel Konfigurationsdateien zu erzeugen. Chef bindet hierfür die
Templatesprache eRuby (Embedded Ruby) ein. Diese führt in den Templates
Rubycode, der sich zwischen den Tags \emph{<\%} und \emph{\%>} befindet, aus.
Dies erlaubt es Variablen zu interpolieren, sowie If-Statements und
Schleifen.
\item[metadata.rb] In dieser Datei kann der Name des Cookbook, die Version,
eine Beschreibung sowie Abhängigkeiten zu anderen Cookbooks angeben werden.
\end{description}
\textbf{Durchlauf eines Recipes}
\label{durchlauf_eines_recipes}
TODO Runlist
\textbf{Vergleich mit puppet}
\label{vergleich_mit_puppet}
% vim: set spell spelllang=de_de