Website-Suche

Wie man Ansible-Playbooks verwendet, um komplexe Aufgaben auf mehreren Remote-Servern zu automatisieren - Teil 2


Im vorherigen Artikel dieser Ansible-Serie haben wir erklärt, dass Ansible ein agentenloses Tool ist, mit dem Sie schnell und effizient mehrere Maschinen (auch als Knoten bezeichnet – und auch Bereitstellungen auf ihnen durchführen) von einem einzigen System aus verwalten können.

Nach der Installation der Software auf dem Controller-Computer, dem Erstellen der Schlüssel für die passwortlose Anmeldung und dem Kopieren auf die Knoten ist es an der Zeit zu lernen, wie der Prozess der Verwaltung solcher Remote-Systeme mit Ansible optimiert werden kann.

In diesem und im nächsten Artikel werden wir die folgende Testumgebung verwenden. Alle Hosts sind CentOS 7-Boxen:


Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

Bitte beachten Sie außerdem, dass beide Knoten im Abschnitt Webserver der lokalen Datei /etc/ansible/hosts hinzugefügt wurden:

Beginnen wir also mit dem Thema, um das es geht.

Einführung in Ansible Playbooks

Wie im vorherigen Handbuch beschrieben, können Sie das Dienstprogramm ansible verwenden, um Befehle in Remote-Knoten wie folgt auszuführen:


ansible -a "/bin/hostnamectl --static" webservers

Im obigen Beispiel haben wir hostnamectl --static auf node1 und node2 ausgeführt. Es dauert nicht lange, bis man erkennt, dass diese Methode zum Ausführen von Aufgaben auf entfernten Computern für kurze Befehle gut funktioniert, aber bei komplexeren Aufgaben, die weitere gut strukturierte Konfigurationsparameter oder Interaktionen mit anderen Diensten erfordern, schnell mühsam oder unübersichtlich werden kann

Zum Beispiel das Einrichten und Konfigurieren von WordPress auf mehreren Hosts – worauf wir im nächsten Artikel dieser Serie eingehen werden). Hier kommen Playbooks ins Spiel.

Einfach ausgedrückt handelt es sich bei Playbooks um reine Textdateien, die im YAML-Format geschrieben sind und eine Liste mit Elementen mit einem oder mehreren Schlüssel-Wert-Paaren enthalten (auch als "Hash" oder "Dictionary" bezeichnet).

In jedem Playbook finden Sie eine oder mehrere Gruppen von Hosts (jede dieser Gruppen wird auch als Play bezeichnet), in denen die gewünschten Aufgaben ausgeführt werden sollen.

Ein Beispiel aus den offiziellen Dokumenten hilft uns bei der Veranschaulichung:

1. Hosts: Dies ist eine Liste von Maschinen (gemäß /etc/ansible/hosts), auf denen die folgenden Aufgaben ausgeführt werden.

2. remote_user: Remote-Konto, das zum Ausführen der Aufgaben verwendet wird.

3. vars: Variablen, die verwendet werden, um das Verhalten des/der entfernten Systeme(s) zu ändern.

4. Die Aufgaben werden nacheinander für alle Rechner ausgeführt, die mit den Hosts übereinstimmen. Innerhalb eines Spiels erhalten alle Hosts die gleichen Aufgabenanweisungen.

Wenn Sie einen anderen Satz zugeordneter Aufgaben für einen bestimmten Host ausführen müssen, erstellen Sie eine weitere Wiedergabe im aktuellen Playbook (mit anderen Worten, der Zweck einer Wiedergabe besteht darin, eine bestimmte Auswahl von Hosts klar definierten Aufgaben zuzuordnen).

In diesem Fall startest du ein neues Spiel, indem du die hosts-Direktive am unteren Rand hinzufügst und von vorne beginnst:


---
- hosts: webservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
  remote_user: root
  tasks:
  - name: description for task1
    task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  - name: description for task1
    task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  handlers:
    - name: description for handler 1
      service: name=name_of_service state=service_status
- hosts: dbservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
…

5. Handler sind Aktionen, die am Ende des Aufgabenabschnitts in jedem Spiel ausgelöst werden und hauptsächlich zum Neustart von Diensten oder zum Auslösen von Neustarts in den Remote-Systemen verwendet werden.


mkdir /etc/ansible/playbooks

Und darin befindet sich eine Datei mit dem Namen apache.yml mit folgendem Inhalt:


---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: replace default index.html file
    copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

Erstellen Sie anschließend ein Verzeichnis /static_files:


mkdir /static_files

Wo Sie die benutzerdefinierte index.html Datei speichern:


<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="utf-8"/>
 </script>
 </head>
 <body>
 <h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
 </body>
 </html>

Jetzt ist es jedoch an der Zeit, dieses Playbook zu verwenden, um die zuvor genannten Aufgaben auszuführen. Sie werden feststellen, dass Ansible jede Aufgabe nach Host nacheinander durchläuft und über den Status dieser Aufgaben berichtet:


ansible-playbook /etc/ansible/playbooks/apache.yml

Schauen wir uns nun an, was passiert, wenn wir einen Browser öffnen und ihn auf 192.168.0.29 und 192.168.0.30 verweisen:

Gehen wir einen Schritt weiter und stoppen und deaktivieren Apache manuell auf node1 und node2:


systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd

Lauf dann wieder,


ansible-playbook /etc/ansible/playbooks/apache.yml

Dieses Mal meldet die Aufgabe, dass der Apache-Webserver auf jedem Host gestartet und aktiviert wurde:

Bitte betrachten Sie das obige Beispiel als einen Einblick in die Leistungsfähigkeit von Ansible. Während dies relativ einfache Aufgaben sind, wenn sie auf einer kleinen Anzahl von Servern ausgeführt werden, kann es sehr mühsam und zeitaufwändig werden, wenn Sie dasselbe auf mehreren (vielleicht Hunderten) von Computern tun müssen.

Zusammenfassung

In diesem Artikel haben wir beschrieben, wie Sie mit Ansible Befehle ausführen und komplexe Aufgaben auf mehreren Remote-Hosts gleichzeitig ausführen können. Die offizielle Dokumentation und das GitHub-Repository bieten viele Beispiele und Anleitungen, wie man mit Ansible fast jede erdenkliche Aufgabe erledigen kann.

Wenn Sie anfangen zu lernen, wie Sie Aufgaben auf Remote-Linux-Hosts mit Ansible automatisieren können, würden wir gerne Ihre Gedanken hören. Fragen, Kommentare und Vorschläge sind ebenfalls immer willkommen, also zögern Sie nicht, uns jederzeit über das untenstehende Formular zu kontaktieren.

Verwandte Artikel: