Installieren und Konfigurieren von Ansible unter Ubuntu 18.04

Einführung

Konfigurationsmanagementsysteme sollen Administratoren und Betriebsteams die Steuerung einer großen Anzahl von Servern erleichtern. Mit ihnen können Sie viele verschiedene Systeme von einem zentralen Ort aus automatisiert steuern.

Während für Linux-Systeme wie Chef und Puppet viele gängige Konfigurationsverwaltungssysteme verfügbar sind, sind diese häufig komplexer, als viele Menschen es wünschen oder benötigen. Ansible ist eine großartige Alternative zu diesen Optionen, da für den Start ein viel geringerer Overhead erforderlich ist.

In diesem Handbuch werden wir die Installation von Ansible auf einem Ubuntu 18.04-Server erläutern und einige Grundlagen für die Verwendung der Software erläutern.

Wie funktioniert Ansible?

Ansible konfiguriert die Clientcomputer auf einem Computer, auf dem die Ansible-Komponenten installiert und konfiguriert sind.

Es kommuniziert über normale SSH-Kanäle, um Informationen von Remote-Computern abzurufen, Befehle auszugeben und Dateien zu kopieren. Aus diesem Grund muss auf einem Ansible-System keine zusätzliche Software auf den Clientcomputern installiert werden.

Dies ist eine Möglichkeit, mit der Ansible die Verwaltung von Servern vereinfacht. Jeder Server, für den ein SSH-Port verfügbar ist, kann unabhängig von der Phase seines Lebenszyklus unter den Konfigurationsschirm von Ansible gestellt werden. Dies bedeutet, dass jeder Computer, den Sie über SSH verwalten können, auch über Ansible verwaltet werden kann.

Ansible verfolgt einen modularen Ansatz, der es einfach macht, die Funktionen des Hauptsystems zu erweitern, um mit bestimmten Szenarien fertig zu werden. Module können in jeder Sprache geschrieben werden und kommunizieren in Standard-JSON.

Konfigurationsdateien werden hauptsächlich im YAML-Datenserialisierungsformat geschrieben, da sie aussagekräftig sind und den gängigen Auszeichnungssprachen ähneln. Ansible kann mit Hosts entweder über Befehlszeilentools oder über seine Konfigurationsskripts, die als Playbooks bezeichnet werden, interagieren.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Zwei oder mehr Ubuntu 18.04-Server. Eine davon wird alsAnsible serververwendet, während der Rest alsAnsible hostsverwendet wird. Jeder Benutzer sollte einen Nicht-root-Benutzer mitsudo-Berechtigungen und eine konfigurierte Basis-Firewall haben. Sie können dies einrichten, indem Sie unserenInitial Server Setup Guide for Ubuntu 18.04 folgen. Beachten Sie, dass in den Beispielen in diesem Handbuch drei Ansible-Hosts angegeben sind. Die angezeigten Befehle und Konfigurationen können jedoch für eine beliebige Anzahl von Clients angepasst werden.

  • SSH-Schlüssel, die für den Benutzer von Nicht-rootauf Ihrem Ansible-Server generiert wurden. Befolgen Sie dazu Schritt 1 unseres Leitfadens zuHow to Set Up SSH Keys on Ubuntu 18.04. Für die Zwecke dieses Lernprogramms können Sie das Schlüsselpaar am Standardspeicherort (~/.ssh/id_rsa) speichern und müssen es nicht durch ein Kennwort schützen.

[[Schritt-1 - Installation von Ansible]] == Schritt 1 - Ansible installieren

Um Ansible zum Verwalten Ihrer verschiedenen Server verwenden zu können, müssen Sie die Ansible-Software auf mindestens einem Computer installieren.

Um die neueste Version von Ansible für Ubuntu zu erhalten, können Sie das PPA (Personal Package Archive) des Projekts zu Ihrem System hinzufügen. Bevor Sie dies tun, sollten Sie zunächst sicherstellen, dass das Paketsoftware-properties-commoninstalliert ist. Diese Software erleichtert die Verwaltung dieses und anderer unabhängiger Software-Repositorys:

sudo apt update
sudo apt install software-properties-common

Fügen Sie dann die Ansible-PPA hinzu, indem Sie den folgenden Befehl eingeben:

sudo apt-add-repository ppa:ansible/ansible

Drücken SieENTER, um die PPA-Addition zu akzeptieren.

Aktualisieren Sie als Nächstes den Paketindex Ihres Systems erneut, damit es über die im PPA verfügbaren Pakete informiert ist:

sudo apt update

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

sudo apt install ansible

Ihr Ansible-Server verfügt jetzt über die gesamte Software, die zur Verwaltung Ihrer Hosts erforderlich ist.

[[Schritt-2 - Konfigurieren des SSH-Zugriffs auf die Ansible-Hosts]] == Schritt 2 - Konfigurieren des SSH-Zugriffs auf die Ansible-Hosts

