128 lines
5.7 KiB
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
|