
Ansible เป็นโปรแกรม Opensource ฟรีไม่มีค่าใช้จ่าย พัฒนาโดยบริษัท Red Hat โดยโปรแกรม Ansible ถูกนำมาใช้งานเพื่อจัดการและดูแลเครื่อง Server หลายๆเครื่องจากเครื่องกลาง ซึ่งเครื่องกลางถูกเรียกว่า Control Node ส่วนเครื่องที่ถูกจัดการและดูแลเรียกว่า Managed Node
เครื่องที่รับบทบาทเป็น Control Node คือเครื่องรับคำสั่งจากคนที่เป็น System Admin และส่งคำสั่งผ่านทาง SSH Protocol ไปยังเครื่อง Managed Node หลายๆเครื่องครั้งละหนึ่งเครื่องหรือมากกว่าหนึ่งเครื่องก็ได้ จากนั้น Managed Node ได้รับคำสั่งจะทำงานตามคำสั่งและส่งผลกลับมาที่เครื่อง Control Node
เตรียมเครื่องสำหรับทดลอง
การทดสอบครั้งนี้ประกอบด้วยเครื่อง Server จำนวน 3 เครื่อง คือ Control Node จำนวน 1 เครื่อง และ Managed Node จำนวน 2 เครื่อง โดยเครื่องที่ใช้ในการทดสอบทั้งหมดทำงานอยู่บน Virtual Box เชื่อมต่อเครือข่ายด้วย Host Only Network
ตารางแสดงข้อมูล Network ของเครื่อง
Node Name | Host Name | IP Address |
Control Node | ansible.control.local | 192.168.56.10 |
Managed Node 1 | ansible.managednode1.local | 192.168.56.20 |
Managed Node 2 | ansible.managednode2.local | 192.168.56.30 |
ขั้นตอนการสร้าง Host Only Network บน VirtualBox
Host Only เป็น Feature ของ VirtualBox ที่ทำให้เครื่อง Guest (VM) สามารถเชื่อมต่อเครื่อง Host ได้ ผ่านทาง Host Only Network Adapter แต่จำเป็นต้องมีการตั้งค่าเล็กน้อยเพื่อให้เชื่อมต่อกันได้
เปิดโปรแกรม VirtualBox แล้วไปที่ Menu bar แล้ว Click ที่ File -> Host Network Manager

กดปุ่ม Create แล้วตั้งค่าแบบ Manually ตามภาพด้านล่าง

เพียงเท่านี้ก็สามารถใช้งาน Host Only Network ได้แล้วในขั้นตอนการสร้าง VM เพียงเพิ่ม Network Adapter แล้วเลือก Host Only ตามที่ตั้งค่าไว้ ก็สามารถเชื่อม Host ไปยัง Guest ต่างๆได้ผ่านเครื่อข่าย Host Only
ขั้นตอนการเตรียมเครื่องบน VirtualBox
Control Node
เครื่อง Control Node เป็นเครื่องที่ใช้สำหรับรับคำสั่งจากคนที่เป็น System Admin จึงไม่ต้องการความแรงของเครื่อง ในการทดสอบจึงกำหนด Spec ของ Control Node ไว้ดั้งนี้
- 1 CPU
- 1 GB RAM
- 25 GB HDD
ขั้นตอนการเตรียม Virtual Box สำหรับ Control Node
- เปิดโปรแกรม Virtual Box แล้ว Click ที่ปุ่ม New
- กรอกชื่อและเลือกระบบปฏิบัติการตามภาพด้านล่าง
– Name: CentOSControlNode
– Machine Folder: [ตามต้องการ ตัวอย่างใช้ Default]
– Type: Linux
– Version: Red Hat (64-bit) - ระบุ Memory Size เป็น 1 GB คือ 1024 MB
- เลือกชนิดของ Hard disk เป็น Create a virtual hard disk now
- เลือกชนิดของ File Hard Disk เป็น VDI (VirtualBox Disk Image)
- ระบุ Fixed Size เก็บลงบน Disk จริง
- เลือก Folder สำหรับเก็บ File Hard Disk และระบุขนาด Hard Disk เป็น 25.00 GB
- เสร็จสิ้นการสร้าง VM ใหม่
- ตั้งค่าให้ VM กดปุ่ม Setting
- ตั้งค่า Boot Order ให้เรียงลำดับตามภาพด้านล่าง
- ตรวจสอบ CPU ต้องเป็น 1 CPU
- ระบุ File ISO ของ CentOS8 สำหรับติดตั้ง
- ตั้งค่า Network Adapter 2 ให้เป็น Host Only ตามภาพด้านล่าง
- เสร็จสิ้นการตั้งค่า VM ตรวจสอบความถูกต้องตามกรอปสีแดง
Managed Nodes
เครื่อง Managed Node เป็นเครื่องที่ใช้สำหรับติดตั้งและทำงานประมวลผลโปรแกรมต่างๆจึงมีการตั้งค่าเครื่องแตกต่างจาก Control Node เล็กน้อยคือ แต่สำหรับการใช้งานจริงต้องพิจารณาตามโปรแกรมที่ต้องการติดตั้งบนเครื่องนั้นๆ
- 2 CPUs
- 4 GB RAM
- 80 GB HDD
ขั้นตอนการเตรียม Virtual Box สำหรับ Managed Node
ขึ้นตอนเหมือนกับการเตรียมเครื่อง Control Node แตกต่างเพียง Spec ของเครื่องเท่านั้น
เครื่อง Managed Node 1 ชื่อ Name: CentOSManagedNode1

เครื่อง Managed Node 2 ชื่อ Name: CentOSManagedNode2

ขั้นตอนการติดตั้งระบบปฏิบัติการ CentOS 8
ในการติดตั้งระบบปฏิบัติการบนเครื่อง Control Node, Managed Node 1 และ Manged Node 2 จะมีขั้นตอนส่วนใหญ่ที่เหมือนกันแตกต่างเพียง 1 จุดคือ ขั้นตอนการตั้งค่า IP Address แต่ละเครื่องที่แตกต่างกันเท่านั้น
ติดตั้งระบบปฏิบัติการ
- เปิดโปรแกรม VirtualBox แล้วเลือก VM ชื่อ CenOSControlNode จากนั้นกดปุ่ม Start
- เมื่อ Boot เสร็จแล้วจะพบ Menu ขึ้นมาให้เลือก Install CenOS Linux 8
- จากนั้นจะขึ้นหน้าจอให้เลือกภาษาและประเทศ แล้วกด Continue
- ในตอนนี้จะขึ้นหน้าจอให้เลือก Options ต่างๆที่ต้องการติดตั้ง
- เลือก Installation Destination เพื่อเลือก Hard Disk ที่ต้องการติดตั้ง OS
เลือก Hard Disk ที่ต้องการติดตั้ง แล้วกดปุ่ม Done - เลือก Software Selection เพื่อเลือก Software ที่ต้องการติดตั้ง
เลือกเป็น Minimal Install จากนั้นกดปุ่ม Done - เลือกเมนู Network And Host Name
เลือก Ethernet (enp0s3) เพื่อตั้งค่า NAT Adapter
กดปุ่ม Configure
จากนั้นไปที่ TAB “General” แล้วเครื่องหมายถูก (/) ที่ “Connect automatically with priority” จากนั้นกดปุ่ม Save
จากนั้นกดปุ่ม Toggle เพื่อ Turn On
กดเลือก Ethernet (enp0s8) เพื่อตั้งค่า Host Only Adapter จากนั้นกดปุ่ม Configure
จากนั้นไปที่ TAB “General” แล้วทำเครื่องหมายถูก (/) ที่ “Connect automatically with priority” และใส่ค่าเป็น 1
จากนั้นไปที่ TAB “IPv4 Settings” แล้วเลือก Method เป็น Manual แล้วกดปุ่ม Add จากนั้นกรอกข้อมูลดังนี้
– Address : 192.168.56.10
– Netmask: 255.255.255.0
– Gateway: 192.168.56.1
จากนั้นกดปุ่ม Save
**
ในขั้นตอนนี้สำหรับ Managed Node 1 และ 2 ให้เปลี่ยน Address เป็น 192.168.56.20 และ 192.168.56.30 ตามลำดับ
**
จากนั้นกดปุ่ม Toggle เพื่อ Turn On
หลังจากนั้นใส่ชื่อ Host Name เป็น ansible.control.local แล้วกดปุ่ม Apply แล้วกดปุ่ม Done
**
สำหรับเครื่อง Managed Node 1 และ 2 ให้เปลี่ยน Host Name เป็น ansible.managednode1.local แลพ ansible.managednode2.local ตามลำดับ
** - เลือกตั้งค่า Time & Date
เลือก Time & Date เป็นประเทศไทย จากแผนที่ จากนั้นกดปุ่ม Done - ตั้งรหัสผ่านให้ user root
จากนั้นใส่รหัสผ่านให้ root ตามต้องการ แล้วกดปุ่ม Done - สร้าง User ผู้ใช้งาน กดปุ่ม User Creation
กรอกชื่อเต็ม และชื่อผู้ใช้ ตามต้องการ และทำเครื่องหมายถูก “Make this user administrator” และ ตั้งรหัสผ่าน และกดปุ่ม Done - กดปุ่ม Begin Installation
และรอให้ Install จนเสร็จสิ้น - กดปุ่ม reboot เพื่อเสร็จสิ้นการติดตั้ง CentOS
รอ Reboot แล้วทดสอบ login เข้าเครื่องด้วย user ที่ไม่ใช่ root
Login สำเร็จ
เมื่อติดตั้ง CentOS 8 บนเครื่อง Control Node เรียบร้อยให้ดำเนินการติดตั้ง CentOS 8 บน Managed Node 1 และ 2 ในขั้นตอนการตั้งค่า Network And Host Name ให้ระบุ IP Address และ Host Name ตามตารางด้านล่างคือ
Node Name | Host Name | IP Address |
Control Node | ansible.control.local | 192.168.56.10 |
Managed Node | ansible.managednode1.local | 192.168.56.20 |
Managed Node | ansible.managednode2.local | 192.168.56.30 |
หลังติดตั้ง CentOS 8 ครบทั้ง 3 เครื่อง ให้ Update OS ทั้ง 3 เครื่องด้วยคำสั่ง
$sudo dnf update -y
จากนั้นทดสอบการเชื่อมต่อด้วยคำสั่ง ping จากเครื่อง Control Node ไปยัง Managed Node 1 และ 2 และ ใช้คำสั่ง ping จาก Managed Node 1 และ 2 กลับไปยัง Control Node
# Control Node
$ping 192.168.56.20
$ping 192.168.56.30
# Managed Node 1
$ping 192.168.56.10
# Managed Node 2
$ping 192.168.56.10
ทดสอบ ping จาก Control Node ไปยัง Managed Node 1

ทดสอบ ping จาก Control Node ไปยัง Managed Node 2

ทดสอบ ping จาก Managed Node 1 กลับไปยัง Control Node

ทดสอบ ping จาก Managed Node 2 กลับไปยัง Control Node

Install Ansible บนเครื่อง Control Node
โปรแกรม Ansible มีอยู่ใน EPEL (Extra Packages For Enterprise Linux) ดังนั้นจึงติดตั้งได้ไม่ยากนักบน CentOS 8
1. ตรวจสอบ EPEL ว่าติดตั้งบนเครื่อง Control Node หรือยังด้วยคำสั่ง
$sudo dnf makecache

2. ติดตั้ง EPEL ด้วยคำสั่ง
$sudo dnf install epel-release -y

3. ตรวจสอบ EPEL อีกครั้ง
$sudo dnf makecache

4. ติดตั้ง Ansible ด้วยคำสั่ง
$sudo dnf install ansible -y

รอจนติดตั้งเสร็จ

ตรวจสอบการติดตั้งด้วยคำสั่ง
$ansible --version

5. ติดตั้ง Ansible เรียบร้อย
แก้ไข File Hosts ที่เครื่อง Control Node
File Hosts อยู่ที่ Directory /etc/hosts ใช้สำหรับระบุ Host Name และ IP Address เพื่อให้ Computer สามารถเชื่อมต่อกันผ่าน Host Name ได้
1. ใช้คำสั่ง vi เพื่อแก้ไข File hosts
$sudo vi /etc/hosts
แก้ไข File hosts ของเครื่อง Control Node ดังนี้
192.168.56.20 ansible.managednode1.local
192.168.56.30 ansible.managednode2.local

2. ทดสอบ ping จาก Control Node ไปยัง Manage Node 1

3. ทดสอบ ping จากเครื่อง Control Node ไปยัง Managed Node 2

