Tutorial

Installieren und Konfigurieren von Ansible unter Ubuntu 20.04

UbuntuConfiguration ManagementAnsibleUbuntu 20.04

Einführung

Konfigurationsmanagement-Systeme dienen dazu, Administratoren und Bedienerteams die Kontrolle einer größeren Zahl von Servern zu erleichtern. Somit können Sie viele verschiedene Systeme automatisch von einem zentralen Ort aus steuern.

Es gibt zwar viele beliebte Konfigurationsmanagement-Tools für Linux-Systeme (wie Chef und Puppet). Diese sind jedoch oft komplexer als gewünscht oder benötigt. Ansible stellt eine gute Alternative zu diesen Optionen dar, da es eine Architektur aufweist, bei der keine spezielle Software auf Knoten installiert werden muss. Vielmehr werden Automatisierungsaufgaben und YAML-Dateien über SSH ausgeführt, um die Bereitstellungsdetails zu definieren.

In diesem Leitfaden werden wir Ihnen erläutern, wie sich Ansible auf einem Ubuntu 20.04-Server installieren lässt, und uns Grundlagenkenntnisse zur Nutzung dieser Software ansehen. Eine übergeordnete Übersicht über Ansible als Konfigurationsmanagement-Tool finden Sie in Einführung in das Configuration Management mit Ansible.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

  • Einen Ansible-Steuerknoten: Der Ansible-Steuerknoten ist jener Rechner, den wir zum Verbinden mit und Steuern der Ansible-Hosts über SSH nutzen werden. Ihr Ansible-Steuerknoten kann entweder Ihr lokaler Rechner oder ein spezieller Server zur Ausführung von Ansible sein. In dieser Anleitung gehen wir jedoch davon aus, dass Ihr Steuerknoten ein Ubuntu 20.04-System ist. Stellen Sie sicher, dass der Steuerknoten Folgendes aufweist:

    • einen Nicht-root-Benutzer mit sudo-Berechtigungen. Um diesen Benutzer einzurichten, können Sie Schritt 2 und 3 unseres Leitfadens zur Ersteinrichtung des Servers für Ubuntu 20.04 folgen. Beachten Sie jedoch, dass Sie bei Verwendung eines Remoteservers als Ansible-Steuerknoten jeden einzelnen Schritt dieser Anleitung befolgen müssen. Dabei konfigurieren wir mit ufw eine Firewall auf dem Server und aktivieren externen Zugriff auf Ihr Nicht-root-Benutzerprofil. Beides trägt dazu bei, den Remoteserver zu schützen.
    • Ein SSH-Schlüsselpaar, das diesem Benutzer zugeordnet ist. Um das Schlüsselpaar einzurichten, können Sie Schritt 1 unseres Leitfadens zum Einrichten von SSH-Schlüsseln unter Ubuntu 20.04 folgen.
  • Einen oder mehrere Ansible-Hosts: Ein Ansible-Host ist jeder Rechner, für dessen Automatisierung Ihr Ansible-Steuerknoten konfiguriert ist. In diesem Leitfaden gehen wir davon aus, dass Ihre Ansible-Hosts Ubuntu 20.04-Remoteserver sind. Stellen Sie sicher, dass jeder Ansible-Host über Folgendes verfügt:

    • Den öffentlichen SSH-Schlüssel des Ansible-Steuerknotens, der den authorized_keys eines Systembenutzers hinzugefügt wurde. Dieser Benutzer kann entweder ein root- oder ein normaler Benutzer mit sudo-Berechtigungen sein. Um dieses Element einzurichten, können Sie Schritt 2 von Einrichten von SSH-Schlüsseln unter Ubuntu 20.04 folgen.

Schritt 1 — Installieren von Ansible

Um Ansible für die Verwaltung Ihrer Serverinfrastruktur nutzen zu können, müssen Sie die Ansible-Software auf dem Rechner installieren, der als Ansible-Steuerknoten dienen wird. Wir nutzen dafür die standardmäßigen Ubuntu-Repositorys.

Aktualisieren Sie zunächst den Paketindex Ihres Systems mit:

  • sudo apt update

Nach diesem Update können Sie die Ansible-Software installieren mit:

  • sudo apt install ansible

