Wie man Ansible auf Ubuntu 20.04 installiert und konfiguriert

Konfigurationsmanagementsysteme sind darauf ausgelegt, den Prozess der Verwaltung einer großen Anzahl von Servern für Administratoren und Betriebsteams zu vereinfachen. Sie ermöglichen es, viele verschiedene Systeme automatisiert von einem zentralen Standort aus zu steuern.

Während es viele beliebte Tools für das Konfigurationsmanagement unter Linux gibt, wie Chef und Puppet, sind diese oft komplexer, als viele benötigen. Ansible ist eine großartige Alternative zu diesen Optionen, da es eine Architektur bietet, die keine spezielle Software auf den Nodes erfordert. Es verwendet SSH, um die Automatisierungsaufgaben auszuführen, und YAML-Dateien, um Bereitstellungsdetails zu definieren.

In diesem Leitfaden besprechen wir, wie man Ansible auf einem Ubuntu-20.04-Server installiert und gehen auf einige Grundlagen zur Verwendung dieser Software ein.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Ansible-Control-Node: Der Ansible-Control-Node ist der Rechner, den wir verwenden, um eine Verbindung zu den Ansible-Hosts herzustellen und sie über SSH zu steuern. Ihr Control-Node kann entweder Ihr lokaler Rechner oder ein Server sein, der für das Ausführen von Ansible reserviert ist. In diesem Leitfaden wird davon ausgegangen, dass Ihr Control-Node ein Ubuntu-20.04-System ist. Stellen Sie sicher, dass der Control-Node über Folgendes verfügt:
    • Einen Nicht-Root-Benutzer mit Sudo-Rechten. Beachten Sie jedoch, dass Sie, wenn Sie einen Remote-Server als Ihren Ansible-Control-Node verwenden, alle Schritte in diesem Leitfaden befolgen sollten. Dadurch konfiguriert man eine Firewall mit ufw auf dem Server und ermöglicht den externe Zugriff auf Ihr Nicht-Root-Benutzerprofil , was beides zur Sicherheit des Remote-Servers beiträgt.
    • Einen SSH-Schlüsselpaar, das diesem Benutzer zugeordnet ist.
  • Einen oder mehrere Ansible-Hosts: Ein Ansible-Host ist jeder Rechner, den Ihr Ansible-Control-Node automatisieren soll. In diesem Leitfaden wird davon ausgegangen, dass Ihre Ansible-Hosts Remote-Ubuntu-20.04-Server sind. Stellen Sie sicher, dass jeder Ansible-Host Folgendes hat:
    • Den öffentlichen SSH-Schlüssel des Ansible-Control-Nodes, der den authorized_keys eines Systembenutzers hinzugefügt wurde. Dieser Benutzer kann entweder Root oder ein regulärer Benutzer mit Sudo-Rechten sein. Wie dies eingerichtet wird, erfahren Sie in Schritt 2 der Anleitung zur Einrichtung von SSH-Schlüsseln unter Ubuntu 20.04.

Schritt 1 — Installation von Ansible

Um Ansible als ein Mittel zur Verwaltung Ihrer Serverinfrastruktur zu verwenden, müssen Sie die Ansible-Software auf dem Rechner installieren, der als Ansible-Control-Node dient.

Führen Sie auf Ihrem Control-Node den folgenden Befehl aus, um das offizielle PPA (Personal Package Archive) des Projekts in die Liste der Paketquellen Ihres Systems aufzunehmen:

sudo apt-add-repository ppa:ansible/ansible

Drücken Sie ENTER, wenn Sie aufgefordert sind, um das PPA hinzuzufügen.

Aktualisieren Sie anschließend den Paketindex Ihres Systems, damit er die in dem neu hinzugefügten PPA verfügbaren Pakete erkennt:

Nach dieser Aktualisierung können Sie die Ansible-Software mit folgendem Befehl installieren:

Ihr Ansible-Control-Node verfügt jetzt über die gesamte erforderliche Software, um Ihre Hosts zu verwalten. Im nächsten Schritt besprechen wir, wie Sie Ihre Hosts zur Inventardatei des Control-Nodes hinzufügen, damit er diese steuern kann.

Schritt 2 — Einrichten der Inventardatei

Die Inventardatei enthält Informationen über die Hosts, die Sie mit Ansible verwalten möchten. Sie können darin von einem bis zu mehreren Hundert Servern eintragen. Hosts können in Gruppen und Untergruppen organisieren…

Man verwendet die Inventardatei auch häufig, um Variablen festzulegen, die nur für bestimmte Hosts oder Gruppen gültig sind, damit sie in Playbooks und Vorlagen Verwendung findet. Einige Variablen können auch sie Ausführung eines Playbook beeinflussen, wie die Variable ansible_python_interpreter, die wir gleich sehen.

Um den Inhalt Ihrer Standard-Ansible-Inventardatei zu bearbeiten, öffnen Sie die Datei /etc/ansible/hosts mit Ihrem bevorzugten Texteditor auf Ihrem Ansible-Control-Node:

sudo nano /etc/ansible/hosts

Hinweis:

Obwohl Ansible typischerweise eine Standard-Inventardatei unter /etc/ansible/hosts erstellt, können Sie Inventardateien an jedem beliebigen Ort erstellen, der Ihren Anforderungen besser entspricht. In diesem Fall müssen Sie den Pfad zu Ihrer benutzerdefinierten Inventardatei mit dem Parameter -i angeben, wenn Sie Ansible-Befehle und Playbooks ausführen. Die Verwendung projektbezogener Inventardateien ist eine gute Praxis, um das Risiko zu minimieren, ein Playbook auf der falschen Servergruppe auszuführen.