สร้าง SSH Key
SSH Key เป็นการสร้างการเชื่อมต่อระหว่าง Control Node กับ Managed Node อย่างปลอดภัยเนื่องจาก Ansible ใช้ SSH Protocol ส่งคำสั่งไปยัง Managed Node
1. ใช้คำสั่ง ssh-keygen เพื่อสร้าง key สำหรับเชื่อมต่อหว่าง managed node
$ssh-keygen
กด Enter ทั้งหมดไม่ต้องพิมพ์ค่าใดๆลงไป

กด Enter

กด Enter

กด Enter

เสร็จสิ้น ssh-keygen

2. Copy ID ไปยังเครื่อง Managed Node 1 คำสั่งมีรูปแบบคือ ssh-copy-id user@hostname
$ssh-copy-id tmahachan@ansible.managednode1.local

ตอบ yes

กรอกรหัสผ่านของเครื่อง Managed Node 1

เสร็จสิ้นคำสั่ง

3. Copy ID ไปยังเครื่อง Managed Node 2
$ssh-copy-id tmahachan@ansible.managednode2.local
หลังจากนั้นก็ทำแบบเดียวกับการ copy id ของ managed node 1

ตั้งค่าเครื่อง Managed Node ให้เข้าถึงได้โดยไม่ต้องใช้ Password
การเชื่อมต่อระหว่าง Control Node กับ Managed Node โดยผ่านทางโปรแกรม Ansible เป็นการสั่งงานไปยังหลายๆเครื่องพร้อมกัน ดังนั้น Password จึงเป็นอุปสรรคในการเชื่อมต่อ จึงจำเป็นต้องตั้งค่าไม่ต้องใช้ Password เชื่อมต่อเครื่อง managed node ส่วนในเรื่องความปลอดภัยไม่ต้องกังวล เพราะ Managed Node สามารถเชื่อมได้กับ Control Node ผ่าน Key ที่สร้างไว้ในขั้นตอนที่ผ่านมา
1. Login เข้าเครื่อง managed node แล้วแต่ละเครื่องใช้คำสั่งด้านล่างนี้
$echo "$(whoami) ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/$(whoami)
เครื่อง Managed Node 1

เครื่อง Managed Node 2

2. ทดสอบ Login จากเครื่อง Control Node ไปยัง Managed Node ด้วยคำสั่งด้านล่างจะต้องไม่มีการถามให้กรอก password
$ssh tmahachan@ansible.managednode1.local

และ
$ssh tmahachan@ansible.managednode2.local

สร้าง File Hosts ของ Ansible และทดสอบคำสั่ง
Ansible ใช้ File Hosts เป็นข้อมูลการเชื่อมต่อว่าแต่ละ Hosts มีข้อมูลใดบาง เช่นข้อมูล username ของเครื่อง Managed Node เป็นต้น
1. สร้าง Directory สำหรับเก็บ File Hosts
$mkdir ~/ansible
2. สร้าง File Hosts ใน Directory ~/ansible
$cd ~/ansible
$vi hosts
ข้อมูลใน File hosts เป็นดังนี้
ansible.managednode1.local ansible_user=tmahachan
ansible.managednode2.local ansible_user=tmahachan

3. ทดสอบคำสั่งเพื่อแสดง hosts ทั้งหมด
$cd ~/ansible
$ansible -i hosts --list-hosts all

4. ทดสอบคำสั่ง Ping
$ansible -i hosts -m ping all

5. เสร็จสิ้นการทำสอบคำสั่ง Ansible
สรุป
Ansible เป็นโปรแกรมที่ให้งาน Administration เครื่อง Server ต่างๆได้พร้อมกันหลายเครื่องช่วยให้ประหยัดเวลาในการตั้งค่าเครื่อง Server ที่มีจำนวนมากให้เสร็จด้วย Control Node เพียงเครื่องเดียว และความสามารถของ Ansible ไม่ได้หมดเพียงเท่านี้เพื่อนๆสามารถหาความรู้เพิ่มเติมได้จาก Internet ต่อไป
บทความนี้ค่อนข้างยาวเพราะเนื้อหาขั้นตอนเยอะต้องให้ผู้อ่านสามารถอ่านแล้วทำตามได้ โดยทุกขั้นตอนมีภาพประกอบเกือบทั้งช่วยให้ผู้อ่านเห็นภาพจริงและสามารถทำตามได้อย่างถูกต้อง
Leave a Reply