Drücken Sie Y, wenn Sie zur Bestätigung der Installation aufgefordert werden.

Ihr Ansible-Steuerknoten verfügt nun über die gesamte zur Verwaltung Ihrer Hosts erforderliche Software. Als Nächstes werden wir uns um die Einrichtung einer Inventardatei kümmern, damit Ansible mit Ihren verwalteten Knoten kommunizieren kann.

Schritt 2 — Einrichten der Inventardatei

Die Inventardatei enthält Informationen über die Hosts, die Sie mit Ansible verwalten werden. Sie können in Ihre Inventardatei einen bis mehrere hundert Server einschließen; Hosts lassen sich in Gruppen und Untergruppen anordnen. Die Inventardatei wird oft auch zum Festlegen von Variablen genutzt, die nur für bestimmte Hosts oder Gruppen gültig sein sollen, um in Playbooks und Vorlagen zum Einsatz zu kommen. Einige Variablen können sich auch auf die Ausführung eines Playbooks auswirken, wie beispielsweise die Variable ansible_python_interpreter, die wir in einem Moment kennenlernen werden.

Um den Inhalt Ihres standardmäßigen Ansible-Inventars zu bearbeiten, öffnen Sie die Datei /etc/ansible/hosts mit Ihrem bevorzugten Texteditor in Ihrem Ansible-Steuerknoten:

  • sudo nano /etc/ansible/hosts

Anmerkung: Ansible erstellt zwar typischerweise eine standardmäßige Inventardatei unter etc/ansible/hosts, doch können Sie Inventardateien bei Bedarf auch an jedem anderen Ort erstellen. In diesem Fall müssen Sie mit dem Parameter -i den Pfad zu Ihrer benutzerdefinierten Inventardatei angeben, wenn Ansible-Befehle und Playbooks ausgeführt werden. Die Verwendung von Inventardateien für einzelne Projekte ist eine empfehlenswerte Praxis, um das Risiko zu verringern, dass ein Playbook auf den falschen Servern ausgeführt wird.

Die bei der Ansible-Installation bereitgestellte Standardinventardatei enthält eine Reihe von Beispielen, die Sie als Referenz zur Einrichtung Ihres Inventars verwenden können. Das folgende Beispiel definiert eine Gruppe namens [servers] mit drei verschiedenen Servern darin, die jeweils durch einen benutzerdefinierten Alias identifiziert werden: server1, server2 und server3. Achten Sie darauf, die hervorgehobenen IP-Adressen durch die IP-Adressen Ihrer Ansible-Hosts zu ersetzen.

/etc/ansible/hosts
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Die Untergruppe all:vars legt den ansible_python_interpreter-Hostparameter fest, der für alle Hosts in diesem Inventar gültig ist. Dieser Parameter stellt sicher, dass der Remote-Server die ausführbare Datei /usr/bin/python3 anstelle von /usr/bin/python (Python 2.7) verwendet, die in neuen Ubuntu-Versionen nicht mehr vorhanden sind.

Wenn Sie fertig sind, speichern und schließen Sie die Datei, indem Sie STRG+X und dann Y sowie ENTER drücken, um Ihre Änderungen zu bestätigen.

Wenn Sie das Inventar überprüfen möchten, können Sie Folgendes ausführen:

  • ansible-inventory --list -y

Sie sehen eine Ausgabe, die in etwa wie folgt aussieht, jedoch Ihre eigene Serverinfrastruktur enthält (wie in der Inventardatei definiert):

Output
all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}

Nachdem Sie Ihre Inventardatei konfiguriert haben, haben Sie nun alles, was Sie benötigen, um die Verbindung zu Ihren Ansible-Hosts zu testen.

Schritt 3 — Testen der Verbindung

Nach der Einrichtung der Inventardatei zur Einbindung Ihrer Server werden wir überprüfen, ob Ansible eine Verbindung mit diesen Servern herstellen und Befehle über SSH ausführen kann.

Wir nutzen für diesen Leitfaden das Ubuntu-root-Konto, da es in der Regel das einzige Konto ist, das auf neu erstellten Servern standardmäßig verfügbar ist. Wenn Ihre Ansible-Hosts bereits über einen regulären sudo-Benutzer verfügen, werden Sie dazu aufgefordert, stattdessen dieses Konto zu nutzen.

