Website-Suche

So installieren und konfigurieren Sie Ansible auf Ubuntu 16.04


Verwenden Sie nicht Ubuntu 16.04?Wählen Sie eine andere Version oder Distribution.

Einführung

Konfigurationsmanagementsysteme sind darauf ausgelegt, die Kontrolle über eine große Anzahl von Servern für Administratoren und Betriebsteams zu erleichtern. Sie ermöglichen es, viele verschiedene Systeme auf automatisierte Weise von einem zentralen Standort aus zu steuern.

Obwohl es viele beliebte Konfigurationsverwaltungssysteme für Linux-Systeme gibt, wie Chef und Puppet, sind diese oft komplexer, als viele Menschen wollen oder benötigen. Ansible ist eine großartige Alternative zu diesen Optionen, da es einen viel geringeren Aufwand für den Einstieg hat.

In diesem Leitfaden werden wir besprechen, wie man Ansible auf einem Ubuntu 16.04-Server installiert und einige Grundlagen der Verwendung der Software durchgehen.

Wie funktioniert Ansible?

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

Es kommuniziert über normale SSH-Kanäle, um Informationen von entfernten Rechnern abzurufen, Befehle auszuführen und Dateien zu kopieren. Aufgrund dessen benötigt ein Ansible-System keine zusätzliche Software auf den Client-Computern.

Dies ist eine Möglichkeit, wie Ansible die Verwaltung von Servern vereinfacht. Jeder Server, der einen offenen SSH-Port hat, kann unter Ansible’s Konfigurationsdach gebracht werden, unabhängig davon, in welchem Stadium seines Lebenszyklus er sich befindet.

Jeden Computer, den Sie über SSH verwalten können, können Sie auch über Ansible verwalten.

Ansible verfolgt einen modularen Ansatz, der es einfach macht, die Funktionalitäten des Hauptsystems zu nutzen, um mit spezifischen Szenarien umzugehen. Module können in jeder Sprache geschrieben werden und kommunizieren über standardisiertes JSON.

Konfigurationsdateien werden hauptsächlich im YAML-Datenserialisierungsformat geschrieben, aufgrund seiner ausdrucksstarken Natur und seiner Ähnlichkeit zu beliebten Auszeichnungssprachen. Ansible kann über Befehlszeilentools oder über seine Konfigurationsskripte, die Playbooks genannt werden, mit Clients 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, den Sie einrichten können, indem Sie diesem Tutorial zur ersten Servereinrichtung folgen, einschließlich Schritt 4

Schritt 1 — Ansible installieren

Um zu beginnen, Ansible als Mittel zur Verwaltung unserer verschiedenen Server zu erkunden, müssen wir die Ansible-Software auf mindestens einer Maschine installieren. Für diesen Abschnitt werden wir einen Ubuntu 16.04-Server verwenden.

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

sudo apt-add-repository ppa:ansible/ansible

Drücken Sie ENTER, um die PPA-Hinzufügung zu akzeptieren.

Als Nächstes müssen wir den Paketindex unseres Systems aktualisieren, damit er die im 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 in erster Linie über SSH mit Client-Computern. Während es sicherlich die Fähigkeit hat, passwortbasierte SSH-Authentifizierung zu handhaben, helfen SSH-Schlüssel dabei, die Dinge einfach zu halten. Sie können dem im Abschnitt "Voraussetzungen" verlinkten Tutorial folgen, um SSH-Schlüssel einzurichten, falls Sie dies noch nicht getan haben.

Wir haben jetzt alle erforderliche Software, um unsere Server über Ansible zu verwalten.

Schritt 2 — Konfiguration der Ansible-Hosts

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

Öffnen Sie die Datei mit Root-Rechten so:

sudo nano /etc/ansible/hosts

Sie werden eine Datei sehen, die viele Beispielkonfigurationen enthält, von denen keine tatsächlich für uns funktionieren wird, da diese Hosts erfunden sind. Um also zu beginnen, kommentieren wir alle Zeilen in dieser Datei aus, indem wir vor jede Zeile ein "# " setzen.

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

Sobald alle Zeilen auskommentiert sind, können wir mit dem Hinzufügen unserer tatsächlichen Hosts beginnen.

Die Hosts-Datei ist recht flexibel und kann auf verschiedene Weise konfiguriert werden. Die Syntax, die wir jedoch verwenden werden, sieht ungefähr so aus:

