Raspberry Pi 3 Model B Docker Schwarm Rechencluster

Viele bekannte Anwendungen lassen sich mittlerweile  über Container vom Betriebssystem isolieren. Die Open-Source-Software Docker ermöglicht diese Isolierung. Weiter Informationen zu Docker sind auf der Docker-Wikipedia-Seite hinterlegt. Da der Raspberry Pi als einzelnes Modul in Bezug auf die Leistung sehr begrenzt ist, kann der Aufbau eines Schwarmes zur Skalierung der Leistung   genutzt werden. Das Ergebnis ist ein kleiner Rechencluster oder Rechnerverbund.

Für die Umsetzung werden folgende Komponenten benötigt. Die Anzahl “n” bezieht sich auf die Anzahl der verwendeten Pi’s im Verbund.

  • n Raspberry Pi’s 3 Model B
  • n USB-Ports zur Energieversorgung mit mindestens 2A pro Port (mind. 10Watt)
  • n Netzwerkkabel
  • n 16Gb microSD-Karten
  • 1 Computer zur Konfiguration

Vorbereitung der SD-Karte

Zuerst muss die Aktuelle Version von Raspbian Jessie Lite als Image von folgender Quelle geladen werden:

RASPBIAN JESSIE LITE

(Das Lite-Image besitzt keine GUI und verbraucht somit weniger Ressourcen)

curl -O https://downloads.raspberrypi.org/raspbian_latest

Installation des Image unter Linux:

Mit dem Befehl  lsblk lassen sich alle angeschlossenen Speichermedien ausgeben. Der Pfad zum Speichermedium /dev/sde muss dabei jeweils angepasst werden:

$ sudo dd if=raspbian_latest of=/dev/sde bs=1m

Installation des Image unter Windows:

Bei Windows erfolgt die Installation mit dem Tool: Win32DiskImager.

Konfiguration nach dem ersten Bootvorgang:

Der erste Login erfolgt über: pi als Benutzername und raspberry als Passwort. Zu beachten ist, dass das standard Keayboard englisch ist, und somit “z” und “y” getauscht sind. Alle Konfigurationen auf der Kommandozeile werden im folgenden Abschnitt mit Hilfe des einsteiger freundlichen Kommandozeilen-Editor Nano vollzogen. Nano öffnet eine Datei mit dem Befehl: nano beispiel.txt speichern lassen sich Dateien mit Strg + O und schließen über Strg + X.

Einige grundlegende Einstellungen lassen sich jedoch auch über das raspbian Konfigurationsmenü festlegen.  Es wird mit dem Befehl sudo raspi-config aufgerufen. Zuerst einmal sollte das Tastenlayout auf deutsch umgestellt werden. Dies ist unter “Advanced Options” und “Change Keyboard Layout” möglich. Danach sollte das System über mit “Finish” rebootet werden.

Weitere vorzunehmende Einstellungen sind die:

  • Expansion des Dateisystems unter “Expand Filesystem”
  • Ändern des Passworts unter “Change User Password”
  • Ändern des Hostname unter “Advanced Options” und “Hostname” (Es empfiehlt sich eine Durchnummerierung der Module z.B. PiSchwarm1 ….)
  • Einschalten von SSH unter: “Advanced Options” und “SSH”

Vorzugsweise sollte noch die IP-Adresse des Raspberry Pi fortlaufend auf jedem Gerät konfiguriert werden. Hierfür sollte der DHCP-Server in Betrieb sein sudo service dhcpcd start und sudo systemctl enable dhcpcd. Die Konfiguration wird dabei an das Ende der folgender Datei geschrieben sudo nano /etc/dhcpcd.conf Anzuhängender Inhalt (Beispiel):

interface eth0
static ip_address=192.168.1.200/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Die /24 ist eine verkürzte Schreibweise für das Sub-netz 255.255.255.000

Remote SSH-Verbindung zum Raspberry Pi 3:

Zuballerst muss, soweit nicht bekannt die, die IP-Adresse des zu verbindenden Gerätes herausgefunden werden. Der Befehl ifconfig listet die Konfigurationen sämtlicher Schnittellen auf. Der erste Teil der Ausgabe ist dabei von Interesse:

pi@PiSwarm1:/ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:56:f2:03
          inet addr:192.168.1.201  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::53e6:c390:d7f7:7855/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:652 errors:0 dropped:184 overruns:0 frame:0
          TX packets:142 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:39858 (38.9 KiB)  TX bytes:22047 (21.5 KiB)

Die Adresse in diesem Beispiel ist somit: 192.168.1.201.

Terminal unter Linux / MAC OS:

Unter Linux / MAC OS ist der Raspberry Pi über folgenden Befehl im Terminal zu erreichen ssh pi@192.168.1.201 bei erfolgreicher  Verbindung kann man sich mit dem Passwort für den Benutzer Pi einloggen.

Putty unter Windows:

Unter Windows wird die Verbindung mit Hilfe des Tools Putty durchgeführt.  Dazu die Ziel-IP im Feld “Host-Name (or IP address)” und als Port die 22 eingeben. Der “Connection type” wird mit “SSH” gewählt und die Verbindung über den Button “open” gestartet. Unter “login as:” als “pi” mit dem entsprechenden Passwort anmelden.

Installation von Docker

Nun, da der Zugriff auf den Raspberry Pi im lokalen Netzwerk gegeben ist, kann mit der Installation von Docker begonnen werden. Ein von Docker bereitgestelltes Script ermöglicht die Installation mit dem Aufruf:

curl -sSL get.docker.com | sh

Der Docker Installationsprozess kann ein paar Minuten in Anspruch nehmen. Mit dem folgenden Befehl wird Docker automatisch mit dem Raspberry Pi gestartet:

sudo systemctl enable docker

Jetzt kann ein neustart durchgeführt und Docker mit dem Befehl: sudo systemctl start docker Docker gestartet werden. Damit Docker nicht nur unter dem Nutzer “root” sondern auch dem Nutzer “Pi” läuft muss dieser der Dockergruppe hinzugefügt werden: sudo usermod -aG docker pi.

Docker sollte nun für den Befehl docker version eine ähnliche Ausgabe bereitstellen:

pi@PiSwarm1:~ $ docker version
Client:
 Version:      1.12.5
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   7392c3b
 Built:        Fri Dec 16 03:23:36 2016
 OS/Arch:      linux/arm

Server:
 Version:      1.12.5
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   7392c3b
 Built:        Fri Dec 16 03:23:36 2016
 OS/Arch:      linux/arm

Mit dem Befehl docker info sollte unter dem Punkt “Swarm” noch die Ausgabe “inactive” ausgegeben werden.

Dies ändert sich durch den Aufruf von docker swarm init , welcher einen “Join-Token” generiert.

Aus allen anderen “Arbeiter-Pi’s” muss nun dieser Token-befehl des “Master-Pi’s” eingeben werden.

Mit dem Aufruf von docker node ls auf dem Master werden alle erfolgreich verknüpften Pi’s aufgelistet.