Sie können das Argument -u verwenden, um den Remote-Systembenutzer anzugeben. Bei fehlender Angabe wird Ansible versuchen, sich auf dem Kontrollknoten als Ihr aktueller Systembenutzer zu verbinden.

Führen Sie von Ihrem lokalen Rechner oder Ansible-Steuerknoten Folgendes aus:

  • ansible all -m ping -u root

Dieser Befehl verwendet das integrierte ping-Modul von Ansible, um einen Verbindungstest für alle Knoten aus Ihrem Standardinventar auszuführen. Die Verbindung wird dabei als root hergestellt. Das ping-Modul wird testen:

  • ob Hosts zugänglich sind;
  • ob Sie über gültige SSH-Anmeldedaten verfügen;
  • ob Hosts Ansible-Module mit Python ausführen können.

Sie sollten in etwa folgende Ausgabe sehen:

Output
server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }

Wenn Sie zum ersten Mal über SSH eine Verbindung mit diesen Servern herstellen, werden Sie aufgefordert, die Authentizität der Hosts zu bestätigen, mit denen Sie über Ansible eine Verbindung herstellen. Geben Sie in der Eingabeaufforderung yes ein und drücken Sie dann ENTER zur Bestätigung.

Sobald Sie von einem Host einen "pong" zurückerhalten, sind Sie bereit, Ansible-Befehle und -Playbooks auf diesem Server auszuführen.

Anmerkung: Wenn Sie von Ihren Servern keine erfolgreiche Antwort erhalten, können Sie unseren Ansible-Spickzettel konsultieren, um zu erfahren, wie sich Ansible-Befehle mit verschiedenen Verbindungsoptionen ausführen lassen.

Schritt 4 — Ausführen von Ad-hoc-Befehlen (optional)

Nachdem Sie bestätigt haben, dass Ihr Ansible-Steuerknoten mit Ihren Hosts kommunizieren kann, können Sie mit der Ausführung von Ad-hoc-Befehlen und Playbooks auf Ihren Servern beginnen.

Alle Befehle, die Sie normalerweise auf einem Remoteserver über SSH ausführen würden, können mit Ansible auf den in Ihrer Inventardatei angegebenen Servern ausgeführt werden. Beispielsweise können Sie die Festplattennutzung auf allen Servern überprüfen mit:

  • ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...

Der hervorgehobene Befehl df -h kann durch einen beliebigen Befehl Ihrer Wahl ersetzt werden.

Sie können Ansible-Module auch über Ad-hoc-Befehle ausführen, ähnlich wie zuvor mit dem ping-Modul zum Testen der Verbindung. Wir können beispielsweise das apt-Modul nutzen, um auf allen Servern in Ihrem Inventar die neueste Version von vim zu installieren:

  • ansible all -m apt -a "name=vim state=latest" -u root

Außerdem können Sie bei der Ausführung von Ansible-Befehlen gezielt einzelne Hosts sowie Gruppen und Untergruppen auswählen. So würden Sie beispielsweise die Verfügbarkeit der einzelnen Hosts in der Gruppe Server überprüfen:

  • ansible servers -a "uptime" -u root

Wir können mehrere Hosts angeben, indem wir diese mit Doppelpunkten trennen:

  • ansible server1:server2 -m ping -u root

Weitere Informationen zur Verwendung von Ansible, einschließlich der Ausführung von Playbooks zum Automatisieren der Servereinrichtung, finden Sie in unserem Ansible-Referenzleitfaden.

Zusammenfassung

In diesem Leitfaden haben Sie Ansible installiert und eine Inventardatei eingerichtet, um von einem Ansible-Steuerknoten ausAd-hoc-Befehle auszuführen.

Nachdem Sie überprüft haben, dass Sie Ihre Infrastruktur von einem zentralen Ansible-Steuerknoten aus verbinden und verwalten können, können Sie auf diesen Hosts beliebige Befehle oder Playbooks ausführen.

Weitere Informationen zur Verwendung von Ansible finden Sie in unserem Ansible-Spickzettel.

0 Comments

Creative Commons License