Installieren und Konfigurieren von Ansible unter Ubuntu 14.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 14.04-Computer 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.

Installieren Sie Ansible unter Ubuntu 14.04

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 eine Ubuntu 14.04 VPS-Instanz 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.

Um dies effektiv zu tun, müssen wir das Paket "+ software-properties-common " installieren, mit dem wir problemlos mit PPAs arbeiten können. (Dieses Paket hieß in älteren Ubuntu-Versionen ` python-software-properties`.)

sudo apt-get update
sudo apt-get install software-properties-common

Sobald das Paket installiert ist, können wir die Ansible-PPA hinzufügen, indem wir den folgenden Befehl eingeben:

sudo apt-add-repository ppa:ansible/ansible

Drücken Sie die EINGABETASTE, um den PPA-Zusatz 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

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

SSH-Schlüssel einrichten

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.

Wir können SSH-Schlüssel auf zwei verschiedene Arten einrichten, je nachdem, ob Sie bereits einen Schlüssel haben, den Sie verwenden möchten. Wir gehen davon aus, dass die Server, die Sie verwalten möchten, DigitalOcean-Tröpfchen sind.

Erstellen Sie ein neues SSH-Schlüsselpaar

Wenn Sie noch kein SSH-Schlüsselpaar haben, das Sie für die Ansible-Verwaltung verwenden möchten, können Sie jetzt eines auf Ihrem Ansible-VPS erstellen.

Wir erstellen ein SSH-Schlüsselpaar in unserem Ansible-Droplet, um uns bei den Hosts zu authentifizieren, die es verwalten wird.

Erstellen Sie als Benutzer, mit dem Sie Ansible steuern, ein RSA-Schlüsselpaar, indem Sie Folgendes eingeben:

ssh-keygen

Sie werden aufgefordert, den Dateispeicherort des erstellten Schlüsselpaars, eine Passphrase und die Passphrasenbestätigung anzugeben. Drücken Sie die EINGABETASTE, um die Standardwerte zu übernehmen.

Ihre neuen Schlüssel sind im Verzeichnis + ~ / .ssh + Ihres Benutzers verfügbar. Der öffentliche Schlüssel (derjenige, den Sie freigeben können) heißt + id_rsa.pub +. Der private Schlüssel (derjenige, den Sie sicher aufbewahren) heißt + id_rsa +.

Sie können sie zu Ihrem DigitalOcean-Kontrollfeld hinzufügen, damit Sie Ihren SSH-Schlüssel in neu erstellte Droplets einbetten können. Auf diese Weise kann Ihr Ansible-Droplet ohne weitere Authentifizierung sofort in Ihre neuen Droplets übertragen werden.

Klicken Sie dazu im linken Navigationsmenü auf den Link „SSH Keys“. Klicken Sie im neuen Bildschirm oben rechts auf die Schaltfläche "SSH-Schlüssel hinzufügen":

image: https: //assets.digitalocean.com/articles/basic_ansible/add_ssh.png [DigitalOcean add key]

Geben Sie den Namen, den Sie diesem Schlüssel zuordnen möchten, in das obere Feld ein. Geben Sie auf Ihrer Ansible VPS-Instanz Folgendes ein, um den Inhalt Ihres öffentlichen Schlüssels abzurufen:

cat ~/.ssh/id_rsa.pub

Beispiel öffentlicher Schlüssel

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Die Zeichenfolge, die Ihnen zurückgegeben wird, müssen Sie in das zweite Feld in der DigitalOcean-Systemsteuerung einfügen:

Klicken Sie auf "Create SSH Key" (SSH-Schlüssel erstellen), um Ihren Schlüssel zum Control Panel hinzuzufügen. Wenn Sie jetzt ein neues Droplet erstellen, können Sie Ihren öffentlichen SSH-Schlüssel in den neuen Server einbetten und so mit Ihrer Ansible-Instanz kommunizieren. Sie müssen nur den Schlüssel im Abschnitt "Optionale SSH-Schlüssel hinzufügen" des Droplet-Erstellungsprozesses auswählen:

image: https://assets.digitalocean.com/articles/basic_ansible/embed_key.png [DigitalOcean-Einbettungsschlüssel]

Übertragen Sie ein vorhandenes SSH-Schlüsselpaar an Ansible

