Τρόπος χρήσης Ansible Playbooks για αυτοματοποίηση σύνθετων εργασιών σε πολλούς απομακρυσμένους διακομιστές - Μέρος 2


Στο προηγούμενο άρθρο αυτής της σειράς Ansible, εξηγήσαμε ότι το Ansible είναι ένα εργαλείο χωρίς πράκτορες που σας επιτρέπει να διαχειρίζεστε γρήγορα και αποτελεσματικά πολλαπλά μηχανήματα (γνωστά και ως κόμβοι – και να εκτελείτε αναπτύξεις και σε αυτούς) από ένα μόνο σύστημα.

Μετά την εγκατάσταση του λογισμικού στο μηχάνημα ελεγκτή, τη δημιουργία των κλειδιών για σύνδεση χωρίς κωδικό πρόσβασης και την αντιγραφή τους στους κόμβους, ήρθε η ώρα να μάθετε πώς να βελτιστοποιείτε τη διαδικασία διαχείρισης τέτοιων απομακρυσμένων συστημάτων χρησιμοποιώντας το Ansible.

Σε όλο αυτό το άρθρο, καθώς και στο επόμενο, θα χρησιμοποιήσουμε το παρακάτω περιβάλλον δοκιμής. Όλοι οι κεντρικοί υπολογιστές είναι πλαίσια CentOS 7:


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

Επιπλέον, σημειώστε ότι και οι δύο κόμβοι έχουν προστεθεί στην ενότητα διακομιστών ιστού του τοπικού αρχείου /etc/ansible/hosts:

Τούτου λεχθέντος, ας ξεκινήσουμε με το θέμα.

Παρουσιάζοντας τα Ansible Playbooks

Όπως περιγράφεται στον προηγούμενο οδηγό, μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα ansible για να εκτελέσετε εντολές σε απομακρυσμένους κόμβους ως εξής:


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

Στο παραπάνω παράδειγμα, εκτελέσαμε το hostnamectl --static σε node1 και node2. Δεν χρειάζεται πολύς χρόνος για να συνειδητοποιήσει κανείς ότι αυτή η μέθοδος εκτέλεσης εργασιών σε απομακρυσμένους υπολογιστές λειτουργεί καλά για σύντομες εντολές, αλλά μπορεί γρήγορα να γίνει επαχθής ή ακατάστατη για πιο περίπλοκες εργασίες που απαιτούν περαιτέρω καλά δομημένες παραμέτρους διαμόρφωσης ή αλληλεπιδράσεις με άλλες υπηρεσίες

Για παράδειγμα, η ρύθμιση και η διαμόρφωση του WordPress σε πολλούς κεντρικούς υπολογιστές – που θα καλύψουμε στο επόμενο άρθρο αυτής της σειράς). Εδώ εμφανίζονται τα Playbooks.

Με απλά λόγια, τα Playbooks είναι αρχεία απλού κειμένου γραμμένα σε μορφή YAML και περιέχουν μια λίστα με στοιχεία με ένα ή περισσότερα ζεύγη κλειδιών/τιμών (γνωστά και ως "κατακερματισμός " ή "λεξικό ").

Μέσα σε κάθε Playbook θα βρείτε μία ή περισσότερες ομάδες κεντρικών υπολογιστών (κάθε μία από αυτές τις ομάδες ονομάζεται επίσης play) όπου πρόκειται να εκτελεστούν οι επιθυμητές εργασίες.

Ένα παράδειγμα από τα επίσημα έγγραφα θα μας βοηθήσει να δείξουμε:

1. κεντρικοί υπολογιστές: αυτή είναι μια λίστα μηχανημάτων (σύμφωνα με /etc/ansible/hosts) όπου θα εκτελεστούν οι ακόλουθες εργασίες.

2. remote_user: απομακρυσμένος λογαριασμός που θα χρησιμοποιηθεί για την εκτέλεση των εργασιών.

3. vars: μεταβλητές που χρησιμοποιούνται για την τροποποίηση της συμπεριφοράς των απομακρυσμένων συστημάτων.

4. οι εργασίες εκτελούνται με τη σειρά, μία κάθε φορά, έναντι όλων των μηχανημάτων που ταιριάζουν με τους κεντρικούς υπολογιστές. Μέσα σε ένα παιχνίδι, όλοι οι οικοδεσπότες θα λάβουν τις ίδιες οδηγίες εργασίας.

