ติดตั้งและทดลองใช้งาน Ansible บน CentOS 8

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 NameHost NameIP Address
Control Nodeansible.control.local192.168.56.10
Managed Node 1ansible.managednode1.local192.168.56.20
Managed Node 2ansible.managednode2.local192.168.56.30
ตารางแสดงชื่อ Node และ IP Address

ขั้นตอนการสร้าง 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

  1. เปิดโปรแกรม Virtual Box แล้ว Click ที่ปุ่ม New
    ภาพปุ่มสร้าง VM ใหม่
  2. กรอกชื่อและเลือกระบบปฏิบัติการตามภาพด้านล่าง
    – Name: CentOSControlNode
    – Machine Folder: [ตามต้องการ ตัวอย่างใช้ Default]
    – Type: Linux
    – Version: Red Hat (64-bit)
    ชื่อและระบบปฏิบัติการ
  3. ระบุ Memory Size เป็น 1 GB คือ 1024 MB
  4. เลือกชนิดของ Hard disk เป็น Create a virtual hard disk now
  5. เลือกชนิดของ File Hard Disk เป็น VDI (VirtualBox Disk Image)
    เลือกชนิดไฟล์ฮาร์ดดิสก์
  6. ระบุ Fixed Size เก็บลงบน Disk จริง
  7. เลือก Folder สำหรับเก็บ File Hard Disk และระบุขนาด Hard Disk เป็น 25.00 GB
  8. เสร็จสิ้นการสร้าง VM ใหม่
  9. ตั้งค่าให้ VM กดปุ่ม Setting
  10. ตั้งค่า Boot Order ให้เรียงลำดับตามภาพด้านล่าง
  11. ตรวจสอบ CPU ต้องเป็น 1 CPU
  12. ระบุ File ISO ของ CentOS8 สำหรับติดตั้ง
  13. ตั้งค่า Network Adapter 2 ให้เป็น Host Only ตามภาพด้านล่าง
  14. เสร็จสิ้นการตั้งค่า 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 1

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

เครื่อง Managed Node 2

ขั้นตอนการติดตั้งระบบปฏิบัติการ CentOS 8

ในการติดตั้งระบบปฏิบัติการบนเครื่อง Control Node, Managed Node 1 และ Manged Node 2 จะมีขั้นตอนส่วนใหญ่ที่เหมือนกันแตกต่างเพียง 1 จุดคือ ขั้นตอนการตั้งค่า IP Address แต่ละเครื่องที่แตกต่างกันเท่านั้น

ติดตั้งระบบปฏิบัติการ

  1. เปิดโปรแกรม VirtualBox แล้วเลือก VM ชื่อ CenOSControlNode จากนั้นกดปุ่ม Start
  2. เมื่อ Boot เสร็จแล้วจะพบ Menu ขึ้นมาให้เลือก Install CenOS Linux 8
  3. จากนั้นจะขึ้นหน้าจอให้เลือกภาษาและประเทศ แล้วกด Continue
  4. ในตอนนี้จะขึ้นหน้าจอให้เลือก Options ต่างๆที่ต้องการติดตั้ง
  5. เลือก Installation Destination เพื่อเลือก Hard Disk ที่ต้องการติดตั้ง OS

    เลือก Hard Disk ที่ต้องการติดตั้ง แล้วกดปุ่ม Done
  6. เลือก Software Selection เพื่อเลือก Software ที่ต้องการติดตั้ง

    เลือกเป็น Minimal Install จากนั้นกดปุ่ม Done
  7. เลือกเมนู 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 ตามลำดับ
    **

  8. เลือกตั้งค่า Time & Date

    เลือก Time & Date เป็นประเทศไทย จากแผนที่ จากนั้นกดปุ่ม Done
  9. ตั้งรหัสผ่านให้ user root

    จากนั้นใส่รหัสผ่านให้ root ตามต้องการ แล้วกดปุ่ม Done
  10. สร้าง User ผู้ใช้งาน กดปุ่ม User Creation

    กรอกชื่อเต็ม และชื่อผู้ใช้ ตามต้องการ และทำเครื่องหมายถูก “Make this user administrator” และ ตั้งรหัสผ่าน และกดปุ่ม Done
  11. กดปุ่ม Begin Installation

    และรอให้ Install จนเสร็จสิ้น
  12. กดปุ่ม 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 NameHost NameIP Address
Control Nodeansible.control.local192.168.56.10
Managed Nodeansible.managednode1.local192.168.56.20
Managed Nodeansible.managednode2.local192.168.56.30
ตารางแสดงข้อมูล network

หลังติดตั้ง 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 To Managed Node 1

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

Ping Control Node To Managed Node 2

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

Ping Managed Node 1 To Control Node

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

Ping Managed Node 2 To Control Node

Install Ansible บนเครื่อง Control Node

โปรแกรม Ansible มีอยู่ใน EPEL (Extra Packages For Enterprise Linux) ดังนั้นจึงติดตั้งได้ไม่ยากนักบน CentOS 8

1. ตรวจสอบ EPEL ว่าติดตั้งบนเครื่อง Control Node หรือยังด้วยคำสั่ง

$sudo dnf makecache
dnf makecache command

2. ติดตั้ง EPEL ด้วยคำสั่ง

$sudo dnf install epel-release -y
dnf install epel-release command

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

$sudo dnf makecache
dnf makecache command

4. ติดตั้ง Ansible ด้วยคำสั่ง

$sudo dnf install ansible -y
dnf install ansible command

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

dnf install ansible command

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

$ansible --version
ansible –version command

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
edit hosts file

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

ping managed node 1

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

ping 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 ทั้งหมดไม่ต้องพิมพ์ค่าใดๆลงไป

ssh keygen

กด Enter

press Enter

กด Enter

press Enter

กด Enter

press Enter

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

ssh keygen

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

$ssh-copy-id tmahachan@ansible.managednode1.local
ssh-copy-id

ตอบ yes

ssh -copy-id

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

ssh-copy-id

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

ssh-copy-id

3. Copy ID ไปยังเครื่อง Managed Node 2

$ssh-copy-id tmahachan@ansible.managednode2.local

หลังจากนั้นก็ทำแบบเดียวกับการ copy id ของ managed node 1

ssh-copy-id

ตั้งค่าเครื่อง 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

no password

เครื่อง Managed Node 2

no password

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

$ssh tmahachan@ansible.managednode1.local
ssh managed node 1

และ

$ssh tmahachan@ansible.managednode2.local
ssh managed node 2

สร้าง 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
ansible hosts file

3. ทดสอบคำสั่งเพื่อแสดง hosts ทั้งหมด

$cd ~/ansible
$ansible -i hosts --list-hosts all
list host all

4. ทดสอบคำสั่ง Ping

$ansible -i hosts -m ping all
ping all

5. เสร็จสิ้นการทำสอบคำสั่ง Ansible

สรุป

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

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

แหล่งที่มาของข้อมูล

Link to Reference

Be the first to comment

Leave a Reply

Your email address will not be published.


*