Wie bereits erwähnt, kommuniziert Ansible hauptsächlich über SSH mit Clientcomputern. Es kann zwar durchaus die kennwortbasierte SSH-Authentifizierung verarbeiten, die Verwendung von SSH-Schlüsseln trägt jedoch zur Vereinfachung bei.

Verwenden Sie auf Ihrem Ansible-Server den Befehlcat, um den Inhalt der öffentlichen SSH-Schlüsseldatei Ihres Nicht-Root-Benutzers in die Ausgabe des Terminals zu drucken:

cat ~/.ssh/id_rsa.pub

Kopieren Sie die resultierende Ausgabe in Ihre Zwischenablage, öffnen Sie ein neues Terminal und stellen Sie mit SSH eine Verbindung zu einem Ihrer Ansible-Hosts her:

ssh sammy@ansible_host_ip

Wechseln Sie zumroot-Benutzer des Clientcomputers:

su -

Öffnen Sie als Benutzer vonrootauthorized_keys im Verzeichnis~/.ssh:

nano ~/.ssh/authorized_keys

Fügen Sie in die Datei den SSH-Schlüssel Ihres Ansible-Serverbenutzers ein, speichern Sie die Datei und schließen Sie den Editor (drücken SieCTRL + X,Y, dannENTER). Führen Sie dann den Befehlexit aus, um zum Benutzer des Hosts zurückzukehren, der nicht -rootist:

exit

Da Ansible einen Python-Interpreter verwendet, der sich bei/usr/bin/python befindet, um seine Module auszuführen, müssen Sie Python 2 auf dem Host installieren, damit Ansible mit ihm kommunizieren kann. Führen Sie die folgenden Befehle aus, um den Paketindex des Hosts zu aktualisieren und das Paketpythonzu installieren:

sudo apt update
sudo apt install python

Anschließend können Sie den Befehlexit erneut ausführen, um die Verbindung zum Client zu schließen:

exit

Wiederholen Sie diesen Vorgang für jeden Server, den Sie mit Ihrem Ansible-Server steuern möchten. Als Nächstes konfigurieren wir den Ansible-Server so, dass er mithilfe derhosts-Datei von Ansible eine Verbindung zu diesen Hosts herstellt.

[[Schritt 3 - Einrichten von Ansible-Hosts]] == Schritt 3 - Einrichten von Ansible-Hosts

Ansible verfolgt alle Server, die es kennt, über einehosts-Datei. Wir müssen diese Datei zuerst einrichten, bevor wir mit unseren anderen Computern kommunizieren können.

Öffnen Sie die Datei mit den Berechtigungen vonsudowie folgt:

sudo nano /etc/ansible/hosts

In der Datei sehen Sie eine Reihe von Beispielkonfigurationen, die auskommentiert wurden (mit einem#vor jeder Zeile). Diese Beispiele funktionieren bei uns nicht wirklich, da die in den einzelnen Beispielen aufgeführten Hosts zusammengesetzt sind. Wir werden diese Beispiele jedoch in der Datei behalten, um uns bei der Konfiguration zu helfen, wenn wir in Zukunft komplexere Szenarien implementieren möchten.

Diehosts-Datei ist ziemlich flexibel und kann auf verschiedene Arten konfiguriert werden. Die Syntax sieht jedoch so aus:

[group_name]
alias ansible_host=your_server_ip

[.note] #Note: Mit der Veröffentlichung von Ansible Version 2.0 ersetzte die Konfigurationsvariableansible_host die ursprüngliche Variableansible_ssh_host. Wenn Sie eine ältere Version von Ansible verwenden, sollten Sie die ältere, längere Variable verwenden.
#

In diesem Beispiel istgroup_name ein Organisations-Tag, mit dem Sie mit einem Wort auf alle darunter aufgeführten Server verweisen können, währendalias nur ein Name ist, der auf einen bestimmten Server verweist.

In unserem Szenario stellen wir uns also drei Server vor, die wir mit Ansible steuern werden. Zu diesem Zeitpunkt können Sie vom Ansible-Server aus auf diese Server zugreifen, indem Sie Folgendes eingeben:

ssh root@ansible_host_ip

Sie sollten nicht zur Eingabe eines Kennworts aufgefordert werden, wenn Sie dies korrekt eingerichtet haben. Zu Demonstrationszwecken nehmen wir an, dass die IP-Adressen unserer Hosts203.0.113.1,203.0.113.2 und203.0.113.3 sind. Wir werden dies so einrichten, dass wir diese einzeln alshost1,host2 undhost3 oder als Gruppe mit dem Namenservers bezeichnen können.

Dies ist der Block, den wir unsererhosts-Datei hinzufügen sollten, um dies zu erreichen:

/etc/ansible/hosts

[servers]
host1 ansible_host=203.0.113.1
host2 ansible_host=203.0.113.2
host3 ansible_host=203.0.113.3

Hosts können mehreren Gruppen angehören und Gruppen können Parameter für alle ihre Mitglieder konfigurieren. Probieren wir das jetzt aus.

Wenn wir in unseren aktuellen Einstellungen versuchen, mit Ansible eine Verbindung zu einem dieser Hosts herzustellen, schlägt der Befehl fehl (vorausgesetzt, Sie arbeiten nicht als Root-Benutzer). Dies liegt daran, dass Ihr SSH-Schlüssel für den Benutzerrootauf den Remote-Systemen eingebettet ist und Ansible standardmäßig versucht, eine Verbindung als Ihr aktueller Benutzer herzustellen. Ein Verbindungsversuch wird diesen Fehler erhalten:

Outputhost1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

Auf dem Ansible-Server verwenden wir einen Benutzer namenssammy. Ansible versucht, mitssh sammy@server eine Verbindung zu jedem Host herzustellen. Dies funktioniert nicht, wenn sich der Benutzer vonsammynicht ebenfalls auf dem Remote-System befindet.

Wir können eine Datei erstellen, die allen Servern in der Gruppe "Server" anweist, eine Verbindung als Benutzer vonrootherzustellen.

Dazu erstellen wir ein Verzeichnis in der Ansible-Konfigurationsstruktur mit dem Namengroup_vars. In diesem Ordner können wir YAML-formatierte Dateien für jede Gruppe erstellen, die wir konfigurieren möchten:

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

YAML-Dateien beginnen mit "-". Vergessen Sie diesen Teil also nicht.

/etc/ansible/group_vars/servers

---
ansible_user: root

[.note] #Note: Ähnlich wie bei der Variablenansible_host hatansible_user die Variableansible_ssh_user durch die Version 2.0 ersetzt. Wenn Sie eine ältere Version von Ansible als 2.0 verwenden, müssen Sie die ältere, längere Variable verwenden.
#

Speichern und schließen Sie diese Datei, wenn Sie fertig sind.

Wenn Sie Konfigurationsdetails für jeden Server unabhängig von der Gruppenzuordnung angeben möchten, können Sie diese Details bei/etc/ansible/group_vars/all in eine Datei einfügen. Einzelne Hosts können konfiguriert werden, indem Dateien, die nach ihrem Alias ​​benannt sind, in einem Verzeichnis unter/etc/ansible/host_vars erstellt werden.

[[Schritt-4 -—- mit-einfachen-ansible-Befehlen]] == Schritt 4 - Verwenden von einfachen Ansible-Befehlen

Nachdem wir unsere Hosts eingerichtet und genügend Konfigurationsdetails vorliegen haben, um eine erfolgreiche Verbindung zu unseren Hosts herzustellen, können wir unseren allerersten Befehl ausprobieren.

Pingen Sie alle von Ihnen konfigurierten Server an, indem Sie Folgendes eingeben:

ansible -m ping all

Ping-Ausgabe

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Dies ist ein grundlegender Test, um sicherzustellen, dass Ansible eine Verbindung zu allen Hosts hat.

Dasall bedeutet alle Hosts. Genauso einfach können wir eine Gruppe angeben:

ansible -m ping servers

Wir könnten auch einen einzelnen Host angeben:

ansible -m ping host1

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

ansible -m ping host1:host2

Der-m ping-Teil des Befehls ist eine Anweisung an Ansible, das Ping-Modul zu verwenden. Dies sind im Wesentlichen Befehle, die Sie auf Ihren Remote-Hosts ausführen können. Das Ping-Modul funktioniert auf viele Arten wie das normale Dienstprogrammpingunter Linux, prüft jedoch stattdessen die Ansible-Konnektivität.

Das Ping-Modul akzeptiert eigentlich keine Argumente, aber wir können einen anderen Befehl versuchen, um zu sehen, wie das funktioniert. Wir übergeben Argumente an ein Skript, indem wir-a eingeben.

Mit dem Shell-Modul können wir einen Terminalbefehl an den Remote-Host senden und die Ergebnisse abrufen. Um zum Beispiel die Speichernutzung auf unserem Rechner host1 herauszufinden, können wir Folgendes verwenden:

ansible -m shell -a 'free -m' host1

Shell-Ausgabe

host1 | SUCCESS | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Swap:            0          0          0

Damit ist Ihr Ansible-Server konfiguriert und Sie können erfolgreich mit Ihren Hosts kommunizieren und diese steuern.

Fazit

In diesem Lernprogramm haben wir Ansible konfiguriert und überprüft, ob es mit jedem Host kommunizieren kann. Wir haben auch den Befehlansible verwendet, um einfache Aufgaben remote auszuführen.

Obwohl dies nützlich ist, haben wir in diesem Artikel nicht die leistungsstärkste Funktion von Ansible behandelt: Playbooks. Ansible Playbooks bieten eine leistungsstarke und einfache Möglichkeit, Serverkonfigurationen und Bereitstellungen auf mehreren Computern zu verwalten. Eine Einführung in Playbooks finden Sie unterthis guide. Darüber hinaus empfehlen wir Ihnen, dieofficial Ansible documentation zu überprüfen, um mehr über das Tool zu erfahren.