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

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.