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

วิธีใช้โมดูล Ansible สำหรับงานการดูแลระบบ - ตอนที่ 6


ใน ส่วนที่ 6 ของซีรีส์ Ansible นี้ เราได้กล่าวถึงโมดูล Ansible บางส่วนในหัวข้อที่ผ่านมา ตอนนี้เราจะเจาะลึกยิ่งขึ้นและค้นพบโมดูลเพิ่มเติมที่เป็นประโยชน์ในการดำเนินงานการดูแลระบบจำนวนหนึ่ง

คุณจะได้รับแนวคิดพื้นฐานเกี่ยวกับแต่ละโมดูล และดูตัวเลือกที่มีให้ในการทำงานบางอย่างให้สำเร็จ

ในหน้านี้:
  1. การจัดการแพ็คเกจซอฟต์แวร์และที่เก็บใน Ansible
  2. การจัดการบริการโดยใช้ Ansible
  3. การจัดการไฟร์วอลล์ด้วย Ansible
  4. การเก็บถาวรไฟล์หรือโฟลเดอร์ด้วย Ansible
  5. กำหนดเวลางานด้วย Ansible
  6. จัดการผู้ใช้และกลุ่มด้วย Ansible
  7. สร้างไฟล์และไดเร็กทอรีด้วย Ansible
  8. การจัดการพื้นที่เก็บข้อมูลด้วย Ansible
  9. การจัดการระบบไฟล์ด้วย Ansible

1. การจัดการแพ็คเกจซอฟต์แวร์และที่เก็บใน Ansible

เมื่อติดตั้งแพ็คเกจบนระบบ Linux การแจกแจงที่แตกต่างกันจะมาพร้อมกับตัวจัดการแพ็คเกจที่แตกต่างกัน สำหรับการเผยแพร่ RedHat เรามี yum & dnf ในขณะที่รสชาติ Debian ก็ใช้ได้

Ansible มาพร้อมกับโมดูลที่เรียกว่า แพ็คเกจ ซึ่งช่วยลดความจำเป็นในการใช้ตัวจัดการแพ็คเกจที่แตกต่างกันสำหรับระบบที่แตกต่างกัน โดยจะใช้ตัวจัดการแพ็คเกจที่สอดคล้องกันของระบบโฮสต์โดยอัตโนมัติ จึงทำให้การทำงานง่ายขึ้น

ติดตั้งแพ็คเกจซอฟต์แวร์

ตัวอย่างเช่น หากต้องการติดตั้ง htop ในกลุ่ม โฮสต์ ที่ประกอบด้วยทั้ง Debian และ RedHat distros ให้ใช้โมดูล แพ็คเกจ เป็น แสดงใน Playbook install_htop.yml ด้านล่าง

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed

หมายเหตุ: ชื่อแพ็คเกจอาจแตกต่างกันไปในแต่ละระบบปฏิบัติการ ตัวอย่างเช่น เรามี httpd ในการแจกแจง Redhat และ Apache2 สำหรับระบบ Debian/Ubuntu ซึ่งทั้งหมดนี้แสดงถึง Apache เว็บเซิร์ฟเวอร์. ดังนั้นควรใช้ความระมัดระวังเป็นพิเศษเมื่อส่งพัสดุเหล่านี้ โดยปกติแล้ว วิธีที่ดีที่สุดคือการใช้ตัวแปรหรือคำสั่งแบบมีเงื่อนไข

2. การจัดการบริการโดยใช้ Ansible

ต่อไป เรามีโมดูล บริการ ซึ่งใช้สำหรับการจัดการบริการบนระบบ Linux ใช้เพื่อเริ่ม หยุด หรือเริ่มบริการใหม่ คุณยังสามารถใช้เพื่อเปิดใช้งานบริการได้ ดังนั้นเมื่อระบบบูท ระบบจะเริ่มบริการโดยอัตโนมัติ

เริ่มและเปิดใช้บริการ

ตัวอย่างเช่น หากต้องการเริ่มต้นและเปิดใช้งานเว็บเซิร์ฟเวอร์ Apache บน RHEL 8 ให้ใช้บริการตามที่แสดง

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes

หยุดบริการ

หากต้องการหยุดบริการ httpd ให้ส่งแอตทริบิวต์ หยุด

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped

เริ่มบริการใหม่

หากต้องการรีสตาร์ทบริการ httpd ให้ส่งแอตทริบิวต์ รีสตาร์ท

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted

3. การจัดการไฟร์วอลล์ด้วย Ansible

งานที่สำคัญอีกประการหนึ่งที่ผู้ดูแลระบบทำคือการจัดการไฟร์วอลล์ ใน Playbooks Ansible สิ่งนี้ทำได้ง่ายขึ้นมากด้วยโมดูล ไฟร์วอลล์ และ ufw คุณสามารถกำหนดค่าไฟร์วอลล์เพื่ออนุญาตหรือบล็อกพอร์ตหรือบริการ หรือแม้แต่ที่อยู่ต้นทางได้

มาดูตัวอย่างกันดีกว่า:

เปิด/บล็อกพอร์ต 80 ในไฟร์วอลล์

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

ใน Playbook ด้านบน พอร์ต 80 ได้รับอนุญาตให้ข้ามไฟร์วอลล์ได้

ตัวเลือก ถาวร: ใช่ บังคับใช้กฎไฟร์วอลล์และทำให้คงอยู่ตลอดการรีบูต อย่างไรก็ตาม กฎข้อนี้ใช้ไม่ได้ทันที มันจะมีผลเฉพาะหลังจากการรีบูตเท่านั้น หากต้องการบังคับใช้กฎทันที ให้ใช้ตัวเลือก ทันที: ใช่

หากต้องการระบุที่อยู่ที่ได้รับอนุญาต ให้ใช้คำสั่ง source:0.0.0.0/0

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

หากต้องการระบุช่วงของพอร์ตที่จะอนุญาตให้ใช้ตัวเลือกพอร์ตดังนี้:

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

หากต้องการบล็อกพอร์ต ให้เปลี่ยนตัวเลือกสถานะเป็น ปิดใช้งาน ดังที่แสดง:

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

เพิ่ม/บล็อกบริการในไฟร์วอลล์

นอกเหนือจากการเพิ่ม/บล็อกพอร์ต คุณยังสามารถใช้กฎเดียวกันนี้กับบริการได้ และมันค่อนข้างง่าย เพียงใช้โมดูล บริการ และต่อท้ายบริการที่จะเพิ่ม และตรวจสอบให้แน่ใจว่าตัวเลือกสถานะได้รับการตั้งค่าเป็น เปิดใช้งาน

- firewalld:
    service: https
    permanent: true
    state: enabled

หากต้องการบล็อกบริการ ให้ตั้งค่าตัวเลือก สถานะ เป็น ปิดใช้งาน

- firewalld:
    service: https
    permanent: true
    state: disabled

4. การเก็บถาวรไฟล์หรือโฟลเดอร์ด้วย Ansible

การเก็บถาวรหมายถึงการบีบอัดไฟล์หรือโฟลเดอร์ให้อยู่ในรูปแบบที่พกพาได้ง่ายและมีขนาดเล็กลง Ansible จัดส่งพร้อมกับโมดูลที่เรียกว่า เก็บถาวร การบีบอัดไฟล์นั้นง่ายนิดเดียว สิ่งที่คุณต้องทำก็แค่ระบุเส้นทางต้นทางของไฟล์และปลายทางของไฟล์บีบอัด

บีบอัดไดเรกทอรี

ลองพิจารณา Playbook compress.yml ด้านล่าง

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

Playbook ด้านบนบีบอัดไดเรกทอรี /opt/data/web และบันทึกลงใน /tmp/web.gz

บีบอัดไดเร็กทอรีด้วยรูปแบบ

รูปแบบการบีบอัดเริ่มต้นคือ .gz อย่างไรก็ตาม สามารถระบุได้โดยใช้แอตทริบิวต์ format ตัวอย่าง Playbook ถัดไป

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

Playbook ด้านบนบีบอัดไดเรกทอรี /opt/data/web ไปที่ /tmp/web.zip

คลายการบีบอัดไฟล์

คุณยังสามารถขยายไฟล์บีบอัดได้โดยใช้แอตทริบิวต์ unarchive พิจารณา Playbook ด้านล่าง

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

Playbook ด้านบนจะคลายการบีบอัดไฟล์ /opt/data/web.gz เป็น /opt บนตัวควบคุม Ansible

คลายการบีบอัดไฟล์บนโหนดระยะไกล

หากต้องการระบุระบบต้นทางระยะไกล ให้ใช้อ็อพชัน remote_src=yes

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

Playbook ด้านบนจะคลายการบีบอัดไฟล์ /tmp/web.bz2 บนโหนดระยะไกลไปยังไดเร็กทอรี /opt/

5. กำหนดเวลางานด้วย Ansible

โมดูล cron ช่วยในการกำหนดเวลางานใน Ansible Playbooks

สร้างงานที่กำหนดเวลาไว้

พิจารณา Playbook ด้านล่าง

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

Playbook จะรันสคริปต์การเข้างานในวันที่ 5 เมษายน เวลา 17.00 น.

กำหนดเวลาสคริปต์ตามวันที่ระบุ

