Birden Fazla Uzak Sunucudaki Karmaşık Görevleri Otomatikleştirmek için Ansible Playbooks Nasıl Kullanılır - Bölüm 2


Bu Ansible serisinin önceki makalesinde, Ansible'ın tek bir sistemden birden fazla makineyi (düğümler olarak da bilinir) hızlı ve verimli bir şekilde yönetmenize ve bunlara dağıtımlar gerçekleştirmenize olanak tanıyan aracısız bir araç olduğunu açıklamıştık.

Yazılımı denetleyici makineye yükledikten, şifresiz oturum açma anahtarlarını oluşturduktan ve bunları düğümlere kopyaladıktan sonra, bu tür uzak sistemleri Ansible kullanarak yönetme sürecinin nasıl optimize edileceğini öğrenmenin zamanı geldi.

Bu makale boyunca ve bir sonraki makale boyunca aşağıdaki test ortamını kullanacağız. Tüm ana bilgisayarlar CentOS 7 kutularıdır:


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

Ayrıca, her iki düğümün de yerel /etc/ansible/hosts dosyasının web sunucuları bölümüne eklendiğini lütfen unutmayın:

Bununla birlikte, elimizdeki konuyla başlayalım.

Ansible Playbook'larla Tanışın

Önceki kılavuzda açıklandığı gibi, uzak düğümlerde komutları çalıştırmak için ansible yardımcı programını aşağıdaki gibi kullanabilirsiniz:


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

Yukarıdaki örnekte node1 ve node2 üzerinde hostnamectl --static komutunu çalıştırdık. Uzak bilgisayarlarda görevleri çalıştırmaya yönelik bu yöntemin, kısa komutlar için iyi çalıştığını ancak daha iyi yapılandırılmış yapılandırma parametreleri veya diğer hizmetlerle etkileşimler gerektiren daha karmaşık görevler için hızla külfetli veya karmaşık hale gelebileceğini fark etmek uzun sürmez.

Örneğin, WordPress'i birden çok ana makinede kurma ve yapılandırma (bu konuyu bu serinin bir sonraki makalesinde ele alacağız). Başucu Kitapları'nın devreye girdiği yer burasıdır.

Basitçe söylemek gerekirse, Başucu Kitapları, YAML biçiminde yazılmış düz metin dosyalarıdır ve bir veya daha fazla anahtar/değer çiftine sahip öğelerin bulunduğu bir liste içerir ("hash ” veya “sözlük”).

Her Başucu Kitabının içinde, istenen görevlerin gerçekleştirileceği bir veya daha fazla ana bilgisayar grubu bulacaksınız (bu grupların her birine oyun da denir).

Resmi belgelerden bir örnek, açıklamamıza yardımcı olacaktır:

1. ana bilgisayarlar: bu, aşağıdaki görevlerin gerçekleştirileceği makinelerin listesidir (/etc/ansible/hosts'a göre).

2. remote_user: görevleri gerçekleştirmek için kullanılacak uzak hesap.

3. vars: uzak sistem(ler)in davranışını değiştirmek için kullanılan değişkenler.

4. Görevler, ana bilgisayarlarla eşleşen tüm makinelerde sırayla ve teker teker yürütülür. Bir oyunda tüm sunucular aynı görev talimatlarını alacaktır.

Belirli bir ana makine için farklı bir dizi ilişkili görevi yürütmeniz gerekiyorsa, mevcut Başucu Kitabı'nda başka bir oyun oluşturun (başka bir deyişle, oyunun amacı, belirli bir ana makine seçimini iyi bir şekilde eşlemektir. -tanımlı görevler).

Bu durumda, en alta hosts direktifini ekleyip baştan başlayarak yeni bir oyun başlatın:


---
- 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. işleyiciler, her oyunda görevler bölümünün sonunda tetiklenen eylemlerdir ve çoğunlukla hizmetleri yeniden başlatmak veya uzak sistemlerde yeniden başlatmaları tetiklemek için kullanılır.


mkdir /etc/ansible/playbooks

Ve bunun içinde Apache.yml adında aşağıdaki içeriğe sahip bir dosya var:


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

İkinci olarak, /static_files dizini oluşturun:


mkdir /static_files

özel index.html dosyasını depolayacağınız yer:


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

Bununla birlikte, şimdi bu başucu kitabını daha önce bahsedilen görevleri gerçekleştirmek için kullanmanın zamanı geldi. Ansible'ın her görevi ana bilgisayar bazında teker teker inceleyeceğini ve bu tür görevlerin durumu hakkında rapor vereceğini unutmayın:


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

Şimdi bir tarayıcı açıp onu 192.168.0.29 ve 192.168.0.30'a yönlendirdiğimizde ne olacağını görelim:

Bir adım daha ileri gidelim ve düğüm1 ve düğüm2'de Apache'yi manuel olarak durdurup devre dışı bırakalım:


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

Sonra tekrar koş,


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

Bu kez görev, Apache web sunucusunun her ana bilgisayarda başlatıldığını ve etkinleştirildiğini bildirir:

Lütfen yukarıdaki örneği Ansible'ın gücüne bir bakış olarak düşünün. Bunlar az sayıda sunucuda gerçekleştirildiğinde nispeten kolay görevler olsa da, aynı şeyi birkaç (belki de yüzlerce) makinede yapmanız gerekiyorsa çok sıkıcı ve zaman alıcı hale gelebilir.

Özet

Bu makalede, Ansible kullanarak birden fazla uzak ana bilgisayarda aynı anda komutların nasıl çalıştırılacağını ve karmaşık görevlerin nasıl yürütüleceğini anlattık. Resmi belgeler ve GitHub deposu, akla gelebilecek hemen hemen her görevi gerçekleştirmek için Ansible'ın nasıl kullanılacağına dair birçok örnek ve kılavuz sağlar.

Ansible'ı kullanarak uzak Linux ana bilgisayarlarındaki görevleri nasıl otomatikleştireceğinizi öğrenmeye başladığınızda düşüncelerinizi duymak isteriz. Sorular, yorumlar ve öneriler de her zaman memnuniyetle karşılanır; bu nedenle istediğiniz zaman aşağıdaki formu kullanarak bizimle iletişime geçmekten çekinmeyin.