Wenn Sie bereits ein SSH-Schlüsselpaar haben, mit dem Sie sich bei Ihren Droplets authentifizieren, können Sie die Anmeldeinformationen auf Ihr neues Ansible-Droplet übertragen, anstatt ein neues Paar zu erstellen. Dies hat den Vorteil, dass es automatisch mit allen Servern funktioniert, die Sie bereits für die Verwendung des Schlüssels konfiguriert haben.

Rufen Sie auf dem Computer, auf dem Sie die SSH-Schlüsselauthentifizierung für Ihre Droplets konfiguriert haben, den öffentlichen Schlüssel ab, indem Sie Folgendes eingeben:

cat ~/.ssh/id_rsa.pub

Beispiel öffentlicher Schlüssel

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Auf Ihrem Ansible-Server müssen Sie ein verstecktes Verzeichnis zum Speichern Ihrer Schlüssel erstellen. Nennen Sie es "+ .ssh +", damit das SSH-Programm weiß, wo es zu finden ist:

mkdir ~/.ssh

Wir sollten den Zugriff auf dieses Verzeichnis sperren, damit nur Sie es betreten oder darauf schreiben können:

chmod 700 ~/.ssh

Wechseln Sie nun in das Verzeichnis und öffnen Sie eine Datei mit dem Namen "+ id_rsa.pub +" in Ihrem Texteditor:

cd ~/.ssh
nano id_rsa.pub

Fügen Sie die Ausgabe Ihres öffentlichen Schlüssels von Ihrem Heimcomputer in diese Datei ein:

Beispiel id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Speichern und schließen Sie die Datei. Wir werden sicherstellen, dass diese Datei die richtigen Berechtigungen hat, indem wir Folgendes eingeben:

chmod 644 id_rsa.pub

Geben Sie nun auf Ihrem lokalen Computer, der für den SSH-Schlüsselzugriff konfiguriert ist, Folgendes ein:

cat ~/.ssh/id_rsa

Beispiel für einen privaten Schlüssel

-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----

Die Ausgabe wird ziemlich lang sein.

Wieder in Ihrem Ansible-Droplet müssen wir eine neue Datei im Verzeichnis + ~ / .ssh + erstellen:

nano id_rsa

Fügen Sie die Ergebnisse des vorherigen Befehls auf Ihrem lokalen Computer ein:

id_rsa

-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----

Stellen Sie sicher, dass Sie die erste und die letzte Markierungslinie einfügen. Sie sind erforderlich, damit die Schlüsseldatei gültig ist. Speichern und schließen Sie die Datei.

Wir müssen die Berechtigungen ändern, um diese Datei sicher zu halten:

chmod 600 id_rsa

An diesem Punkt kann Ansible diese SSH-Schlüssel verwenden, um mit allen Servern zu kommunizieren, auf denen der Schlüssel eingebettet ist.

Ansible Hosts konfigurieren

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

[]
alias ansible_ssh_host=

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 über das Ansible-Droplet zugegriffen werden, indem Sie Folgendes eingeben:

ssh root@

Sie sollten nicht zur Eingabe eines Kennworts aufgefordert werden, wenn Sie dies korrekt eingerichtet haben. Wir gehen davon aus, dass die IP-Adressen unserer Tröpfchen "+ 192.0.2.1 ", " 192.0.2.2 " und " 192.0.2.3 " lauten. Wir richten dies so ein, dass wir diese einzeln als " host1 ", " host2 " und " host3 " oder als Gruppe als " droplets +" bezeichnen können.

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

[droplets]
host1 ansible_ssh_host=
host2 ansible_ssh_host=
host3 ansible_ssh_host=

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 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue

Auf meinem Ansible-Computer verwende ich einen Benutzer mit dem Namen "+ demo ". Ansible versucht, mit ` ssh 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 Droplets-Gruppe mitteilt, dass sie eine Verbindung mit dem Root-Benutzer herstellen sollen.

Dazu erstellen wir ein Verzeichnis in der Ansible-Konfigurationsstruktur mit dem Namen "+ group_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/droplets

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

/ etc / ansible / group_vars / droplets

---
ansible_ssh_user: root

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

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

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.

Das "alles" bedeutet alle Hosts. Genauso einfach können wir eine Gruppe angeben:

ansible -m ping droplets

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 Teil "+ -m ping +" des Befehls ist eine Anweisung an Ansible, das Modul "ping" 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 in 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 Befehl "+ ansible +" 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. 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.