Die Standard-Inventardatei, die von der Ansible-Installation bereitgestellt ist, enthält eine Reihe von Beispielen, die Sie als Referenz für die Einrichtung Ihrer Inventardatei verwenden können. Im folgenden Beispiel wird eine Gruppe namens [servers] definiert, die drei verschiedene Server enthält, die jeweils durch einen benutzerdefinierten Alias identifiziert werden: server1, server2 und server3. Ersetzen Sie die hervorgehobenen IPs durch die IP-Adressen Ihrer Ansible-Hosts:

/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 setzt den Host-Parameter ansible_python_interpreter, der für alle Hosts in diesem Inventar gültig ist. Dieser Parameter stellt sicher, dass der Remote-Server das Python-3-Executable /usr/bin/python3 anstelle von /usr/bin/python (Python 2.7) verwendet, das in neueren Ubuntu-Versionen nicht mehr vorhanden ist.

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

Wann immer Sie Ihr Inventar überprüfen möchten, können Sie folgenden Befehl ausführen:

ansible-inventory --list -y

Sie werden eine Ausgabe ähnlich der folgenden sehen, die jedoch Ihre eigene Serverinfrastruktur enthält, wie sie in Ihrer Inventardatei definiert ist:

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: {}

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

Schritt 3 — Verbindung testen

Nachdem Sie die Inventardatei eingerichtet haben, um Ihre Server einzubeziehen, ist es an der Zeit zu überprüfen, ob Ansible in der Lage ist, eine Verbindung zu diesen Servern herzustellen und Befehle über SSH auszuführen.

Für diesen Leitfaden verwenden wir das Ubuntu-Root-Konto, da dies typischerweise das einzige Konto ist, das standardmäßig auf neu erstellten Servern verfügbar ist. Wenn Ihre Ansible-Hosts bereits einen regulären Sudo-Benutzer erstellt haben, wird empfohlen, stattdessen dieses Konto zu verwenden.

Sie können das Argument -u verwenden, um den Benutzer des Remote-Systems anzugeben. Wenn dieser nicht angegeben wird, versucht Ansible, eine Verbindung als Ihr aktueller Systembenutzer auf dem Control-Node herzustellen.

Führen Sie von Ihrem lokalen Rechner oder Control-Node folgenden Befehl aus:

ansible all -m ping -u root

Dieser Befehl verwendet das integrierte Ping-Modul von Ansible, um einen Verbindungstest auf allen Nodes aus Ihrem Standard-Inventar durchzuführen, indem er sich als Root verbindet. Das Ping-Modul testet:

  • ob Hosts erreichbar sind;
  • ob gültige SSH-Anmeldedaten vorliegen;
  • ob Hosts in der Lage sind, Ansible-Module mithilfe von Python auszuführen.

Sie sollten eine ähnliche Ausgabe erhalten:

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

Wenn Sie zum ersten Mal eine Verbindung zu diesen Servern über SSH herstellen, werden Sie aufgefordert, die Authentizität der Hosts, mit denen Sie sich über Ansible verbinden, zu bestätigen. Geben Sie bei Aufforderung yes ein und drücken Sie ENTER, um zu bestätigen.

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

Hinweis: Wenn Sie keine erfolgreiche Antwort von Ihren Servern erhalten, lesen Sie unseren Ansible-Cheat-Sheet-Leitfaden, um weitere Informationen zu erhalten, wie Ansible-Befehle mit verschiedenen Verbindungsoptionen ausgeführt werden können.

Schritt 4 — Ad-hoc-Befehle ausführen (optional)

Nachdem Sie bestätigt haben, dass Ihr Ansible-Control-Node in der Lage ist, mit Ihren Hosts zu kommunizieren, können Sie beginnen, Ad-hoc-Befehle und Playbooks auf Ihren Servern auszuführen.

Jeder Befehl, den Sie normalerweise über SSH auf einem Remote-Server ausführen würden, kann mit Ansible auf den Servern ausgeführt werden, die in Ihrer Inventardatei angegeben sind. Als Beispiel können Sie die Speicherplatznutzung auf allen Servern mit folgendem Befehl überprüfen:

ansible all -a "df -h" -u root

Ausgabe:

server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
...

Der hervorgehobene Befehl df -h kann durch jeden beliebigen Befehl ersetzt werden, den Sie ausführen möchten.

Sie können auch Ansible-Module über Ad-hoc-Befehle ausführen, ähnlich wie wir zuvor das Ping-Modul für Verbindungstests verwendet haben. Zum Beispiel können Sie das apt-Modul verwenden, um die neueste Version von vim auf allen Servern in Ihrem Inventar zu installieren:

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

Sie können auch einzelne Hosts sowie Gruppen und Untergruppen bei der Ausführung von Ansible-Befehlen anvisieren. Zum Beispiel können Sie die Betriebszeit jedes Hosts in der Gruppe servers überprüfen:

ansible servers -a "uptime" -u root

Wir können auch mehrere Hosts angeben, indem wir sie durch Doppelpunkte trennen:

ansible server1:server2 -m ping -u root

Für weitere Informationen zur Verwendung von Ansible, einschließlich der Ausführung von Playbooks zur Automatisierung der Servereinrichtung, können Sie unseren Ansible-Referenzleitfaden einsehen.

Fazit

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

Sobald Sie bestätigt haben, dass Sie in der Lage sind, Ihre Infrastruktur von einem zentralen Ansible-Control-Rechner aus zu steuern, können Sie beliebige Befehle oder Playbooks auf diesen Hosts ausführen.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: