Installieren und Konfigurieren von Ansible unter Ubuntu 16.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 der Aufwand für den Einstieg viel geringer ist.

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

Wie funktioniert Ansible?

Ansible konfiguriert Client-Computer von einem Computer aus, auf dem Ansible-Komponenten installiert und konfiguriert sind.

Es kommuniziert über normale SSH-Kanäle, um Informationen von entfernten Rechnern 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.

Jeder Computer, den Sie über SSH verwalten können, kann auch über Ansible verwaltet werden.

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 Clients entweder über Befehlszeilentools oder über die Konfigurationsskripte namens Playbooks interagieren.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu 16.04-Server mit einem Sudo-Nicht-Root-Benutzer und SSH-Schlüsseln, die Sie einrichten können, indem Siethis initial server setup tutorial folgen, einschließlich Schritt 4

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

Um mit der Untersuchung von Ansible zur Verwaltung unserer verschiedenen Server zu beginnen, müssen Sie die Ansible-Software auf mindestens einem Computer installieren. In diesem Abschnitt wird ein Ubuntu 16.04-Server verwendet.

Der beste Weg, um Ansible für Ubuntu zu erhalten, besteht darin, das PPA (Personal Package Archive) des Projekts zu Ihrem System hinzuzufügen. Wir können die Ansible-PPA hinzufügen, indem Sie den folgenden Befehl eingeben:

sudo apt-add-repository ppa:ansible/ansible

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

Als Nächstes müssen wir den Paketindex unseres Systems aktualisieren, damit er die in der PPA verfügbaren Pakete erkennt. Danach können wir die Software installieren:

sudo apt-get update
sudo apt-get install ansible

Wie oben erwähnt, kommuniziert Ansible hauptsächlich über SSH mit Clientcomputern. SSH-Schlüssel sind zwar durchaus in der Lage, die kennwortbasierte SSH-Authentifizierung zu verarbeiten, tragen jedoch zur Vereinfachung bei. Befolgen Sie die Anleitungen in den Voraussetzungen, um SSH-Schlüssel einzurichten, falls Sie dies noch nicht getan haben.

Wir haben jetzt die gesamte Software, die zur Verwaltung unserer Server über Ansible erforderlich ist.

[[Schritt-2 - Konfigurieren von Ansible-Hosts]] == Schritt 2 - Konfigurieren von Ansible-Hosts

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

Öffnen Sie die Datei mit folgenden Root-Rechten:

sudo nano /etc/ansible/hosts

Sie sehen eine Datei mit vielen Beispielkonfigurationen, von denen keine für uns funktioniert, da diese Hosts zusammengesetzt sind. Lassen Sie uns zu Beginn alle Zeilen in dieser Datei auskommentieren, indem Sie vor jeder Zeile ein "#" einfügen.

Wir werden diese Beispiele in der Datei behalten, um uns bei der Konfiguration zu helfen, wenn wir in Zukunft komplexere Szenarien implementieren möchten.

Sobald alle Zeilen auskommentiert sind, können wir beginnen, unsere tatsächlichen Hosts hinzuzufügen.

Die hosts-Datei ist ziemlich flexibel und kann auf verschiedene Arten konfiguriert werden. Die Syntax, die wir verwenden werden, sieht ungefähr so ​​aus:

Beispiel für eine Hosts-Datei

[group_name]
alias ansible_ssh_host=your_server_ip

Der Gruppenname ist ein organisatorisches Tag, mit dem Sie mit einem Wort auf alle unter ihm aufgelisteten Server verweisen können. Der Alias ​​ist nur ein Name, der auf diesen Server verweist.

In unserem Szenario stellen wir uns also drei Server vor, die wir mit Ansible steuern werden. Auf diese Server kann vom Ansible-Server aus zugegriffen werden, indem Sie Folgendes eingeben:

ssh root@your_server_ip

Sie sollten nicht zur Eingabe eines Kennworts aufgefordert werden, wenn Sie dies korrekt eingerichtet haben. Wir gehen davon aus, dass die IP-Adressen unserer Server192.0.2.1,192.0.2.2 und192.0.2.3 sind. Wir werden dies so einrichten, dass wir diese einzeln alshost1,host2 undhost3 oder als Gruppe alsservers bezeichnen können.

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

[servers]
host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.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 Root-Benutzer auf den Remote-Systemen eingebettet ist und Ansible standardmäßig versucht, eine Verbindung als Ihr aktueller Benutzer herzustellen. Ein Verbindungsversuch wird diesen Fehler erhalten:

Ansibler Verbindungsfehler

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

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

Wir können eine Datei erstellen, die allen Servern in der Gruppe "Server" mitteilt, dass sie eine Verbindung mit dem Root-Benutzer herstellen sollen.

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

Hier können wir unsere Konfiguration eintragen. YAML-Dateien beginnen mit "-". Vergessen Sie diesen Teil also nicht.

/etc/ansible/group_vars/servers

---
ansible_ssh_user: root

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 in einem Verzeichnis unter/etc/ansible/host_vars erstellt werden.

[[Schritt-3 -—- Verwenden-einfacher-Ansible-Befehle]] == Schritt 3 - Verwenden einfacher Ansible-Befehle

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.

Das "alles" 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 in vielerlei Hinsicht wie das normale Ping-Dienstprogramm in Linux, überprü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

Fazit

Inzwischen sollte Ihr Ansible-Server so konfiguriert sein, dass er mit den Servern kommuniziert, die Sie steuern möchten. Wir haben überprüft, dass Ansible mit jedem Host kommunizieren kann, und wir haben den Befehlansibleverwendet, 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. Wir haben mit Ansible eine hervorragende Grundlage für die Arbeit mit unseren Servern geschaffen. In einem zukünftigen Artikel wird jedoch noch ausführlicher darauf eingegangen, wie Sie mit Playbooks die Konfiguration Ihrer Remotecomputer automatisieren können.