Wie man Ansible auf Ubuntu 20.04 installiert und konfiguriert

Einführung

Konfigurationsverwaltungssysteme sind darauf ausgelegt, den Prozess der Kontrolle großer Anzahlen von Servern für Administratoren und Betriebsteams zu optimieren. Sie ermöglichen es Ihnen, viele verschiedene Systeme automatisiert von einem zentralen Ort aus zu kontrollieren.

Obwohl es viele beliebte Konfigurationsverwaltungstools für Linux-Systeme gibt, wie zum Beispiel Chef und Puppet, sind diese oft komplexer, als viele Menschen möchten oder benötigen. Ansible ist eine großartige Alternative zu diesen Optionen, da es eine Architektur bietet, die keine spezielle Software auf den Knoten installiert erfordert. Stattdessen werden SSH zum Ausführen der Automatisierungsaufgaben und YAML-Dateien zur Definition der Bereitstellungsdetails verwendet.

In diesem Handbuch wird erläutert, wie Sie Ansible auf einem Ubuntu 20.04 Server installieren und einige Grundlagen zur Verwendung dieser Software erlernen können. Für eine höhere Übersicht über Ansible als Konfigurationsverwaltungstool verweisen wir auf Eine Einführung in die Konfigurationsverwaltung mit Ansible.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie:

  • Eine Ansible Control Node: Die Ansible Control Node ist die Maschine, die wir verwenden, um uns über SSH mit den Ansible Hosts zu verbinden und sie zu steuern. Ihre Ansible Control Node kann entweder Ihre lokale Maschine oder ein dedizierter Server sein, der Ansible ausführt. Diese Anleitung geht jedoch davon aus, dass Ihre Control Node ein Ubuntu 20.04-System ist. Stellen Sie sicher, dass die Control Node Folgendes hat:

    • Einen nicht-root Benutzer mit sudo-Berechtigungen. Um dies einzurichten, können Sie Schritte 2 und 3 unserer Anleitung zum Einrichten des Servers unter Ubuntu 20.04 befolgen. Beachten Sie jedoch, dass Sie, wenn Sie einen Remote-Server als Ihre Ansible Control Node verwenden, jeden Schritt dieser Anleitung befolgen sollten. Dadurch wird auf dem Server eine Firewall mit ufw konfiguriert und der externe Zugriff auf Ihr Nicht-Root-Benutzerprofil aktiviert, was dazu beiträgt, den Remote-Server sicher zu halten.
    • Ein mit diesem Benutzer verknüpftes SSH-Schlüsselpaar. Um dies einzurichten, können Sie Schritt 1 unserer Anleitung zum Einrichten von SSH-Schlüsseln unter Ubuntu 20.04 befolgen.
  • Ein oder mehrere Ansible-Hosts: Ein Ansible-Host ist eine Maschine, die von Ihrem Ansible-Kontrollknoten automatisiert wird. Dieser Leitfaden geht davon aus, dass Ihre Ansible-Hosts entfernte Ubuntu 20.04-Server sind. Stellen Sie sicher, dass jeder Ansible-Host Folgendes hat:

    • Den öffentlichen SSH-Schlüssel des Ansible-Kontrollknotens zum authorized_keys eines Systembenutzers hinzugefügt. Dieser Benutzer kann entweder root oder ein gewöhnlicher Benutzer mit sudo-Berechtigungen sein. Um dies einzurichten, können Sie Schritt 2 in So richten Sie SSH-Schlüssel unter Ubuntu 20.04 ein folgen.

Schritt 1 — Installation von Ansible

Um Ansible zur Verwaltung Ihrer Serverinfrastruktur zu nutzen, müssen Sie die Ansible-Software auf der Maschine installieren, die als Ansible-Kontrollknoten fungieren wird.

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

  1. sudo apt-add-repository ppa:ansible/ansible

Drücken Sie ENTER, wenn Sie zur Bestätigung der PPA-Hinzufügung aufgefordert werden.

Aktualisieren Sie anschließend den Paketindex Ihres Systems, damit es über die in das PPA aufgenommenen Pakete informiert ist:

  1. sudo apt update

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

  1. sudo apt install ansible

Ihr Ansible-Kontrollknoten verfügt nun über alle erforderlichen Softwarekomponenten zur Verwaltung Ihrer Hosts. Als nächstes werden wir erläutern, wie Sie Ihre Hosts zur Inventardatei des Kontrollknotens hinzufügen, damit er sie steuern kann.

Schritt 2 — Einrichten der Inventardatei

Die Bestandsdatei enthält Informationen über die Hosts, die Sie mit Ansible verwalten möchten. In der Bestandsdatei können Sie von einem bis zu mehreren hundert Servern einschließen, und die Hosts können in Gruppen und Untergruppen organisiert werden. Die Bestandsdatei wird auch häufig verwendet, um Variablen festzulegen, die nur für bestimmte Hosts oder Gruppen gültig sind, um sie in Playbooks und Vorlagen zu verwenden. Einige Variablen können auch die Art und Weise beeinflussen, wie ein Playbook ausgeführt wird, wie z.B. die ansible_python_interpreter Variable, die wir gleich sehen werden.

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

  1. sudo nano /etc/ansible/hosts

