Raspberry-Pi-Farm mit Ansible automatisieren

© Ivan Smuk, 123RF

Auf (m)ein Kommando

Geht es darum, mehrere Rechner mit einer zentralen Instanz parallel zu orchestrieren, leistet Ansible ganze Arbeit.

Das Framework Ansible [1] dient zum Orchestrieren von Services, der Artikel führt seinen Einsatz am Beispiel der Automation von Verwaltungsaufgaben auf Servern vor. Um die zu erledigenden Aufgaben zu beschreiben, verwendet das Tool die unter der GPL stehende Sprache YAML, eine vereinfachte, an XML angelehnte Sprache.

Um die Funktionsweise von Ansible zu demonstrieren, erledigen wir im Folgenden Verwaltungsaufgaben auf drei RasPis (Abbildung 1) vom PC aus. Auf jedem der drei Mini-Rechner installieren wir Raspbian "Jessie" Lite [2]. Nach dem Herunterladen des Images (Sie finden es auch auf der Heft-DVD) entpacken wir es und schreiben es auf die drei SD-Karten (Listing 1).

Abbildung 1: Ein gemeinsames Netzteil versorgt die drei zu einer Farm zusammengefassten Mini-Rechner mit Energie.

Listing 1

 

$ wget https://downloads.raspberrypi.org/raspbian_lite_latest
$ unzip ./raspbian_lite_latest
$ sudo dd if=./2017-04-10-raspbian-jessie-lite.img of=/dev/sdd

Um den Überblick zu behalten, bekommt jeder der drei RasPis einen eindeutigen Namen und eine feste IP-Adresse im lokalen Netzwerk. Die Tabelle "Beispielkonfiguration" zeigt das von uns verwendete Setup der Namen und Adressen. Der Kasten "Feste IP-Adresse zuweisen" zeigt, wie Sie einem Raspberry Pi eine feste IP-Adresse zuweisen.

Beispielkonfiguration

Name

IP-Adresse

pi1

192.168.3.71

pi2

192.168.3.72

pi3

192.168.3.73

Feste IP-Adresse zuweisen

Damit andere Rechner die auf einem Server laufenden Dienste dauerhaft erreichen, benötigt er zwingend eine feste IP-Adresse. Die IP-Konfiguration für den Raspberry Pi finden Sie in der Datei /etc/network/interfaces. Die Datei lässt sich nur als Root bearbeiten, weil sie für den Betrieb des Systems wichtige Einstellungen enthält. Sie öffnen sie entsprechend mit dem Aufruf sudo nano /etc/network/interfaces im Texteditor. Die notwendigen Änderungen entnehmen Sie Listing 2. Achten Sie darauf, für das lokale Netzwerk passende IP-Adressen zu wählen. Um die Konfiguration zu testen, starten Sie nach dem Sichern der Änderungen den RasPi neu und tippen im Terminal ip address.

Listing 2

 

auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.3.71
netmask 255.255.255.0
gateway 192.168.3.1
dns-nameservers 192.168.3.1

Da Ansible alle Kommandos via SSH absetzt, kommt es ohne zusätzliche Client-Installation auf den zu verwaltenden Rechnern aus. Für die Authentifizierung verwendet Ansible dabei das Public-Key-Verfahren. Dabei geht es von identischen Benutzerkonten auf dem Verwaltungsrechner und den Clients aus. Der entsprechende Nutzer muss die Berechtigung besitzen, sich auf den Clients per Key einzuloggen.

Im ersten Schritt gilt es also, auf allen Rechnern einen speziellen User für Ansible anzulegen. Um den Aufwand erst einmal niedrig zu halten, verwenden wir den auf den Clients bereits vorhandenen User pi. Daher müssen wir auf dem als Verwaltungsrechner dienenden Linux-Desktop ebenfalls einen User pi mit einem zugehörigen SSH-Schlüsselpaar anlegen.

Sie richten das entsprechende Konto mit dem Befehl sudo adduser pi ein (Listing 3). Dann wechseln Sie in das entsprechende Konto, was beispielsweise unter Ubuntu recht einfach über das Menü gelingt (Abbildung 2). Nach dem Anmelden generieren Sie das Schlüsselpaar, das Sie später zum Login auf den RasPis verwenden.

Abbildung 2: Ubuntu erlaubt das bequeme Wechseln des angemeldeten Nutzers über den System-Tray.

Listing 3

 

$ sudo adduser pi
Lege Benutzer »pi« an ...
Lege neue Gruppe »pi« (1001) an ...
Lege neuen Benutzer »pi« (1001) mit Gruppe »pi« an ...
Erstelle Home-Verzeichnis »/home/pi« ...
Kopiere Dateien aus »/etc/skel« ...
Geben Sie ein neues UNIX-Passwort ein:
Geben Sie das neue UNIX-Passwort erneut ein:
passwd: Passwort erfolgreich geändert
Benutzerinformationen für pi werden geändert.
Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert
        Vollständiger Name []:
        Zimmernummer []:
        Telefon geschäftlich []:
        Telefon privat []:
        Sonstiges []:
Sind diese Informationen korrekt? [J/n] j

Das System fragt beim Erzeugen der Schlüssel nach einer Passphrase, die den privaten Schlüssel vor unberechtigter Nutzung schützt. Da das Schlüsselpaar aber zum automatischen Login dient, beantworten Sie die Frage nach der Passphrase mit [Eingabe]. Das bewirkt, dass sich das Schlüsselpaar später ohne zusätzliche manuelle Eingabe der Passphrase verwenden lässt. Listing 4 zeigt, wie Sie den Schlüssel erzeugen. Das Tool legt die generierten Schlüssel automatisch im richtigen Verzeichnis an.

