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