[group_name]
alias ansible_ssh_host=your_server_ip

Der Gruppenname ist ein organisatorisches Tag, das es Ihnen ermöglicht, auf alle unter ihm aufgeführten Server mit einem Wort zu verweisen. Das Alias ist nur ein Name, um auf diesen Server zu verweisen.

Also stellen wir uns in unserem Szenario vor, dass wir drei Server haben, die wir mit Ansible steuern werden. Auf diese Server kann vom Ansible-Server aus zugegriffen werden, indem man Folgendes eingibt:

ssh root@your_server_ip

Sie sollten nicht nach einem Passwort gefragt werden, wenn Sie dies korrekt eingerichtet haben. Wir gehen davon aus, dass die IP-Adressen unserer Server 192.0.2.1, 192.0.2.2 und 192.0.2.3 sind. Wir richten dies so ein, dass wir auf diese einzeln als host1, host2 und host3 oder als Gruppe als servers verweisen 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 in mehreren Gruppen sein und Gruppen können Parameter für alle ihre Mitglieder konfigurieren. Lassen Sie uns das nun ausprobieren.

Mit unseren aktuellen Einstellungen würde der Befehl fehlschlagen, wenn wir versuchen würden, eine Verbindung zu einem dieser Hosts mit Ansible herzustellen (vorausgesetzt, Sie arbeiten nicht als Root-Benutzer). Dies liegt daran, dass Ihr SSH-Schlüssel auf den entfernten Systemen für den Root-Benutzer eingebettet ist, und Ansible standardmäßig versucht, sich als Ihr aktueller Benutzer zu verbinden. Ein Verbindungsversuch würde diesen Fehler erzeugen:

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

Auf dem Ansible-Server verwenden wir einen Benutzer namens demo. Ansible wird versuchen, sich mit ssh demo@server mit jedem Host zu verbinden. Dies wird nicht funktionieren, wenn der Benutzer demo nicht auf dem entfernten System vorhanden ist.

Wir können eine Datei erstellen, die allen Servern in der Gruppe „servers“ sagt, sich mit dem Benutzer root zu verbinden.

Um dies zu tun, werden wir im Ansible-Konfigurationsstrukturverzeichnis ein Verzeichnis namens group_vars erstellen. 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

Wir können unsere Konfiguration hier hineinstellen. YAML-Dateien beginnen mit „—“, also stellen Sie sicher, dass Sie diesen Teil nicht vergessen.

---
ansible_ssh_user: root

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

Wenn Sie Konfigurationsdetails für jeden Server angeben möchten, unabhängig von der Gruppenmitgliedschaft, können Sie diese Details in einer Datei unter /etc/ansible/group_vars/all speichern. Einzelne Hosts können konfiguriert werden, indem Dateien in einem Verzeichnis unter /etc/ansible/host_vars erstellt werden.

Schritt 3 — Verwendung einfacher Ansible-Befehle

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

Pingen Sie alle Server, die Sie konfiguriert haben, indem Sie Folgendes eingeben:

ansible -m ping all
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 all seinen Hosts hat.

Das „alle“ bedeutet alle Hosts. Wir könnten genauso gut 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 Grunde 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, prüft jedoch stattdessen die Ansible-Konnektivität.

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

Das “shell”-Modul ermöglicht es uns, einen Terminalbefehl an den Remote-Host zu senden und die Ergebnisse abzurufen. Zum Beispiel könnten wir, um die Speichernutzung auf unserem host1-Rechner herauszufinden, Folgendes verwenden:

ansible -m shell -a 'free -m' host1
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

Bis jetzt sollten Sie Ihren Ansible-Server so konfiguriert haben, dass er mit den Servern kommunizieren kann, die Sie steuern möchten. Wir haben überprüft, dass Ansible mit jedem Host kommunizieren kann, und wir haben den ansible-Befehl verwendet, um einfache Aufgaben aus der Ferne auszuführen.

Obwohl dies nützlich ist, haben wir in diesem Artikel nicht das leistungsfähigste Merkmal von Ansible behandelt: Playbooks. Wir haben eine großartige Grundlage für die Arbeit mit unseren Servern über Ansible geschaffen, aber die Hauptarbeit wird in einem zukünftigen Artikel behandelt, wenn wir zeigen, wie man Playbooks verwendet, um die Konfiguration Ihrer Remote-Computer zu automatisieren.