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
|
|
schnell und reproduzierbar virtuelle Maschinen für Virtualbox und andere
|
|
Virtualsierungslösungen zu erstellen und zu starten. Die Einstellungen hierfür
|
|
werden in der Datei \texttt{Vagrantfile} hinterlegt, welche Vagrant beim Start
|
|
einliest. Vagrant kann Chef beim Erstellen von virtuellen Maschinen integrieren.
|
|
Zum Einsatz kam das Betriebssystem Ubuntu in der Version 12.04. Das Basisimage
|
|
hierfür wurde von \texttt{Chef}, der gleichnamigen Firma, bereitgestellt. Für
|
|
die Kommunikation mit Vagrant wurde die virtuelle Netzwerkkarte \texttt{eth0}
|
|
konfiguriert. Ein weitere Karte (\texttt{eth1}) wird für das interne virtuelle
|
|
Netzwerk zwischen den VMs zum Betreiben der Netzwerkdienste benötigt.
|
|
|
|
Vagrant bietet keine Optionen, ein virtuelles Netzwerk zu erstellen, ohne das
|
|
jeder VM eine IP-Adresse fest oder DHCP unmittelbar nach dem Start zugewiesen
|
|
wird. In dem genannten Netzwerk sollte allerdings DHCP von dem Head-Node bereit
|
|
gestellt werden. Deswegen waren zusätzliche Kommandozeilenargumente an den
|
|
Befehl \texttt{VBoxManage} im Vagrantfile nötig, welches von Vagrant genutzt
|
|
wird um Virtualbox zu verwalten. Dies schränkt die Nutzung allerdings auf den
|
|
Hypervisor Virtualbox ein.
|
|
|
|
Des weiteren wird Ruby auf dem Host benötigt, um beispielsweise die Tests
|
|
ausführen zu können. Auf Unix-Ähnlichen Systemen kann man diese
|
|
Programmiersprache 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 selbst geschriebenen 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 Berksfile angegeben (vergleichbar mit
|
|
\href{http://bundler.io}{Bundler} und Gemfiles in Ruby). Berkshelf unterstützt
|
|
dabei verschiedene Quellen (per API von der Communityseite von Chef, 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 Gemeinsame Ordner (shared folders) zwischen VM und
|
|
Host, müssen die \texttt{virtualbox\--client\--modules} in der VM installiert
|
|
sein. Diese sind in vielen Images bereits vorhanden, die es für Vagrant gibt.
|
|
Allerdings muss die Virtualbox-Version 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 der VM installiert das Plugin die gleiche Version des Modul in der VM. Wenn
|
|
Virtualbox mit Linux als Host-System ausgeführt wird, muss das Kernelmodule
|
|
\texttt{vboxdrv} geladen sein. Manche Linux-Distributionen installieren dieses
|
|
Module bereits während der Installation von Virtualbox. Auf Mac OS X und
|
|
Windows sind keine weiteren Schritte notwendig.
|
|
|
|
Beide Plugins werden mit 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.
|
|
|
|
Die Netzwerkdienste sollen die Protokolle DHCP, DNS und NTP bereitstellen. Es
|
|
wird wie im Praktikum zwischen \texttt{Head-Nodes} und \texttt{Compute-Nodes}
|
|
unterschieden. Die Head-Node bietet die genannten Dienste an. Die Compute-Nodes
|
|
fordern auf dem internen Netzwerk per DHCP eine IP-Adresse an und nutzen den
|
|
DNS- und NTP-Dienst der ihr zugewiesenen Head-Node.
|
|
|
|
Die Attribute für die Rollen und den Nodes wurden in JSON-Dateien in den
|
|
Verzeichnissen \texttt{roles/} und \texttt{nodes/} abgelegt. Es gibt je eine
|
|
Rollen-Datei für Compute-Nodes und Head-Nodes. In der aktuellen Konfiguration
|
|
erzeugt Vagrant eine Head-Node mit der FQDN \texttt{node0.lctp} und zwei
|
|
Compute-Nodes (\texttt{node1.lctp} und \texttt{node2.lctp}).
|
|
|
|
Es wurden fünf Cookbooks geschrieben:
|
|
\begin{description}
|
|
\item[bind]
|
|
Für Bereitstellung des DNS-Dienstes wird Named aus dem BIND-Packet
|
|
installiert. Das Cookbook richtet diesen Dienst ein und fügt die in den
|
|
Attributen 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 Wrapper um das
|
|
\href{https://github.com/redguide/network_interfaces}{network\_interfaces}
|
|
Cookbook. Wrapper-Cookbooks werden häufig dazu benutzt um bestehende
|
|
Cookbooks aus anderen Quellen um Funktionalität zu erweitern. Für
|
|
Compute-Nodes aktiviert das Cookbook für die DHCP in dem
|
|
virtuellen Netzwerk. Im Falle eines Head-Nodes wird eine statische
|
|
IP-Adresse gesetzt, der DNS-Server auf localhost festgelegt und
|
|
IP-Forwarding sowie Masquerading via iptables für den Router-Betrieb
|
|
aktiviert.
|
|
\item[ntp]
|
|
Dieses Cookbook richtet den NTP-Deamon ein, welcher die Zeit zwischen den
|
|
einzelnen Nodes synchronisiert.
|
|
\item[main]
|
|
Dieses Cookbook fasst alle oben genannten Cookbooks für Compute- und
|
|
Head-Node zusammen. Man könnte dies prinzipiell auch in den jeweiligen
|
|
Rollen erledigen. Rollen haben allerdings den Nachteil, dass diese
|
|
im Gegensatz zu Cookbooks nicht versionierbar sind 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] aktualisert die lokalen Paketlisten und den Paketcache.
|
|
\item[network\_interfaces] verwaltet Debian's Netzkonfiguration
|
|
\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_dihr zugewiesenen e
|