ค้นหาเว็บไซต์

วิธีใช้ 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 และมีรายการที่มีรายการที่มีคู่คีย์/ค่าอย่างน้อย 1 คู่ (หรือที่เรียกว่า "แฮช ” หรือ “พจนานุกรม ”)

ภายใน Playbook แต่ละเล่ม คุณจะพบกลุ่มโฮสต์ตั้งแต่หนึ่งกลุ่มขึ้นไป (แต่ละกลุ่มเรียกอีกอย่างว่า ละคร) ซึ่งจะมีการดำเนินงานที่ต้องการ

ตัวอย่างจากเอกสารอย่างเป็นทางการจะช่วยเราในการอธิบาย:

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>

ถึงกระนั้น ตอนนี้ก็ถึงเวลาใช้ Playbook นี้เพื่อทำงานตามที่กล่าวไว้ข้างต้น คุณจะทราบว่า 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 เราต้องการทราบความคิดเห็นของคุณ เรายินดีต้อนรับคำถาม ความคิดเห็น และข้อเสนอแนะเสมอ ดังนั้นโปรดติดต่อเราโดยใช้แบบฟอร์มด้านล่างได้ตลอดเวลา