Website-Suche

So verwenden Sie Ansible Playbooks zur Automatisierung komplexer Aufgaben auf mehreren Remote-Servern – Teil 2


Im vorherigen Artikel dieser Ansible-Reihe 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.

Nachdem Sie die Software auf dem Controller-Computer installiert, die Schlüssel für die passwortlose Anmeldung erstellt und sie auf die Knoten kopiert haben, ist es an der Zeit zu lernen, wie Sie den Prozess der Verwaltung solcher Remote-Systeme mithilfe von Ansible optimieren können.

In diesem und auch im nächsten Artikel verwenden wir die folgende Testumgebung. 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 jedoch mit dem jeweiligen Thema.

Wir stellen Ansible Playbooks vor

Wie in der vorherigen Anleitung 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 einem klar wird, dass diese Methode zum Ausführen von Aufgaben auf Remotecomputern für kurze Befehle gut funktioniert, für komplexere Aufgaben, die weitere gut strukturierte Konfigurationsparameter oder Interaktionen mit anderen Diensten erfordern, jedoch schnell mühsam oder chaotisch 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 sind Playbooks reine Textdateien, die im YAML-Format geschrieben sind und eine Liste mit Elementen mit einem oder mehreren Schlüssel/Wert-Paaren (auch bekannt als „hash “ oder ein „Wörterbuch “.

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

Ein Beispiel aus den offiziellen Dokumenten soll uns bei der Veranschaulichung helfen:

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. Variablen: Variablen, die zum Ändern des Verhaltens des/der Remote-System(s) verwendet werden.

4. Aufgaben werden der Reihe nach einzeln auf allen Maschinen ausgeführt, die mit Hosts übereinstimmen. Innerhalb eines Spiels erhalten alle Hosts die gleichen Aufgabenanweisungen.

Wenn Sie einen anderen Satz zugehöriger Aufgaben für einen bestimmten Host ausführen müssen, erstellen Sie einen weiteren Play im aktuellen Playbook (mit anderen Worten, der Zweck eines Plays besteht darin, eine bestimmte Auswahl von Hosts gut zuzuordnen). -definierte Aufgaben).

Starten Sie in diesem Fall einen neuen Spielzug, indem Sie unten die hosts-Direktive hinzufügen und von vorne beginnen:


---
- 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 Neustarten von Diensten oder zum Auslösen von Neustarts in den Remote-Systemen verwendet werden.


mkdir /etc/ansible/playbooks

Und darin eine Datei namens 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

Zweitens erstellen Sie ein Verzeichnis /static_files:


mkdir /static_files

wo Sie die benutzerdefinierte Datei index.html 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 einzeln nach Host durchgeht und über den Status dieser Aufgaben berichtet:


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

Sehen 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 noch einen Schritt weiter und stoppen und deaktivieren Sie Apache manuell auf node1 und node2:


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

Dann renne noch einmal,


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

Diesmal 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, können sie sehr mühsam und zeitaufwändig werden, wenn Sie dasselbe auf mehreren (vielleicht Hunderten) Computern durchführen 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 zahlreiche Beispiele und Anleitungen, wie Sie mit Ansible nahezu jede erdenkliche Aufgabe lösen können.

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