Εάν χρειάζεται να εκτελέσετε ένα διαφορετικό σύνολο συσχετισμένων εργασιών για έναν συγκεκριμένο κεντρικό υπολογιστή, δημιουργήστε ένα άλλο παιχνίδι στον τρέχοντα Playbook (με άλλα λόγια, ο σκοπός ενός παιχνιδιού είναι να αντιστοιχίσει μια συγκεκριμένη επιλογή κεντρικών υπολογιστών σε καλά -καθορισμένες εργασίες).

Σε αυτήν την περίπτωση, ξεκινήστε ένα νέο παιχνίδι προσθέτοντας την οδηγία οικοδεσποτών στο κάτω μέρος και ξεκινώντας από την αρχή:


---
- 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. είναι ενέργειες που ενεργοποιούνται στο τέλος της ενότητας εργασιών σε κάθε αναπαραγωγή και χρησιμοποιούνται κυρίως για επανεκκίνηση υπηρεσιών ή ενεργοποίηση επανεκκινήσεων στα απομακρυσμένα συστήματα.


mkdir /etc/ansible/playbooks

Και ένα αρχείο με το όνομα apache.yml εκεί μέσα με τα ακόλουθα περιεχόμενα:


---
- 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

Δεύτερον, δημιουργήστε έναν κατάλογο /static_files:


mkdir /static_files

όπου θα αποθηκεύσετε το προσαρμοσμένο αρχείο index.html:


<!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>

Τούτου λεχθέντος, τώρα ήρθε η ώρα να χρησιμοποιήσετε αυτό το βιβλίο παιχνιδιού για να εκτελέσετε τις εργασίες που αναφέρθηκαν προηγουμένως. Θα σημειώσετε ότι το Ansible θα πραγματοποιεί κάθε εργασία ανά υπολογιστή, μία κάθε φορά, και θα αναφέρει την κατάσταση τέτοιων εργασιών:


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

Ας δούμε τώρα τι συμβαίνει όταν ανοίγουμε ένα πρόγραμμα περιήγησης και το επισημαίνουμε σε 192.168.0.29 και 192.168.0.30:

Ας πάμε ένα βήμα παραπέρα και ας σταματήσουμε και απενεργοποιούμε χειροκίνητα το Apache σε node1 και node2:


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

Μετά τρέξε ξανά,


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

Αυτή τη φορά, η εργασία αναφέρει ότι ο διακομιστής ιστού Apache ξεκίνησε και ενεργοποιήθηκε σε κάθε κεντρικό υπολογιστή:

Σκεφτείτε το παραπάνω παράδειγμα ως μια γεύση της δύναμης του Ansible. Αν και αυτές είναι σχετικά εύκολες εργασίες όταν εκτελούνται σε μικρό αριθμό διακομιστών, μπορεί να γίνουν πολύ κουραστικές και χρονοβόρες εάν χρειαστεί να κάνετε το ίδιο σε πολλές (ίσως εκατοντάδες) μηχανές.

Περίληψη

Σε αυτό το άρθρο περιγράψαμε πώς να εκτελούμε εντολές και να εκτελούμε σύνθετες εργασίες σε πολλούς απομακρυσμένους κεντρικούς υπολογιστές ταυτόχρονα χρησιμοποιώντας το Ansible. Η επίσημη τεκμηρίωση και το αποθετήριο του GitHub παρέχουν πολλά παραδείγματα και οδηγούς για το πώς να χρησιμοποιήσετε το Ansible για να επιτύχετε σχεδόν κάθε εργασία που μπορείτε να φανταστείτε.

Καθώς αρχίζετε να μαθαίνετε πώς να αυτοματοποιείτε εργασίες σε απομακρυσμένους κεντρικούς υπολογιστές Linux χρησιμοποιώντας το Ansible, θα θέλαμε να ακούσουμε τις σκέψεις σας. Ερωτήσεις, σχόλια και προτάσεις είναι επίσης πάντα ευπρόσδεκτες, γι' αυτό μη διστάσετε να επικοινωνήσετε μαζί μας χρησιμοποιώντας την παρακάτω φόρμα οποιαδήποτε στιγμή.