หากคุณต้องการกำหนดเวลาให้สคริปต์นี้ทำงานเฉพาะในกรณีที่วันที่ 5 เมษายนเป็นวันจันทร์ ให้ใช้แอตทริบิวต์ weekday: 1 0 หมายถึงวันอาทิตย์ และ 6 หมายถึงวันเสาร์ตามสัญลักษณ์ครอน

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

เครื่องหมายดอกจัน (*) ในฟิลด์ใดๆ เหล่านี้บ่งบอกถึงค่าใดๆ

เรียกใช้งานในวันที่

หากต้องการรันงานในวันที่ 5 เมษายน เวลา 17.00 น. ไม่ว่าวันธรรมดาจะเป็นวันใดก็ตาม ให้ใช้พารามิเตอร์เวลาตามที่แสดง

month: 4
day: 5
hour: 17
minute: 00
weekday: *

ดำเนินงานในวันที่กำหนดในทุกเดือน

หากต้องการดำเนินงาน cron ในวันที่ 5 ของทุกเดือน เวลา 17.00 น. ให้ใช้การตั้งค่าด้านล่าง

month: *
day: 5
hour: 17
minute: 00
weekday: *

ปฏิบัติงานในแต่ละวัน

หากต้องการดำเนินงาน cron ทุกวันเวลา 17.00 น. ให้ตั้งค่าเวลาตามที่แสดง:

month: *
day: *
hour: 17
minute: 00
weekday: *

ดำเนินงานทุกๆ 5 ชั่วโมง

หากต้องการดำเนินงาน cron ทุก 5 ชั่วโมง ให้ใช้ค่าขั้นตอน */5 ตามที่แสดง

month: *
day: *
hour: */5
minute: *
weekday: *

6. จัดการผู้ใช้และกลุ่มด้วย Ansible

คุณยังสามารถจัดการผู้ใช้และกลุ่มภายใน Playbooks ของ Ansible ได้อย่างง่ายดาย

สร้างผู้ใช้ใหม่

หากต้องการสร้างผู้ใช้ใหม่ ให้ใช้โมดูล ผู้ใช้ ตามที่แสดง

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

คุณยังสามารถเพิ่มตัวเลือกเพิ่มเติมได้ เช่น UID กลุ่ม

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

ลบผู้ใช้

หากต้องการลบผู้ใช้ ให้ใช้คำสั่ง remove: yes

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

สร้างกลุ่มใหม่

หากต้องการสร้างกลุ่มใหม่ ให้ใช้โมดูล กลุ่ม

- name: Create a group
  group:
    name: developers

7. สร้างไฟล์และไดเร็กทอรีด้วย Ansible

หากต้องการสร้างไฟล์ของไดเรกทอรี ให้ใช้โมดูล ไฟล์

สร้างไดเรกทอรีใหม่

เช่น การสร้างไดเร็กทอรีใหม่

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

คุณสามารถเพิ่มแอตทริบิวต์อื่นๆ เช่น เจ้าของ กลุ่ม และสิทธิ์ของไฟล์

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

นอกจากนี้ คุณสามารถสร้างไดเร็กทอรีแบบวนซ้ำได้โดยใช้คำสั่ง recurse: yes

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

สร้างไฟล์

หากต้องการสร้างไฟล์ ให้ใช้ตัวเลือก state: touch

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. การจัดการพื้นที่เก็บข้อมูลด้วย Ansible

โมดูล lvg ใช้เพื่อกำหนดค่าวอลุ่มและกลุ่ม LVM

สร้างกลุ่มวอลุ่ม LVM

พิจารณา Playbook ด้านล่าง:

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

ซึ่งจะสร้างกลุ่มวอลุ่มที่ด้านบนของพาร์ติชัน /dev/sda1 ที่มีขนาดขอบเขตจริง 32 MB

เมื่อสร้างแล้ว ให้ใช้โมดูล lvol เพื่อสร้างโลจิคัลวอลุ่มดังที่แสดง

สร้างโลจิคัลวอลุ่ม

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. การจัดการระบบไฟล์ด้วย Ansible

หากต้องการสร้างระบบไฟล์บนอุปกรณ์บล็อก ให้ใช้โมดูล ระบบไฟล์

สร้างระบบไฟล์

Playbook ด้านล่างสร้างประเภทระบบไฟล์ xfs บนบล็อควอลลุม

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

เมานต์ระบบไฟล์

คุณสามารถดำเนินการเมานต์บล็อควอลลุมต่อไปได้โดยใช้โมดูล เมานต์ ดังที่แสดงใน Playbook ด้านล่าง:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
บทสรุป

นี่เป็นการสรุปหัวข้อ เราได้ครอบคลุมงานการดูแลระบบต่างๆ ที่สามารถทำได้โดยโมดูลในตัวเฉพาะใน Ansible Playbooks