Hinweis: Obwohl Ansible in der Regel eine Standard-Bestandsdatei unter etc/ansible/hosts erstellt, können Sie Bestandsdateien an einem beliebigen Ort erstellen, der Ihren Bedürfnissen besser entspricht. In diesem Fall müssen Sie den Pfad zu Ihrer benutzerdefinierten Bestandsdatei mit dem Parameter -i angeben, wenn Sie Ansible-Befehle und Playbooks ausführen. Die Verwendung von Bestandsdateien pro Projekt ist eine bewährte Praxis, um das Risiko zu minimieren, ein Playbook auf der falschen Gruppe von Servern auszuführen.

Die standardmäßige Bestandsdatei, die von der Ansible-Installation bereitgestellt wird, enthält eine Reihe von Beispielen, die Sie als Referenz für die Einrichtung Ihres Bestands verwenden können. Das folgende Beispiel definiert eine Gruppe namens [servers] mit drei verschiedenen Servern, die jeweils durch einen benutzerdefinierten Alias identifiziert werden: server1, server2 und server3. Ersetzen Sie die markierten IP-Adressen 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 legt den Host-Parameter ansible_python_interpreter fest, der für alle in diesem Inventar enthaltenen Hosts gültig ist. Dieser Parameter stellt sicher, dass der Remote-Server den Python 3-Interpreter /usr/bin/python3 anstelle von /usr/bin/python (Python 2.7) verwendet, der auf aktuellen Ubuntu-Versionen nicht vorhanden ist.

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

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

  1. ansible-inventory --list -y

Sie sehen eine Ausgabe ähnlich wie diese, 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 – Verbindungstest

Nachdem Sie die Inventardatei eingerichtet haben, um Ihre Server einzuschließen, ist es an der Zeit zu überprüfen, ob Ansible eine Verbindung zu diesen Servern herstellen und Befehle über SSH ausführen kann.

In diesem Handbuch verwenden wir das Ubuntu root-Konto, da dies in der Regel 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, dieses Konto stattdessen zu verwenden.

Sie können das Argument -u verwenden, um den Remote-Benutzer des Systems anzugeben. Wenn dies nicht angegeben wird, versucht Ansible, sich als aktueller Benutzer des Steuerknotens zu verbinden.

Von Ihrem lokalen Rechner oder Ansible-Steuerknoten aus führen Sie Folgendes aus:

  1. ansible all -m ping -u root

Mit diesem Befehl wird das integrierte ping-Modul von Ansible verwendet, um einen Konnektivitätstest auf allen Knoten in Ihrem Standard-Inventar auszuführen und sich als root zu verbinden. Das ping-Modul überprüft:

  • ob die Hosts erreichbar sind;
  • ob Sie gültige SSH-Anmeldeinformationen haben;
  • ob die Hosts Ansible-Module mit Python ausführen können.

Sie sollten eine ähnliche Ausgabe wie diese 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 über Ansible eine Verbindung zu diesen Servern über SSH herstellen, werden Sie aufgefordert, die Echtheit der Hosts zu bestätigen, mit denen Sie über Ansible verbunden sind. Geben Sie bei Aufforderung yes ein und drücken Sie dann ENTER, um zu bestätigen.

Sobald Sie eine Antwort "pong" von einem Host erhalten, bedeutet dies, dass Sie Ansible-Befehle und Playbooks auf diesem Server ausführen können.

Hinweis: Wenn Sie keine erfolgreiche Antwort von Ihren Servern erhalten, überprüfen Sie unsere Anleitung zum Ansible-Spickzettel für weitere Informationen zur Ausführung von Ansible-Befehlen mit verschiedenen Verbindungsoptionen.

Schritt 4 – Ausführen von Ad-Hoc-Befehlen (optional)

Nachdem Sie bestätigt haben, dass Ihr Ansible-Steuerungsknoten mit Ihren Hosts kommunizieren kann, können Sie Ad-Hoc-Befehle und Playbooks auf Ihren Servern ausführen.

Jeder Befehl, den Sie normalerweise auf einem entfernten Server über SSH ausführen würden, kann mit Ansible auf den in Ihrer Inventardatei angegebenen Servern ausgeführt werden. Als Beispiel können Sie die Festplattenauslastung auf allen Servern mit dem folgenden Befehl überprüfen:

  1. 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 markierte Befehl df -h kann durch beliebige Befehle ersetzt werden, die Sie möchten.

Sie können auch Ansible-Module über Ad-Hoc-Befehle ausführen, ähnlich wie wir zuvor das ping-Modul zum Testen der Verbindung verwendet haben. Hier ist zum Beispiel, wie wir das apt-Modul verwenden können, um die neueste Version von vim auf allen Servern in Ihrer Inventardatei zu installieren:

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

Sie können auch einzelne Hosts sowie Gruppen und Untergruppen ansprechen, wenn Sie Ansible-Befehle ausführen. Zum Beispiel können Sie die uptime aller Hosts in der Gruppe server überprüfen:

  1. ansible servers -a "uptime" -u root

Sie können mehrere Hosts angeben, indem Sie sie mit Doppelpunkten trennen:

  1. 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 überprüfen.

Schlussfolgerung

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

Sobald Sie bestätigt haben, dass Sie in der Lage sind, sich mit Ihrer Infrastruktur von einer zentralen Ansible-Controller-Maschine aus zu verbinden und diese zu steuern, können Sie beliebige Befehle oder Playbooks auf diesen Hosts ausführen.

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-ubuntu-20-04