142 lines
6.7 KiB
TeX
142 lines
6.7 KiB
TeX
\subsection{Einrichtung der Netzwerkdienste}
|
|
\label{sub:einrichtung-der-netzwerkdienste}
|
|
|
|
Für die Provisionierung der Netzwerkdienste wurde
|
|
\href{http://vagrantup.com}{Vagrant} verwendet. Dies ist ein Programm, um auf
|
|
der Basis von Virtualbox und anderen Virtualisierungslösungen schnell und
|
|
reproduzierbar virtuelle Maschinen zu starten. Die Einstellungen hierfür werden
|
|
in der Datei \emph{Vagrantfile} hinterlegt, welche Vagrant beim Start einliest.
|
|
Vagrant kann Chef beim Erstellen von virtuellen Maschinen integrieren. Es
|
|
bietet Optionen, mit welchen Einstellungen neue virtuelle Maschinen
|
|
provisioniert werden sollen. Zum Einsatz kam das Betriebssystem Ubuntu in der
|
|
Version 12.04. Das Basisimage hierfür wurde von \emph{Chef}, der gleichnamigen
|
|
Firma, bereitgestellt. Für die Kommunikation mit Vagrant wurde das
|
|
Netzwerkinterface \emph{eth0} konfiguriert. Ein weiteres Netzwerkinterface
|
|
(\emph{eth1}) wird für das interne virtuelle Netzwerk zwischen den VMs zum
|
|
Betreiben der Netzwerkdienste benötigt. Vagrant bietet für diese erweiterten
|
|
Einstellungen keine Optionen. Um diese dennoch zu übernehmen, waren spezielle
|
|
Kommandozeilenargumente an den Befehl \emph{VBoxManage} nötig, welches von
|
|
Vagrant für Virtualbox genutzt wird. Dies schränkt die Nutzung allerdings auf
|
|
den Hypervisor Virtualbox ein. Vagrant bietet die Möglichkeit, neben
|
|
Provisionierungsystemen auch Shellskripte auszuführen. Diese wurde genutzt, um
|
|
Chef auf die, zum damaligen Zeitpunkt, aktuellste Version 11.8.2 zu
|
|
aktualisieren.
|
|
|
|
Desweiteren wird Ruby auf dem Host benötigt, um beispielsweise die Tests
|
|
ausführen zu können. Auf Unix-Ähnlichen Systemen kann dies mit dem Befehl:
|
|
|
|
\shellcmd{curl -sSL https://get.rvm.io | bash -s stable}
|
|
|
|
installiert werden. Auf dem Betriebssystem Windows kann auf den
|
|
\href{http://rubyinstaller.org/}{RubyInstaller} zurückgegriffen werden. Um die
|
|
benötigten Ruby-Bibliotheken zu installieren, müssen folgende 2 Befehle im
|
|
Projektverzeichnis ausgeführt werden:
|
|
|
|
\shellcmd{gem install bundler}
|
|
|
|
\shellcmd{bundle install}
|
|
|
|
Zur Verwaltung der externen und internen Cookbooks wurde die
|
|
Abhängigkeitsverwaltung \href{http://berkshelf.com}{Berkshelf} verwendet. Bei
|
|
diesem werden die zu ladenden Cookbooks und die gewünschte Version in einer
|
|
Datei namens Berkssfile angegeben (vergleichbar mit
|
|
\href{http://bundler.io/}{Gemfiles} in Ruby). Berkshelf unterstützt dabei
|
|
verschiedene Quellen (per Api von der Communityseite von Opscode, Git, lokal)
|
|
und kann Abhängigkeiten zu anderen Cookbooks auflösen. Um die Cookbooks initial
|
|
zu laden, muss der Befehl:
|
|
|
|
\shellcmd{berks install}
|
|
|
|
im Projektverzeichnis ausgeführt werden.
|
|
|
|
Für das Zusammenspiel mit Vagrant gibt es das Plugin
|
|
\href{https://github.com/berkshelf/vagrant-berkshelf}{vagrant-berkshelf}, so
|
|
dass die von Berkshelf verwalteten Cookbooks auch in Vagrant zur Verfügung
|
|
stehen.
|
|
|
|
Für bestimmte Funktionen, wie geteilte Ordner zwischen VM und Host, müssen die
|
|
\emph{virtualbox-client-modules} in der VM installiert sein. Diese sind in
|
|
meisten vielen Images vorhanden, die es für Vagrant gibt. Allerdings muss die
|
|
Virtualboxversion des Host mit der Version in der VM übereinstimmen. Abhilfe
|
|
schafft das Vagrantplugin
|
|
\href{https://github.com/dotless-de/vagrant-vbguest}{vagrant-vbguest}. Beim
|
|
Start installiert das Plugin die die gleiche Version des Modules in der VM.
|
|
Wenn Virtualbox mit Linux als Hostsystem ausgeführt wird, sollte das
|
|
Kernelmodule \emph{vboxdrv} geladen sein. Manche Linux-Distributionen
|
|
installieren dieses Module bereits während der Installation von Virtualbox.
|
|
Auf MacOS X und Windows sind keine weiteren Schritte notwendig.
|
|
|
|
Beide Plugins werden den Befehlen:
|
|
|
|
\shellcmd{vagrant plugin install vagrant-vbguest}
|
|
|
|
\shellcmd{vagrant plugin install vagrant-berkshelf}
|
|
|
|
installiert.
|
|
|
|
Gestartet wird die VM mit dem Befehl:
|
|
|
|
\shellcmd{vagrant up}
|
|
|
|
Während des ersten Starts wird die VM mit Chef provisioniert. Später kann Chef
|
|
erneut mit Befehl:
|
|
|
|
\shellcmd{vagrant provision}
|
|
|
|
gestartet werden:
|
|
|
|
Als Netzwerkdienste wurden die Protokolle DHCP, DNS und NTP gewählt. Die VMs
|
|
wurden in die zwei Gruppen \emph{Headnodes}und \emph{Computenodes} geteilt. Die
|
|
Headnode bietet die genannten Dienste an. Die Computenodes fordern auf dem
|
|
internen Netzwerk per DHCP eine IP-Adresse an und nutzen den DNS- und NTP-Dienst
|
|
der jeweiligen Headnode.
|
|
|
|
Die Attributes der Roles und der Node wurden in JSON-Dateien in den
|
|
Verzeichnissen \emph{roles/} und \emph{nodes/} abgelegt. Es gibt je eine
|
|
Role-Datei für Computenodes und Headnodes. In der aktuellen Konfiguration
|
|
erzeugt Vagrant eine Headnode mit der FQDN \emph{node0.lctp} und zwei
|
|
Computenodes (\emph{node1.lctp} und \emph{node2.lctp}).
|
|
|
|
Für das Deployment wurden fünf Cookbooks geschrieben:
|
|
\begin{description}
|
|
\item[bind]
|
|
Als DNS-Server wurde bind gewählt. Das Cookbook richtet diesen Dienst ein
|
|
und fügt, die in den Attributes konfigurierten, DNS-Einträge zu den
|
|
entsprechenden Zonen hinzu.
|
|
\item[dhcp]
|
|
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.
|
|
\item[lctp-network] Dieses Cookbook ist ein Wrappercookbook um das
|
|
\href{https://github.com/redguide/network_interfaces}{network\_interfaces}
|
|
Cookbook. Wrappercookbooks werden häufig dazu benutzt um bestehende Cookbooks
|
|
aus anderen Quellen um Funktionalität zu erweitern. In diesem Fall aktiviert
|
|
das Cookbook für die Computenodes DHCP auf dem interen Netzwerkinterface.
|
|
Auf den Headnodes wird eine statische IP-Adresse gesetzt, der DNS-Server auf
|
|
localhost festgelegt und IP-Forwarding sowie Masquerading via iptables für
|
|
den Routerbetrieb aktiviert.
|
|
\item[ntp]
|
|
Dieses Cookbook richtet den NTP-Deamon ein, welcher die Zeit zwischen den
|
|
einzelnen Knoten synchron halten soll.
|
|
\item[main]
|
|
Dieses Cookbook fasst alle oben genannten Cookbooks für Compute- und
|
|
Headnode zusammen. Man könnte dies prinzipiell auch in den jeweiligen
|
|
Rollen erledigen. Rollen in Chef haben allerdings den Nachteil, dass diese
|
|
nicht versionierbar und (bei Chef-Server) über alle Umgebungen identisch
|
|
sind. Somit ist eine Trennung zwischen Test- und Produktivumgebung
|
|
schwierig.
|
|
\end{description}
|
|
|
|
Es wurden folgende externen Cookbooks verwendet:
|
|
\begin{description}
|
|
\item[apt] bringt die lokalen Paketquellen auf den aktuellen Stand und
|
|
aktualisiert den Paketcache.
|
|
\item[network\_interfaces] verwaltet Debians Netzkonfiguration
|
|
/etc/network/interfaces.
|
|
\item[minitest-handler] Sammelt alle Tests in den Cookbooks und führt diese
|
|
nach der Provisionierung aus (siehe~\ref{minitest_handler}).
|
|
\end{description}
|
|
|
|
% vim: set spell spelllang=de_de
|