Listing 4

 

$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Created directory '/home/pi/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
38:19:8a:14:1f:49:fe:d5:69:e9:0f:de:87:9e:eb:61 pi@lin01
The key's randomart image is:
+--[ RSA 4096]----+
|  ..o.           |
|   +..   . o     |
|  . o . . =      |
| . . o = o       |
|  . . = S o      |
|       . . + .   |
|          . E .  |
|           o +   |
|           .=.   |
+-----------------+

Nun kopieren Sie den Public Key für den User pi per Scp auf die drei Mini-Rechner (Listing 5). Beim Kopieren erscheint eine Passwortabfrage der Zielrechner. Damit sind nun alle Vorbereitungen abgeschlossen, als nächsten Schritt installieren Sie Ansible auf dem Desktop-PC.

Listing 5

 

$ scp /home/pi/.ssh/id_rsa.pub 192.168.3.71:/home/pi/.ssh/authorized_keys
$ scp /home/pi/.ssh/id_rsa.pub 192.168.3.72:/home/pi/.ssh/authorized_keys
$ scp /home/pi/.ssh/id_rsa.pub 192.168.3.73:/home/pi/.ssh/authorized_keys

Ansible einrichten

Da Ansible ohne einen expliziten Client-Gegenpart auskommt, brauchen Sie es nur auf dem Linux-Desktop einzurichten, den Sie zum Verwalten verwenden möchten. Die Installation erfolgt unter Ubuntu mit den Kommandos aus Listing 6. Das erste fügt dem System das Ansible-Software-Repository hinzu. Das gewährleistet, dass Sie immer die aktuelle Version von Ansible installieren. Das zweite aktualisiert die Quellen, das dritte richtet schließlich die Software ein.

Listing 6

 

$ sudo apt-add-repository -y ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install -y ansible

Nach der Installation liegen unter /etc/ansible/ die Konfigurationsdateien für Ansible. Die Datei /etc/ansible/hosts enthält die Liste der Hosts, die Ansible verwalten soll. In unserem Beispielfall sieht die Datei wie in Listing 7 aus. Sie editieren die Datei mit dem Kommando sudo nano /etc/ansible/hosts.

Listing 7

 

[raspi]
192.168.3.71
192.168.3.72
192.168.3.73

Auf diesem Weg lassen sich auch verschiedene Gruppen oder Bereiche von Hosts definieren. Für einen ersten Versuch genügen jedoch die drei Beispiel-Hosts. Um zu testen, ob die Installation erfolgreich war, setzen Sie einen einfachen Ping-Befehl ab. Sollte die Ausgabe von jener aus Listing 8 abweichen, überprüfen Sie, ob alle vorherigen Schritte fehlerfrei funktionierten.

Listing 8

 

$ ansible all -m ping
192.168.3.73 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.3.71 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.3.72 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Nach dem Sicherstellen des fehlerfreien Setups sehen wir uns genau an, was Ansible leistet und wie es funktioniert. Das Ping-Kommando aus der erste Zeile von Listing 8 setzt sich aus folgenden Elementen zusammen: Direkt hinter dem Befehl ansible steht die Host-Gruppe, die Sie ansprechen möchten; all steht hier für alle Hosts aus der Datei /etc/ansible/hosts. Bei größeren Installationen sollten Sie sich aber genau überlegen, ob all eine gute Idee ist.

Die Option -m teilt Ansible mit, ein bestimmtes vordefiniertes Modul aufzurufen, in unserem Fall ping. Ansible bringt eine Vielzahl an Modulen für diverse Einsatzzwecke mit, aus denen Sie sich das für Ihren Anwendungsfall jeweils passende heraussuchen [3].

Module

Das Modul shell ruft, wie der Name andeutet, ein Shell-Kommando auf den Zielsystemen auf. Die Option -s bewirkt ein Ausführen der Befehle mit administrativen Rechten. Mit der Option -a geben Sie den eigentlichen Befehl an, den Sie auf den Zielrechnern ausführen möchten. Mit dem Shell-Modul lässt sich entsprechend schon eine Menge erreichen; vorwiegend aber Aufgaben, die sich mit einem Shell-Skript auch bewerkstelligen ließen.

Listing 9

 

$ ansible raspi -s -m shell -a 'apt-get update'
$ ansible raspi -s -m apt -a 'pkg=nginx state=installed update_cache=true'

Für das Beispiel aus der ersten Zeile von Listing 9 brauchen Sie etwas Geduld: Die Ausgabe erscheint erst, nachdem das Kommando komplett ausgeführt wurde, was bei apt-get update durchaus etwas länger dauert. Nehmen Sie die Ausgabe dieses Kommandos näher unter die Lupe, sticht dabei die Zeile [WARNING]: Consider using apt module rather than running apt-get ins Auge. Sie weist darauf hin, dass es für Apt bereits ein Ansible-Modul gibt, das man verwenden könnte.

Wie zu erwarten dient es dazu, Apt über Ansible auf den Zielrechnern zu steuern. Klicken Sie in der Liste der Ansible-Module [3] auf den entsprechenden Eintrag, erhalten Sie eine sehr detaillierte Beschreibung [4] über die Funktionen und Optionen des Moduls. Am Ende der Webseite finden Sie diverse Anwendungsbeispiele.

Um etwa den Nginx-Webserver auf den RasPi-Hosts zu installieren, genügt der Aufruf aus der zweiten Zeile von Listing 9. Er übergibt dem Apt-Modul den Paketnamen und den erwünschten Status. Rufen Sie den Befehl ein zweites Mal auf, merkt Ansible am Status, dass die Pakete bereits installiert sind, und richtet sie daher nicht erneut ein.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.