- การติดตั้ง Ansible บน Ubuntu แบบทีละขั้นตอน
- โครงสร้างการทำงาน
- ข้อกำหนดเบื้องต้น
- เลือกแพ็กเกจ Ansible ให้เหมาะสม
- วิธีที่ 1: ติดตั้งผ่าน Ansible PPA
- วิธีที่ 2: ติดตั้งจาก Ubuntu Repository
- วิธีที่ 3: ติดตั้งด้วย pipx
- การเตรียม SSH สำหรับเชื่อมต่อ Managed Node
- สร้างโปรเจกต์ Ansible แรก
- สร้าง Inventory
- ทดสอบการเชื่อมต่อด้วย Ansible Ping
- สร้างไฟล์ ansible.cfg
- ทดลองใช้ Ad Hoc Command
- ทดลองสร้าง Playbook ติดตั้ง Nginx
- การอัปเดต Ansible
- การถอนการติดตั้ง
- ปัญหาที่พบบ่อย
- แนวทางด้านความปลอดภัย
- สรุป
- เอกสารอ้างอิง
#การติดตั้ง Ansible บน Ubuntu แบบทีละขั้นตอน
Ansible เป็นเครื่องมือสำหรับทำงานอัตโนมัติ เช่น ติดตั้งแพ็กเกจ ตั้งค่าเซิร์ฟเวอร์ Deploy ระบบ และจัดการเครื่องจำนวนมากจากศูนย์กลาง จุดเด่นคือเป็นแบบ Agentless จึงไม่จำเป็นต้องติดตั้ง Agent ของ Ansible บนเครื่องปลายทาง โดยทั่วไป Ansible จะเชื่อมต่อไปยังเครื่อง Linux ผ่าน SSH
บทความนี้อธิบายการติดตั้ง Ansible บน Ubuntu การเตรียม SSH การสร้าง Inventory และการทดสอบสั่งงานเครื่องปลายทาง
#โครงสร้างการทำงาน
ระบบที่ใช้ Ansible แบ่งเป็น 2 ส่วนหลัก
- Control Node คือเครื่อง Ubuntu ที่ติดตั้งและเรียกใช้ Ansible
- Managed Node คือเซิร์ฟเวอร์ปลายทางที่ Ansible เข้าไปจัดการ
เครื่อง Managed Node ไม่จำเป็นต้องติดตั้ง Ansible แต่โดยทั่วไปต้องมี Python และต้องอนุญาตให้ Control Node เชื่อมต่อผ่าน SSH ได้
#ข้อกำหนดเบื้องต้น
ตัวอย่างนี้ต้องมีสิ่งต่อไปนี้
- เครื่อง Control Node ที่ใช้ Ubuntu
- บัญชีผู้ใช้ที่สามารถใช้
sudo - Managed Node อย่างน้อย 1 เครื่อง
- IP address หรือชื่อโดเมนของ Managed Node
- บัญชี SSH และ Private Key สำหรับเชื่อมต่อ Managed Node
- Python 3 บน Managed Node
ตรวจสอบระบบปฏิบัติการและ Python บน Control Node ได้ด้วยคำสั่ง
cat /etc/os-release
python3 --version
#เลือกแพ็กเกจ Ansible ให้เหมาะสม
Ansible มีแพ็กเกจหลัก 2 รูปแบบ
| แพ็กเกจ | รายละเอียด | เหมาะกับใคร |
|---|---|---|
ansible |
มี ansible-core และ Collections ที่นิยมใช้งานรวมมาด้วย |
ผู้เริ่มต้นและการใช้งานทั่วไป |
ansible-core |
มี Runtime, ภาษา และโมดูลพื้นฐานขนาดเล็กกว่า | ผู้ที่ต้องการเลือกติดตั้ง Collections เอง |
สำหรับผู้เริ่มต้น แนะนำให้ติดตั้งแพ็กเกจ ansible
#วิธีที่ 1: ติดตั้งผ่าน Ansible PPA
Ansible PPA มักมี Ansible รุ่นใหม่กว่าแพ็กเกจใน Ubuntu repository จึงเหมาะกับการติดตั้งบน Ubuntu สำหรับการเรียนรู้และใช้งานทั่วไป
#1. อัปเดตรายการแพ็กเกจ
sudo apt update
#2. ติดตั้งเครื่องมือสำหรับเพิ่ม Repository
sudo apt install -y software-properties-common
#3. เพิ่ม Ansible PPA
sudo add-apt-repository --yes --update ppa:ansible/ansible
#4. ติดตั้ง Ansible
sudo apt install -y ansible
#5. ตรวจสอบการติดตั้ง
ansible --version
ผลลัพธ์จะแสดงข้อมูลสำคัญ เช่น รุ่นของ ansible-core, ตำแหน่งไฟล์ Configuration และ Python interpreter ที่ Ansible ใช้งาน
#วิธีที่ 2: ติดตั้งจาก Ubuntu Repository
ถ้าต้องการติดตั้งอย่างง่ายโดยไม่เพิ่ม PPA สามารถใช้แพ็กเกจจาก Ubuntu repository ได้โดยตรง
sudo apt update
sudo apt install -y ansible
ansible --version
วิธีนี้สะดวกและดูแลผ่าน apt ได้ง่าย แต่รุ่นที่ได้รับอาจเก่ากว่า PPA ขึ้นอยู่กับ Ubuntu release ที่กำลังใช้งาน
#วิธีที่ 3: ติดตั้งด้วย pipx
pipx จะติดตั้ง Ansible ใน Python virtual environment ที่แยกจาก Python ของระบบ ช่วยลดปัญหาแพ็กเกจ Python ชนกัน และเหมาะเมื่อไม่ต้องการติดตั้ง Ansible แบบ System-wide
#1. ติดตั้ง pipx
sudo apt update
sudo apt install -y pipx
pipx ensurepath
ออกจากระบบแล้วเข้าสู่ระบบใหม่ หรือโหลด Profile อีกครั้ง
source ~/.profile
#2. ติดตั้ง Ansible
pipx install --include-deps ansible
หากต้องการเฉพาะแพ็กเกจขนาดเล็ก ให้ติดตั้ง ansible-core แทน
pipx install ansible-core
#3. ตรวจสอบการติดตั้ง
ansible --version
ansible-community --version
คำสั่งแรกแสดงรุ่นของ ansible-core ส่วนคำสั่งที่สองใช้ตรวจสอบรุ่นของ Community package แบบเต็ม
ควรเลือกติดตั้งเพียงแนวทางเดียว เพื่อหลีกเลี่ยงปัญหาคำสั่ง
ansibleจากหลายตำแหน่งในPATH
#การเตรียม SSH สำหรับเชื่อมต่อ Managed Node
#1. สร้าง SSH Key บน Control Node
ถ้ายังไม่มี SSH Key ให้สร้างด้วยคำสั่ง
ssh-keygen -t ed25519 -C "ansible-control"
กด Enter เพื่อใช้ตำแหน่งเริ่มต้น หรือกำหนดชื่อไฟล์และ Passphrase ตามนโยบายความปลอดภัยของระบบ
#2. นำ Public Key ไปยัง Managed Node
กรณีเซิร์ฟเวอร์รองรับการเข้าสู่ระบบด้วยรหัสผ่าน สามารถใช้คำสั่ง
ssh-copy-id ubuntu@192.0.2.10
หากเป็น Cloud VM ให้นำเนื้อหาจากไฟล์ Public Key เช่น ~/.ssh/id_ed25519.pub ไปเพิ่มผ่านระบบของผู้ให้บริการ Cloud หรือเพิ่มไว้ในไฟล์ ~/.ssh/authorized_keys ของผู้ใช้ปลายทาง
#3. ทดสอบ SSH
ssh ubuntu@192.0.2.10
ควรทดสอบให้ SSH เชื่อมต่อสำเร็จก่อนเริ่มใช้ Ansible และตรวจสอบว่า Managed Node มี Python 3
python3 --version
#สร้างโปรเจกต์ Ansible แรก
สร้างไดเรกทอรีสำหรับทดลองใช้งาน
mkdir -p ~/ansible-lab
cd ~/ansible-lab
โครงสร้างไฟล์เริ่มต้นจะเป็นดังนี้
ansible-lab/
├── ansible.cfg
├── inventory.ini
└── install-nginx.yml
#สร้าง Inventory
Inventory คือไฟล์ที่เก็บรายชื่อและข้อมูลการเชื่อมต่อ Managed Node สร้างไฟล์ inventory.ini
[webservers]
web1 ansible_host=192.0.2.10 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_ed25519
เปลี่ยน IP address, ชื่อผู้ใช้ และตำแหน่ง Private Key ให้ตรงกับเซิร์ฟเวอร์จริง จากนั้นตรวจสอบว่า Ansible อ่าน Inventory ได้ถูกต้อง
ansible-inventory -i inventory.ini --list
#ทดสอบการเชื่อมต่อด้วย Ansible Ping
ansible webservers -i inventory.ini -m ansible.builtin.ping
หากสำเร็จจะพบผลลัพธ์ลักษณะนี้
web1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ansible.builtin.ping ไม่ใช่การส่ง ICMP packet แบบคำสั่ง ping ของระบบปฏิบัติการ แต่เป็นการตรวจสอบว่า Ansible เชื่อมต่อและเรียกใช้โมดูลบน Managed Node ได้
#สร้างไฟล์ ansible.cfg
สร้างไฟล์ ansible.cfg เพื่อกำหนด Inventory เริ่มต้นของโปรเจกต์
[defaults]
inventory = inventory.ini
หลังจากนั้นสามารถตัดตัวเลือก -i inventory.ini ออกจากคำสั่งได้
ansible webservers -m ansible.builtin.ping
#ทดลองใช้ Ad Hoc Command
ดูข้อมูลระบบปฏิบัติการของ Managed Node
ansible webservers -m ansible.builtin.command -a "cat /etc/os-release"
ตรวจสอบพื้นที่ดิสก์
ansible webservers -m ansible.builtin.command -a "df -h"
Ad Hoc Command เหมาะกับงานสั้น ๆ หากเป็นงานที่ต้องทำซ้ำ ควรเขียนเป็น Playbook เพื่อให้ตรวจสอบ แก้ไข และเก็บใน Git ได้ง่ายกว่า
#ทดลองสร้าง Playbook ติดตั้ง Nginx
สร้างไฟล์ install-nginx.yml
---
- name: Install and start Nginx
hosts: webservers
become: true
tasks:
- name: Install Nginx package
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
- name: Ensure Nginx is running
ansible.builtin.service:
name: nginx
state: started
enabled: true
ตรวจสอบ Syntax ก่อนเรียกใช้งานจริง
ansible-playbook install-nginx.yml --syntax-check
ทดลองดูสิ่งที่อาจเปลี่ยนแปลงโดยยังไม่แก้ไขเครื่องปลายทาง
ansible-playbook install-nginx.yml --check
เรียกใช้ Playbook
ansible-playbook install-nginx.yml
ถ้าบัญชีปลายทางต้องกรอกรหัสผ่านสำหรับ sudo ให้เพิ่ม --ask-become-pass หรือ -K
ansible-playbook install-nginx.yml -K
จากนั้นเปิดเว็บเบราว์เซอร์ไปยัง IP address ของ Managed Node หรือทดสอบด้วย
curl http://192.0.2.10
#การอัปเดต Ansible
กรณีติดตั้งด้วย apt
sudo apt update
sudo apt install --only-upgrade ansible
กรณีติดตั้งด้วย pipx
pipx upgrade --include-injected ansible
#การถอนการติดตั้ง
กรณีติดตั้งด้วย apt
sudo apt remove ansible
หากไม่ต้องการใช้ Ansible PPA แล้ว สามารถนำออกได้ด้วย
sudo add-apt-repository --remove ppa:ansible/ansible
sudo apt update
กรณีติดตั้งด้วย pipx
pipx uninstall ansible
#ปัญหาที่พบบ่อย
#พบข้อความ ansible: command not found
ตรวจสอบตำแหน่งคำสั่ง
command -v ansible
ถ้าติดตั้งด้วย pipx ให้เรียก
pipx ensurepath
source ~/.profile
#เชื่อมต่อไม่ได้และพบ Permission denied (publickey)
ตรวจสอบชื่อผู้ใช้ ตำแหน่ง Private Key และสิทธิ์ของไฟล์
chmod 600 ~/.ssh/id_ed25519
ssh -i ~/.ssh/id_ed25519 ubuntu@192.0.2.10
ควรทำให้คำสั่ง SSH ปกติเชื่อมต่อได้ก่อน แล้วจึงทดสอบด้วย Ansible อีกครั้ง
#พบ Host key verification failed
เชื่อมต่อ SSH ไปยังเครื่องปลายทางด้วยตนเองหนึ่งครั้ง แล้วตรวจสอบ Fingerprint ก่อนยืนยัน
ssh ubuntu@192.0.2.10
ไม่แนะนำให้ปิด Host Key Checking ในระบบ Production เพราะจะลดความสามารถในการตรวจสอบตัวตนของเซิร์ฟเวอร์
#Managed Node ไม่มี Python
เข้าสู่ Managed Node แล้วติดตั้ง Python 3
sudo apt update
sudo apt install -y python3
#พบข้อความเกี่ยวกับรหัสผ่าน sudo
เรียก Playbook พร้อมตัวเลือก -K
ansible-playbook install-nginx.yml -K
#แนวทางด้านความปลอดภัย
- ใช้ SSH Key แทนรหัสผ่านเมื่อเป็นไปได้
- ตั้ง Passphrase ให้ Private Key และใช้
ssh-agentช่วยจัดการ Key - จำกัดสิทธิ์ผู้ใช้และ
sudoเท่าที่จำเป็น - อย่าเก็บรหัสผ่าน Token หรือ Private Key ไว้ใน Git
- ใช้ Ansible Vault สำหรับข้อมูลลับที่ต้องอยู่ในโปรเจกต์
- ตรวจสอบ SSH Host Fingerprint ก่อนยืนยันเครื่องใหม่
- ทดลอง Playbook ใน Development หรือ Staging ก่อนนำไปใช้กับ Production
#สรุป
การเริ่มต้นใช้งาน Ansible บน Ubuntu มีขั้นตอนหลักดังนี้
- ติดตั้ง Ansible ผ่าน PPA, Ubuntu repository หรือ
pipx - เตรียม SSH Key และทดสอบเชื่อมต่อ Managed Node
- สร้าง Inventory เพื่อระบุเครื่องปลายทาง
- ทดสอบด้วยโมดูล
ansible.builtin.ping - เขียน Playbook เพื่อให้งานติดตั้งและตั้งค่าระบบทำซ้ำได้
สำหรับผู้เริ่มต้น การติดตั้งแพ็กเกจ ansible ผ่าน Ansible PPA เป็นวิธีที่ตรงไปตรงมาบน Ubuntu ส่วน pipx เหมาะกับผู้ที่ต้องการแยกสภาพแวดล้อม Python ออกจากระบบหลัก