Vyhledávání na webu

Jak používat Ansible Playbooks k automatizaci složitých úloh na více vzdálených serverech – část 2


V předchozím článku této série Ansible jsme vysvětlili, že Ansible je nástroj bez agenta, který vám umožňuje rychle a efektivně spravovat více počítačů (známých také jako uzly – a také na nich provádět nasazení) z jednoho systému.

Po instalaci softwaru do řídicího počítače, vytvoření klíčů pro přihlášení bez hesla a jejich zkopírování do uzlů je čas naučit se optimalizovat proces správy takových vzdálených systémů pomocí Ansible.

V celém tomto článku, stejně jako v dalším, budeme používat následující testovací prostředí. Všichni hostitelé jsou boxy CentOS 7:


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

Kromě toho mějte na paměti, že oba uzly byly přidány do sekce webových serverů v místním souboru /etc/ansible/hosts:

To znamená, že začněme s aktuálním tématem.

Představujeme Ansible Playbooks

Jak je popsáno v předchozí příručce, pomocí nástroje ansible můžete spouštět příkazy ve vzdálených uzlech následujícím způsobem:


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

Ve výše uvedeném příkladu jsme spustili hostnamectl --static na node1 a node2. Netrvá dlouho, než si uvědomíte, že tento způsob spouštění úloh na vzdálených počítačích funguje dobře pro krátké příkazy, ale může se rychle stát zatěžujícím nebo chaotickým u složitějších úloh, které vyžadují další dobře strukturované konfigurační parametry nebo interakce s jinými službami.

Například nastavení a konfigurace WordPress na více hostitelích – čemuž se budeme věnovat v dalším článku této série). Zde přicházejí na scénu Příručky.

Jednoduše řečeno, Příručky jsou soubory ve formátu prostého textu napsané ve formátu YAML a obsahují seznam položek s jedním nebo více páry klíč/hodnota (známé také jako „hash “ nebo „slovník “).

Uvnitř každé Playbooku najdete jednu nebo více skupin hostitelů (každá z těchto skupin se také nazývá hra), kde mají být provedeny požadované úkoly.

Pro ilustraci nám pomůže příklad z oficiálních dokumentů:

1. hostitelé: toto je seznam počítačů (podle /etc/ansible/hosts), na kterých budou provedeny následující úlohy.

2. remote_user: vzdálený účet, který bude použit k provádění úkolů.

3. vars: proměnné používané k úpravě chování vzdáleného systému(ů).

4. úlohy jsou prováděny v pořadí, jedna po druhé, na všech počítačích, které odpovídají hostitelům. V rámci hry dostanou všichni hostitelé stejné příkazy k úkolu.

Pokud potřebujete provést jinou sadu přidružených úkolů pro konkrétního hostitele, vytvořte další hru v aktuální Příručce (jinými slovy, účelem hry je zmapovat konkrétní výběr hostitelů -definované úkoly).

V takovém případě začněte novou hru přidáním direktivy hosts na konec a začněte znovu:


---
- 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. handlery jsou akce, které se spouštějí na konci sekce úloh v každé hře a většinou se používají k restartování služeb nebo ke spuštění restartu ve vzdálených systémech.


mkdir /etc/ansible/playbooks

A uvnitř soubor s názvem apache.yml s následujícím obsahem:


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

Za druhé vytvořte adresář /static_files:


mkdir /static_files

kam uložíte vlastní soubor 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>

To znamená, že nyní je čas použít tuto příručku k provádění výše zmíněných úkolů. Všimněte si, že Ansible bude procházet každý úkol podle hostitele, jeden po druhém, a bude hlásit stav těchto úkolů:


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

Nyní se podívejme, co se stane, když otevřeme prohlížeč a nasměrujeme jej na 192.168.0.29 a 192.168.0.30:

Pojďme o krok dále a ručně zastavíme a deaktivujeme Apache na node1 a node2:


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

Pak zase běž,


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

Tentokrát úloha hlásí, že webový server Apache byl spuštěn a povolen na každém hostiteli:

Vezměte prosím výše uvedený příklad jako záblesk síly Ansible. I když se jedná o relativně snadné úkoly při provádění na malém počtu serverů, může to být velmi zdlouhavé a časově náročné, pokud potřebujete udělat totéž na několika (možná stovkách) strojů.

souhrn

V tomto článku jsme popsali, jak spouštět příkazy a provádět složité úlohy na několika vzdálených hostitelích současně pomocí Ansible. Oficiální dokumentace a úložiště GitHub poskytují spoustu příkladů a návodů, jak používat Ansible k dosažení téměř jakéhokoli představitelného úkolu.

Když se začnete učit, jak automatizovat úlohy na vzdálených hostitelích Linuxu pomocí Ansible, rádi bychom slyšeli vaše myšlenky. Dotazy, komentáře a návrhy jsou také vždy vítány, takže nás můžete kdykoli kontaktovat pomocí níže uvedeného formuláře.