- 1 แนะนำเบื้องต้น
- 2 เปรียบเทียบ KVM กับเทคโนโลยีเวอร์ชวลไลเซชันอื่น
- 3 การติดตั้ง KVM บน Ubuntu และการตั้งค่าพื้นฐาน
- 4 การสร้างและใช้งานเครื่องเสมือน
- 5 การตั้งค่าและขยายเครือข่าย
- 6 การจัดการ Storage และ Disk
- 7 การติดตั้งและการจัดการ Guest OS
- 8 ตัวอย่างการใช้งานจริงและ Tips ด้าน Automation
- 9 การแก้ไขปัญหาและข้อผิดพลาดที่พบบ่อย
- 10 ความปลอดภัยและการปรับแต่งประสิทธิภาพ
- 11 สรุปและแหล่งเรียนรู้เพิ่มเติม
- 12 สรุปคำสั่งที่ใช้บ่อย & ตัวอย่างการตั้งค่า (Cheat Sheet)
- 13 FAQ (คำถามที่พบบ่อย)
- 13.1 Q1: KVM ต่างจาก VirtualBox หรือ VMware อย่างไร?
- 13.2 Q2: จะสำรองและกู้คืนเครื่องเสมือนอย่างไร?
- 13.3 Q3: จะใช้ USB device ใน VM ได้อย่างไร?
- 13.4 Q4: จะตั้งให้ VM เปิดอัตโนมัติเมื่อเปิด host ได้อย่างไร?
- 13.5 Q5: ถ้า VM ทำงานช้าควรแก้ไขอย่างไร?
- 13.6 Q6: ตั้งค่า network ของ VM ไม่สำเร็จควรทำอย่างไร?
- 13.7 Q7: KVM รองรับ cluster หรือ HA ได้หรือไม่?
แนะนำเบื้องต้น
Ubuntu เป็นหนึ่งในลินุกซ์ดิสทริบิวชันที่ได้รับความนิยมอย่างแพร่หลายทั่วโลก เหมาะทั้งสำหรับผู้ใช้ทั่วไปและในองค์กรธุรกิจ โดยถูกนำไปใช้งานหลากหลาย ตั้งแต่การสร้างเซิร์ฟเวอร์ไปจนถึงสภาพแวดล้อมสำหรับพัฒนา สำหรับผู้ที่ต้องการสร้างระบบเวอร์ชวลไลเซชันเต็มรูปแบบบน Ubuntu “KVM (Kernel-based Virtual Machine)” คือทางเลือกที่ทรงพลังอย่างยิ่ง
KVM เป็นเทคโนโลยีเวอร์ชวลไลเซชันประเภทไฮเปอร์ไวเซอร์ที่ถูกฝังมาในเคอร์เนลลินุกซ์โดยตรง ซึ่งรองรับการทำงานร่วมกับฟีเจอร์เสริมของฮาร์ดแวร์ (Intel VT หรือ AMD-V) ช่วยให้ได้ประสิทธิภาพและความเสถียรสูง KVM เป็นโอเพนซอร์ส จึงสามารถสร้างโครงสร้างเวอร์ชวลไลเซชันที่ครบถ้วนได้โดยประหยัดค่าใช้จ่าย
หลายคนอาจมองว่าเทคโนโลยีเวอร์ชวลไลเซชันนั้นซับซ้อน แต่ด้วยการผสาน Ubuntu กับ KVM แม้ผู้เริ่มต้นก็สามารถสร้างและจัดการเครื่องเสมือนได้ไม่ยาก และแน่นอนว่าทั้งผู้ที่ต้องการใช้ทรัพยากรเซิร์ฟเวอร์อย่างคุ้มค่าระดับกลาง หรือวิศวกรไอทีที่ต้องการเวอร์ชวลไลซ์ระบบงานก็เหมาะสมเช่นกัน
บทความนี้จะอธิบายวิธีสร้างสภาพแวดล้อมเวอร์ชวลไลเซชันด้วย KVM บน Ubuntu ตั้งแต่ขั้นตอนการติดตั้ง การใช้งานพื้นฐาน เทคนิคการใช้งานจริง รวมถึงแนวทางแก้ไขปัญหาที่พบบ่อย เหมาะสำหรับผู้ที่สนใจเริ่มต้นใช้ KVM หรือผู้ที่ต้องการใช้งานเวอร์ชวลไลเซชันบน Ubuntu ให้สะดวกยิ่งขึ้น
เปรียบเทียบ KVM กับเทคโนโลยีเวอร์ชวลไลเซชันอื่น
เทคโนโลยีเวอร์ชวลไลเซชันมีหลากหลายรูปแบบ โดยในสภาพแวดล้อม Ubuntu ที่นิยมใช้จะมีทั้ง KVM, VirtualBox และ VMware ในหัวข้อนี้จะอธิบายข้อดีข้อเสียและความแตกต่างของแต่ละแบบอย่างละเอียด
ประเภทเทคโนโลยีเวอร์ชวลไลเซชันที่สำคัญ
- KVM (Kernel-based Virtual Machine)
KVM เป็นฟีเจอร์เวอร์ชวลไลเซชันที่ฝังในเคอร์เนลลินุกซ์ โดยต้องใช้ Linux เป็นโฮสต์ รองรับฟีเจอร์เสริมจากฮาร์ดแวร์ (Intel VT หรือ AMD-V) ช่วยให้เครื่องเสมือนได้ประสิทธิภาพสูง ใช้งานจริงได้ดี สามารถควบคุมผ่านคำสั่งหรือเครื่องมือจัดการอย่าง virt-manager ได้อย่างยืดหยุ่น - VirtualBox
VirtualBox คือซอฟต์แวร์เวอร์ชวลไลเซชันเดสก์ท็อปจาก Oracle ที่รองรับหลายระบบปฏิบัติการ เช่น Windows, Mac, Linux อินเทอร์เฟซใช้งานง่าย เหมาะสำหรับผู้เริ่มต้นหรือใช้งานส่วนตัว/การศึกษา แต่สำหรับงานระดับองค์กรหรือโหลดสูงอาจไม่เหมาะเท่า KVM - VMware (VMware Workstation/ESXi ฯลฯ)
VMware เป็นผลิตภัณฑ์เชิงพาณิชย์ที่นิยมในองค์กร มีฟีเจอร์ครบครันและการสนับสนุนดีเยี่ยม แต่ต้องเสียค่าลิขสิทธิ์ นิยมใช้ในธุรกิจขนาดใหญ่ และมีต้นทุนที่สูงกว่า
ข้อดีของ KVM
- ประสิทธิภาพสูงและเสถียร
KVM ทำงานเป็นส่วนหนึ่งของเคอร์เนลลินุกซ์ จึงบริหารจัดการ CPU และหน่วยความจำได้ดี เหมาะสำหรับใช้งานจริงในระดับองค์กร - โอเพนซอร์สและประหยัดค่าใช้จ่าย
KVM เป็นโอเพนซอร์ส 100% ไม่มีค่าไลเซนส์ เหมาะกับผู้ที่ต้องการสร้างระบบเวอร์ชวลไลเซชันโดยประหยัดต้นทุน - เครื่องมือบริหารจัดการและออโตเมชันหลากหลาย
มีทั้งเครื่องมือ CLI (เช่น virsh, virt-install) และ GUI (เช่น virt-manager) พร้อมรองรับการออโตเมชัน เหมาะสำหรับ DevOps และผู้ดูแลโครงสร้างพื้นฐาน
ข้อจำกัดของ KVM
- ใช้ได้เฉพาะ Linux เป็นโฮสต์
KVM ต้องใช้เคอร์เนลลินุกซ์เท่านั้น ไม่สามารถใช้กับ Windows หรือ Mac เป็นโฮสต์ได้ - ต้องมีความรู้เกี่ยวกับ Linux สำหรับการตั้งค่าและแก้ไขปัญหา
แม้จะมีเครื่องมือ GUI แต่การตั้งค่าเครือข่ายหรือปรับแต่งขั้นสูงมักต้องใช้คำสั่งและความรู้ด้าน Linux
ควรเลือกใช้ KVM ในกรณีใด?
- ต้องการใช้ทรัพยากรเซิร์ฟเวอร์จริงอย่างมีประสิทธิภาพ
- ต้องการเวอร์ชวลไลซ์สำหรับระบบงานหรือเซิร์ฟเวอร์ในระดับองค์กร
- ต้องการสร้างโครงสร้างเวอร์ชวลไลเซชันที่ครบถ้วนแต่ต้นทุนต่ำ
- ต้องการออโตเมชันสำหรับการดูแล Linux เซิร์ฟเวอร์หรือโครงสร้างพื้นฐาน
KVM เหมาะสำหรับผู้ใช้งานและวิศวกรที่คุ้นเคยกับ Linux หรือผู้ที่ต้องการลองใช้ระบบเซิร์ฟเวอร์แบบมืออาชีพในอนาคต
การติดตั้ง KVM บน Ubuntu และการตั้งค่าพื้นฐาน
เพื่อใช้งาน KVM บน Ubuntu จำเป็นต้องตรวจสอบข้อกำหนดเบื้องต้นและเตรียมความพร้อม รวมถึงขั้นตอนการติดตั้งจริง ในส่วนนี้จะอธิบายขั้นตอนที่จำเป็นสำหรับการเริ่มต้นใช้งาน KVM อย่างละเอียด เพื่อให้ผู้เริ่มต้นสามารถสร้างสภาพแวดล้อมได้อย่างราบรื่น
ข้อกำหนดและการตรวจสอบล่วงหน้า
ในการใช้งาน KVM จำเป็นต้องตรวจสอบว่า CPU ของคอมพิวเตอร์หรือเซิร์ฟเวอร์รองรับฟีเจอร์ Virtualization (Intel VT หรือ AMD-V) หรือไม่
สามารถตรวจสอบได้ด้วยคำสั่งดังนี้
egrep -c '(vmx|svm)' /proc/cpuinfo
หากแสดงค่ามากกว่า 1 แสดงว่าสามารถใช้งาน Virtualization ได้
และต้องใช้ Ubuntu รุ่น 64 บิตเท่านั้น
การติดตั้ง KVM และแพ็กเกจที่จำเป็น
ติดตั้งตัวหลักของ KVM และเครื่องมือที่เกี่ยวข้อง (libvirt, virt-manager ฯลฯ) ตามลำดับคำสั่งด้านล่างนี้
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
qemu-kvm
: ตัวหลักสำหรับการเวอร์ชวลไลเซชันของ KVMlibvirt-daemon-system
,libvirt-clients
: บริการสำหรับจัดการเครื่องเสมือนbridge-utils
: เครื่องมือสำหรับสร้างเครือข่ายแบบบริดจ์virt-manager
: เครื่องมือ GUI สำหรับจัดการเครื่องเสมือน
การตั้งค่ากลุ่มผู้ใช้งานและสิทธิ์
หลังติดตั้งแล้ว ให้เพิ่มผู้ใช้ปัจจุบันเข้าสู่กลุ่ม KVM และ libvirt เพื่อให้สามารถจัดการเครื่องเสมือนได้โดยไม่ต้องใช้สิทธิ์ root
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)
หลังจากนั้น กรุณาออกจากระบบแล้วเข้าสู่ระบบใหม่ หรือรีสตาร์ทเครื่อง เพื่อให้การตั้งค่ามีผล
ตรวจสอบการทำงานของบริการ KVM
ตรวจสอบว่า KVM ติดตั้งและทำงานเรียบร้อยหรือไม่
sudo systemctl status libvirtd
หากแสดงสถานะว่า “active (running)” แสดงว่าทำงานปกติ
นอกจากนี้ยังสามารถตรวจสอบว่า KVM ถูกเปิดใช้งานหรือไม่ด้วยคำสั่งต่อไปนี้
virsh list --all
หากเห็นรายการเครื่องเสมือน (ซึ่งเริ่มต้นจะว่างเปล่า) แสดงว่าสภาพแวดล้อม KVM ถูกติดตั้งสำเร็จแล้ว
การสร้างและใช้งานเครื่องเสมือน
เมื่อเตรียมสภาพแวดล้อม KVM เรียบร้อยแล้ว ต่อไปคือการสร้างและจัดการเครื่องเสมือนจริง โดยสามารถเลือกใช้เครื่องมือแบบ GUI (virt-manager) หรือคำสั่ง CLI (virt-install, virsh) ได้ตามความสะดวก ในหัวข้อนี้จะแนะนำทั้งสองแนวทาง
การสร้างเครื่องเสมือนด้วย virt-manager (GUI)
virt-manager เป็นเครื่องมือ GUI ที่ใช้งานง่ายในการสร้างและบริหารเครื่องเสมือน เหมาะกับผู้ใช้ที่ใช้งาน Linux Desktop
- เปิด virt-manager จาก “Applications” หรือด้วยคำสั่ง
virt-manager
- คลิกปุ่ม “ใหม่ (New)” ที่มุมซ้ายบนของหน้าจอ
- ระบุที่อยู่ไฟล์ ISO หรือสื่อสำหรับติดตั้งระบบ และเลือกประเภทของ Guest OS (เช่น Ubuntu, Windows)
- ตั้งค่าจำนวน CPU, หน่วยความจำ, ขนาดดิสก์ ฯลฯ สำหรับเครื่องเสมือน
- ตรวจสอบและยืนยันการตั้งค่า จากนั้นคลิก “เสร็จสิ้น (Finish)” เครื่องเสมือนจะถูกสร้างและเข้าสู่หน้าติดตั้ง
virt-manager ยังสามารถใช้สั่งเปิด/ปิด/รีบูตเครื่องเสมือน ถ่าย Snapshot หรือเพิ่มเครือข่าย/ดิสก์ ได้อย่างสะดวก
การสร้างเครื่องเสมือนด้วย virt-install (CLI)
สำหรับเซิร์ฟเวอร์หรือการใช้งานระยะไกล มักนิยมสร้างเครื่องเสมือนด้วยคำสั่ง CLI เช่น virt-install
ตัวอย่างการใช้งาน
sudo virt-install
--name ubuntu-vm
--memory 2048
--vcpus 2
--disk size=20
--cdrom /path/to/ubuntu.iso
--os-type linux
--os-variant ubuntu20.04
--network network=default
--graphics vnc
--name
: ชื่อเครื่องเสมือน--memory
: หน่วยความจำ (MB)--vcpus
: จำนวนคอร์ CPU--disk size=20
: ขนาดดิสก์เสมือน (GB)--cdrom
: ที่อยู่ไฟล์ ISO สำหรับติดตั้ง--os-type
,--os-variant
: ประเภทและเวอร์ชันของ OS--network
: เครือข่ายที่จะเชื่อมต่อ--graphics
: โหมดกราฟิก เช่น VNC
เมื่อรันคำสั่งแล้ว เครื่องเสมือนจะเริ่มทำงานและเข้าสู่หน้าจอติดตั้งผ่าน VNC
การสั่งเปิด/ปิด/ลบ/สร้าง Snapshot เครื่องเสมือน
KVM ช่วยให้จัดการเครื่องเสมือนได้ง่ายผ่านคำสั่งต่อไปนี้
- เปิดเครื่องเสมือน
virsh start <ชื่อเครื่องเสมือน>
- ปิดเครื่องเสมือน
virsh shutdown <ชื่อเครื่องเสมือน>
- บังคับปิดเครื่องเสมือน
virsh destroy <ชื่อเครื่องเสมือน>
- ลบเครื่องเสมือน (รวมดิสก์โปรดระวัง)
virsh undefine <ชื่อเครื่องเสมือน>
- สร้าง Snapshot
virsh snapshot-create-as <ชื่อเครื่องเสมือน> <ชื่อ Snapshot>
การดำเนินการเหล่านี้สามารถใช้ผ่าน GUI ของ virt-manager ได้เช่นกัน
การตั้งค่าและขยายเครือข่าย
การตั้งค่าเครือข่ายเป็นปัจจัยสำคัญสำหรับการใช้งานเครื่องเสมือนบน KVM โดยค่าเริ่มต้นสามารถใช้งานได้กับหลายกรณี แต่สำหรับการใช้งานระดับธุรกิจหรือเซิร์ฟเวอร์จริง อาจต้องมีการปรับแต่งเพิ่มเติม ส่วนนี้จะอธิบายตั้งแต่พื้นฐานจนถึงการตั้งค่าขั้นสูงที่มักใช้งานจริง
ความแตกต่างของ NAT (virbr0) กับ Bridge Network
เมื่อทำการติดตั้ง KVM ระบบจะสร้าง virtual network bridge ชื่อ “virbr0” ให้อัตโนมัติ ซึ่งเป็นเครือข่ายแบบ NAT (Network Address Translation) โดยมีลักษณะเด่นดังนี้
- จุดเด่นของ virbr0 (NAT)
- เครื่องเสมือนสามารถเชื่อมต่ออินเทอร์เน็ตได้
- หากต้องการเข้าถึงเครื่องเสมือนจากโฮสต์หรือเครือข่ายอื่น ต้องตั้งค่า port forwarding เพิ่มเติม
- เหมาะสำหรับใช้งานที่บ้าน สภาพแวดล้อมสำหรับพัฒนา หรือทดลอง
ส่วน “Bridge Network” จะช่วยให้เครื่องเสมือนเชื่อมต่อเครือข่ายได้เหมือนเครื่องจริง
- จุดเด่นของ Bridge Network
- เครื่องเสมือนเข้าร่วม segment เครือข่ายเดียวกับโฮสต์ได้โดยตรง
- สามารถเข้าถึงจากเครื่องอื่นหรือเซิร์ฟเวอร์อื่นได้สะดวก
- เหมาะสำหรับเซิร์ฟเวอร์องค์กรหรือบริการที่ต้องการใช้งานจริง
ขั้นตอนการตั้งค่า Bridge Network แบบกำหนดเอง (สำหรับ LAN)
หากต้องการให้เซิร์ฟเวอร์หรือ PC เครื่องอื่นเข้าถึงเครื่องเสมือนโดยตรง ต้องสร้าง bridge network ขั้นตอนโดยทั่วไป (ตัวอย่างใช้ eth0
เป็น NIC หลัก)
- ติดตั้ง bridge-utils (ข้ามหากติดตั้งแล้ว)
sudo apt install bridge-utils
- แก้ไขไฟล์กำหนดค่าเครือข่าย
Ubuntu 18.04 ขึ้นไปใช้ Netplan ให้แก้ไขไฟล์/etc/netplan/01-netcfg.yaml
เช่นตัวอย่างต่อไปนี้
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
bridges:
br0:
interfaces: [eth0]
dhcp4: yes
- นำการตั้งค่าไปใช้งาน
sudo netplan apply
- เปลี่ยน network adapter ของเครื่องเสมือนไปยัง br0
ใช้ virt-manager หรือ virsh เปลี่ยน network ของ VM ไปที่ br0
การตั้งค่า IP คงที่และ Port Forward สำหรับเครื่องเสมือน
- การตั้งค่า IP คงที่
สามารถตั้งค่า IP คงที่ได้ทั้งใน OS ของเครื่องเสมือนหรือใน DHCP server ด้วย MAC address - การตั้งค่า Port Forward (เมื่อใช้ NAT)
ใช้คำสั่ง virsh หรือแก้ไขไฟล์ XML ของ libvirt เพื่อกำหนดให้พอร์ตบางพอร์ต (เช่น SSH หรือ Web) ของโฮสต์ถูกส่งต่อไปยัง VM ตัวอย่าง (forward SSH ที่พอร์ต 22):
virsh nat-forward --network default --add-port tcp:2222:22
* การตั้งค่าละเอียดสามารถกำหนดได้เพิ่มเติมใน libvirt config หรือด้วย firewalld
การจัดการ Storage และ Disk
การออกแบบ storage และการจัดการ disk มีความสำคัญสำหรับการใช้งานเครื่องเสมือน KVM ในส่วนนี้จะอธิบายชนิดของดิสก์เสมือน วิธีสร้างและบริหาร storage pool รวมถึงการขยายดิสก์และการใช้ snapshot
ประเภทและการใช้งาน Virtual Disk (qcow2, raw)
ดิสก์เสมือนของ KVM มีหลักๆ 2 รูปแบบดังนี้
- qcow2
- เป็นฟอร์แมตหลักสำหรับ KVM รองรับ snapshot, บีบอัดไฟล์ และประหยัดพื้นที่
- เหมาะกับการใช้งานที่ต้องการความยืดหยุ่นหรือสภาพแวดล้อมสำหรับทดสอบ
- raw
- เป็นฟอร์แมตเรียบง่าย ไม่บีบอัดหรือแปลงข้อมูล
- เหมาะกับงานที่ต้องการประสิทธิภาพสูงสุดหรือเน้น I/O
โดยทั่วไป qcow2 เหมาะกับการใช้งานส่วนใหญ่ แต่ควรเลือกตามลักษณะงาน
การสร้างและจัดการ Storage Pool
KVM บริหาร disk สำหรับ VM ด้วยระบบ storage pool
- storage pool เริ่มต้น
หลังติดตั้งจะใช้/var/lib/libvirt/images/
เป็น storage pool หลัก
disk เสมือนจะถูกสร้างในโฟลเดอร์นี้โดยอัตโนมัติ - ตัวอย่างการสร้าง storage pool ใหม่
- สร้างโฟลเดอร์ใหม่
sudo mkdir /data/kvm-images sudo chown libvirt-qemu:kvm /data/kvm-images
- เพิ่ม pool ใหม่ด้วย virt-manager หรือ virsh เช่น
virsh pool-define-as --name mypool --type dir --target /data/kvm-images
virsh pool-autostart mypool
virsh pool-start mypool
การขยาย Disk และใช้ Snapshot
- การขยายดิสก์เสมือน
สามารถขยายขนาด disk ได้ด้วยคำสั่งqemu-img
ทั้ง qcow2 และ raw
sudo qemu-img resize /var/lib/libvirt/images/ubuntu-vm.qcow2 +10G
หลังจากนั้น ให้ขยาย partition หรือ filesystem ใน OS ของ VM ด้วย
- การใช้ Snapshot
สำหรับ qcow2 สามารถสร้าง snapshot เพื่อเก็บสถานะของ VM ณ เวลาต่างๆ ได้
virsh snapshot-create-as <ชื่อเครื่องเสมือน> <ชื่อ snapshot>
การใช้ snapshot เหมาะกับการสำรองก่อนปรับแต่ง หรือ rollback เมื่อเกิดปัญหา
การติดตั้งและการจัดการ Guest OS
ในส่วนนี้จะอธิบายเคล็ดลับสำหรับการติดตั้งและใช้งานระบบปฏิบัติการบนเครื่องเสมือน KVM โดยยกตัวอย่างขั้นตอนการติดตั้ง OS ยอดนิยม การจัดการไฟล์ ISO และวิธีเพิ่มประสิทธิภาพขณะใช้งาน
ขั้นตอนติดตั้ง Guest OS ยอดนิยม
KVM รองรับการติดตั้ง OS หลากหลาย เช่น Ubuntu, CentOS, Windows ตัวอย่างขั้นตอนสำหรับ Ubuntu และ Windows ดังนี้
- สำหรับ Ubuntu
- ดาวน์โหลดไฟล์ ISO ล่าสุดจากเว็บไซต์ทางการของ Ubuntu
- หากใช้ virt-manager เลือก “สร้างเครื่องเสมือนใหม่” แล้วเลือก “Local install media” และระบุไฟล์ ISO
- กำหนด CPU, หน่วยความจำ และขนาดดิสก์ แล้วเริ่มติดตั้ง
- ดำเนินการติดตั้งตามปกติตามขั้นตอนบนหน้าจอ
- สำหรับ Windows
- ดาวน์โหลดไฟล์ ISO เวอร์ชันทดลองหรือที่ได้รับอนุญาตจาก Microsoft
- สร้างเครื่องเสมือนใหม่ด้วย virt-manager หรือ virt-install แล้วเลือกไฟล์ ISO
- กรณี Windows แนะนำให้ติดตั้ง virtio driver เพื่อเพิ่มประสิทธิภาพของดิสก์และเครือข่าย สามารถแนบไฟล์ ISO ของ virtio เพิ่มในไดรฟ์ CD แล้วเลือกไดรเวอร์ระหว่างติดตั้ง
การจัดการและโหลดไฟล์ ISO
- สำหรับติดตั้ง Guest OS ให้ใช้ไฟล์ ISO ที่ดาวน์โหลดจากเว็บทางการ
- ขณะสร้างเครื่องเสมือน ให้ระบุพาธของไฟล์ ISO เพื่อเชื่อมต่อเป็น CD/DVD เสมือน
- สามารถเชื่อมต่อ ISO หลายไฟล์พร้อมกัน (เช่น OS และไดรเวอร์) ได้ตามต้องการ
เคล็ดลับการใช้งาน Guest OS และเพิ่มประสิทธิภาพ
- การจัดสรรทรัพยากรอย่างเหมาะสม
กำหนดจำนวน CPU และหน่วยความจำให้พอเหมาะกับแต่ละเครื่องเสมือน หากจัดสรรมากเกินไปอาจกระทบต่อโฮสต์หรือเครื่องเสมือนอื่นๆ - การติดตั้ง virtio driver
ในกรณีที่ใช้ Windows หรือ Linux เวอร์ชันเก่า ควรติดตั้ง virtio driver เพื่อเพิ่มความเร็วดิสก์และเน็ตเวิร์ก - ปิดบริการที่ไม่จำเป็น
ปิดการทำงานของบริการหรือโปรแกรมที่ไม่ใช้ใน Guest OS เพื่อใช้ทรัพยากรอย่างมีประสิทธิภาพ - ใช้งาน QEMU Guest Agent
ติดตั้ง QEMU Guest Agent เพื่อให้สามารถตรวจสอบสถานะหรือปิดเครื่องจากโฮสต์ได้อย่างถูกต้อง
ตัวอย่างการใช้งานจริงและ Tips ด้าน Automation
KVM สามารถใช้งานได้มากกว่าแค่สร้างและรันเครื่องเสมือน ยังสามารถนำไปใช้ในงานจริงและผสานกับเครื่องมืออัตโนมัติเพื่อเพิ่มประสิทธิภาพการจัดการ ส่วนนี้นำเสนอกรณีใช้งานและไอเดียสำหรับ automation
ตัวอย่างใช้งานในงานเซิร์ฟเวอร์
- แยกสภาพแวดล้อม dev/test
สามารถสร้างเครื่องเสมือนแยกแต่ละโปรเจกต์เพื่อทดสอบหรือใช้งาน OS/ซอฟต์แวร์เวอร์ชันต่างๆ โดยไม่กระทบกับ production และสามารถ restore สภาพเดิมได้ง่าย - สร้างบริการภายในองค์กร
สามารถสร้าง file server, web server, database server แยกแต่ละเครื่องเสมือน เพื่อแยกขอบเขตการทำงานและลดผลกระทบหากเกิดปัญหา
รวมถึงการสำรองข้อมูลหรือ snapshot เป็นรายเครื่องเสมือนได้ง่าย
การสร้างเครื่องเสมือนอัตโนมัติด้วย CLI หรือ Ansible
- สร้าง VM อัตโนมัติด้วย CLI
สามารถใช้ shell script เพื่อสั่ง virt-install หรือ virsh สร้าง VM หลายเครื่องพร้อมกัน ตัวอย่างเช่น
for i in {1..5}
do
virt-install --name test-vm-$i --memory 1024 --vcpus 1
--disk size=10 --cdrom /path/to/ubuntu.iso
--os-type linux --os-variant ubuntu20.04 --graphics none --network network=default --noautoconsole
done
- ใช้ Ansible สร้าง VM และตั้งค่าระบบ
หากใช้ Ansible ซึ่งเป็นเครื่องมือ automation สามารถเขียน playbook เพื่อสร้าง VM, ติดตั้งแอป หรือกำหนดค่าเริ่มต้นแบบอัตโนมัติได้ เหมาะกับการดูแลเซิร์ฟเวอร์จำนวนมากหรือองค์กรที่ต้องการความสอดคล้องในการบริหาร
แนวทางการใช้งานแบบ Cloud
- การทำ template เครื่องเสมือน
สามารถสร้าง template เครื่องเสมือนที่ตั้งค่าไว้ล่วงหน้า เพื่อ clone และใช้งานเซิร์ฟเวอร์ใหม่ได้อย่างรวดเร็ว - ใช้งาน API หรือ Web-based management
libvirt มี API ให้เชื่อมต่อกับเครื่องมืออื่น หรือพัฒนาเครื่องมือบริหารระบบเองได้ ในสภาพแวดล้อมขนาดใหญ่ควรใช้เครื่องมือ Web-based เช่น Cockpit เพื่อบริหาร VM แบบกราฟิกได้สะดวก
การแก้ไขปัญหาและข้อผิดพลาดที่พบบ่อย
ระหว่างการใช้งาน KVM อาจพบปัญหาต่าง ๆ เช่น VM เปิดไม่ติด หรือปัญหาเครือข่าย ในส่วนนี้จะอธิบายตัวอย่างปัญหาที่พบบ่อย วิธีการตรวจสอบ log และแหล่งข้อมูลที่ควรใช้เมื่อเกิดปัญหา

ตัวอย่างปัญหาที่มักเกิดกับ KVM
- ไม่สามารถเปิดหรือสร้างเครื่องเสมือนได้
- ไม่ได้เปิดใช้งานฟีเจอร์ Virtualization (Intel VT, AMD-V)
- หน่วยความจำหรือดิสก์ไม่พอ
- ระบุพาธของ storage pool หรือ ISO ผิด
- เชื่อมต่อเครือข่ายไม่ได้
- ตั้งค่า network adapter ของ VM ไม่ถูกต้อง
- ตั้งค่า bridge/NAT หรือ DHCP ผิด
- ปัญหาจาก firewall หรือ security settings
- ประสิทธิภาพต่ำมาก
- จัดสรร resource มากหรือน้อยเกินไป
- ยังไม่ได้ติดตั้ง Virtio driver (โดยเฉพาะบน Windows guest)
- ดิสก์ I/O กลายเป็นคอขวด
วิธีตรวจสอบ log และแนวทางแก้ไขเบื้องต้น
เมื่อพบปัญหา ควรเริ่มต้นตรวจสอบ log เป็นอันดับแรก
- ดู log ของระบบ
sudo journalctl -xe
ตรวจสอบว่ามีข้อความ error ที่เกี่ยวกับ KVM หรือ libvirt หรือไม่
- ดู log ของ libvirt
log จะอยู่ที่/var/log/libvirt/
(เช่น libvirtd.log) - ดู log ของแต่ละเครื่องเสมือน
ใช้ virt-manager หรือ virsh ดูรายละเอียด/แท็บ log เพื่อเช็ค error - ตรวจสอบสถานะเครือข่าย
ip a
brctl show
virsh net-list --all
เพื่อดูสถานะการเชื่อมต่อและการตั้งค่า bridge network
แนวทางแก้ไขปัญหาเบื้องต้น
- รวบรวมข้อมูลสถานการณ์และช่วงเวลาที่เกิดปัญหา
- ตรวจสอบ log และไฟล์ตั้งค่าตามข้างต้น
- ถ้าจำเป็นให้แก้ไข config, restart service หรือสร้าง VM ใหม่
วิธีใช้เอกสารทางการและ Community
เมื่อแก้ปัญหาเองไม่ได้ สามารถหาข้อมูลหรือขอความช่วยเหลือได้จากแหล่งต่อไปนี้
- เอกสารทางการ
เอกสาร KVM ของ Ubuntu
เอกสาร libvirt ทางการ - ฟอรั่มและ Q&A community
- Ubuntu Forums
- Ask Ubuntu
- Stack Overflow
- ค้นหาข้อความ error ใน Google
แนะนำให้ค้นหาข้อความ error เป็นทั้งภาษาไทยและอังกฤษ จะพบตัวอย่างและแนวทางแก้ไขมากมาย
ความปลอดภัยและการปรับแต่งประสิทธิภาพ
เพื่อให้ใช้งาน KVM ได้อย่างปลอดภัยและมีประสิทธิภาพ จำเป็นต้องดูแลเรื่องความปลอดภัยและการปรับจูน resource ในส่วนนี้จะแนะนำวิธีป้องกันและเทคนิคการใช้งานอย่างมีประสิทธิผล
มาตรการเพิ่มความปลอดภัยของสภาพแวดล้อมเวอร์ชวลไลเซชัน
- ปิดบริการที่ไม่จำเป็นและใช้ระบบอย่างพอเพียง
ปิดบริการที่ไม่ได้ใช้ทั้งใน guest และ host เพื่อจำกัดจุดเสี่ยง - ตั้ง firewall และกำหนดสิทธิ์เข้าถึงอย่างเข้มงวด
กำหนด firewall (เช่น ufw หรือ firewalld) บนทั้ง host และ guest ปิดกั้นการเข้าถึงจากภายนอกที่ไม่จำเป็น
สำหรับ SSH แนะนำให้เปลี่ยนพอร์ต ใช้ public key authentication หรือ fail2ban - แยกเครือข่ายของ VM ที่สำคัญ (network segmentation)
ควรแยกเครือข่ายหรือใช้ VLAN เพื่อป้องกันความเสียหายจากการโจมตีข้าม VM - อัปเดตระบบสม่ำเสมอ
ควรอัปเดต patch และซอฟต์แวร์ทั้งบน host และ guest เป็นประจำ
การปรับแต่งการใช้ resource (CPU/Memory/Disk I/O)
- บริหาร resource อย่างสมดุล
กำหนด CPU, RAM ให้แต่ละ VM อย่างเหมาะสม ไม่ควรจัดสรรจนเกิน capacity ของ host เพื่อความเสถียรโดยรวม - เพิ่มประสิทธิภาพ disk I/O
ควรเลือก SSD สำหรับ VM ที่ต้องการประสิทธิภาพสูง หลีกเลี่ยงการสร้าง snapshot qcow2 หลายชั้นเพื่อป้องกันปัญหาช้า - ติดตั้ง virtio driver
ใน guest OS ควรติดตั้ง virtio driver เพื่อเร่งความเร็วของ disk และ network
การสำรองข้อมูลและ snapshot อัตโนมัติ
- ตั้งให้สร้าง snapshot อัตโนมัติ
ควรตั้ง cron job หรือ script สำรอง snapshot ของ VM สำคัญเป็นระยะ เพื่อช่วยกู้ระบบเร็วเมื่อเกิดปัญหา - สำรองไฟล์ disk image และ config
ควร copy ไฟล์ disk (qcow2, raw) และไฟล์ XML ของ libvirt ไปยัง storage อื่นเป็นระยะ - เชื่อมกับเครื่องมือ automation
สามารถใช้ cron หรือ Ansible สำหรับสำรองข้อมูลหรือสร้าง snapshot อัตโนมัติ
สรุปและแหล่งเรียนรู้เพิ่มเติม
บทความนี้ได้อธิบายตั้งแต่การสร้างและจัดการสภาพแวดล้อมเวอร์ชวลไลเซชันด้วย KVM บน Ubuntu ไปจนถึงการใช้งานจริง การแก้ปัญหา เทคนิคความปลอดภัย และการปรับแต่งประสิทธิภาพ สุดท้ายนี้จะขอสรุปเนื้อหา และแนะนำแหล่งเรียนรู้เพิ่มเติมสำหรับการต่อยอดความรู้
สรุปเนื้อหาสำคัญ
- ภาพรวมและข้อดีของ KVM
KVM เป็นเทคโนโลยีเวอร์ชวลไลเซชันที่มีประสิทธิภาพสูงและเป็นโอเพนซอร์ส ได้รับความนิยมในเซิร์ฟเวอร์ Ubuntu และการใช้งานระดับองค์กร - ขั้นตอนตั้งแต่ติดตั้งถึงการใช้งาน
เริ่มจากตรวจสอบว่าซีพียูรองรับ virtualization, ติดตั้งแพ็กเกจที่จำเป็น, ตั้งค่าสิทธิ์ผู้ใช้ และสร้าง VM พร้อมใช้งานตามลำดับ - เทคนิคเน็ตเวิร์ก, storage และการจัดการ
สามารถเลือกโครงสร้าง network แบบ NAT หรือ bridge ตามลักษณะงาน, บริหาร storage pool และ disk, ใช้ snapshot อย่างเหมาะสม - การแก้ปัญหาและความปลอดภัย
แนะนำแนวทางแก้ไข error, การตรวจสอบ log และมาตรการเพิ่มความปลอดภัย/ประสิทธิภาพ
แนะนำแหล่งเรียนรู้และแนวทางต่อยอด
- เอกสารทางการ
- คู่มือ KVM ของ Ubuntu
- เอกสารทางการของ libvirt
- Ask Ubuntu
- Qiita หมวด KVM
- Stack Overflow (ภาษาอังกฤษ)
KVM เป็นโซลูชั่นเวอร์ชวลไลเซชันที่ใช้ได้กับทั้งงานส่วนตัวและองค์กร เมื่อเข้าใจพื้นฐานแล้ว สามารถต่อยอดความรู้และประยุกต์ใช้ได้อีกมากมาย
สรุปคำสั่งที่ใช้บ่อย & ตัวอย่างการตั้งค่า (Cheat Sheet)
เพื่อให้สะดวกต่อการจัดการ KVM และ libvirt ส่วนนี้ได้รวบรวมคำสั่งที่ใช้บ่อย และตัวอย่างการตั้งค่าที่สำคัญสำหรับการบริหาร VM ในชีวิตประจำวัน
รายการคำสั่งหลักของ KVM/virsh/virt-manager
- แสดงรายการ VM ทั้งหมด
virsh list --all
- เปิดเครื่องเสมือน
virsh start <ชื่อ VM>
- ปิดเครื่องเสมือน
virsh shutdown <ชื่อ VM>
- บังคับปิดเครื่องเสมือน
virsh destroy <ชื่อ VM>
- สร้าง VM ด้วย virt-install
virt-install --name <ชื่อ> --memory <MB> --vcpus <จำนวนคอร์>
--disk size=<GB> --cdrom <พาธไฟล์ ISO>
--os-type linux --os-variant ubuntu20.04
- ลบ VM (เฉพาะ config)
virsh undefine <ชื่อ VM>
ตัวอย่างการตั้งค่า network/bridge
- แสดงรายการ network ปัจจุบัน
virsh net-list --all
- สร้าง network ใหม่ (ไฟล์ XML ตัวอย่าง)
สร้างไฟล์ XML ไว้ใน/etc/libvirt/qemu/networks/
แล้วใช้virsh net-define <ชื่อไฟล์>
,virsh net-start <ชื่อ network>
ตัวอย่างจัดการ Storage & Disk
- ดูรายการ storage pool
virsh pool-list --all
- ขยายขนาด disk
sudo qemu-img resize /path/to/disk.qcow2 +10G
- สร้าง snapshot
virsh snapshot-create-as <ชื่อ VM> <ชื่อ snapshot>
Tips อื่น ๆ ที่ใช้บ่อย
- ตั้งให้ VM เริ่มอัตโนมัติเมื่อเปิดโฮสต์
virsh autostart <ชื่อ VM>
- ดูรายละเอียด VM
virsh dominfo <ชื่อ VM>
- เปิด virt-manager (สำหรับ GUI)
virt-manager
FAQ (คำถามที่พบบ่อย)
รวมคำถาม-คำตอบที่มักพบบ่อยเกี่ยวกับการสร้างและดูแล KVM/Ubuntu virtual environment สำหรับมือใหม่และผู้ดูแลระบบ
Q1: KVM ต่างจาก VirtualBox หรือ VMware อย่างไร?
A1: KVM ฝังตัวอยู่ใน Linux kernel มีประสิทธิภาพสูง เหมาะสำหรับ server และการใช้งานจริง VirtualBox เหมาะกับ desktop หรือการทดลอง ส่วน VMware เหมาะกับงานองค์กรที่ต้องการฟีเจอร์ระดับสูงและซัพพอร์ตเต็มรูปแบบ แต่ KVM ได้เปรียบที่ฟรีและประหยัดต้นทุน
Q2: จะสำรองและกู้คืนเครื่องเสมือนอย่างไร?
A2: สำรองได้โดย copy ไฟล์ disk image (qcow2, raw) และ XML config สามารถใช้ฟีเจอร์ snapshot ของ virsh เพื่อเก็บสถานะปัจจุบันแล้ว restore ได้เมื่อจำเป็น
Q3: จะใช้ USB device ใน VM ได้อย่างไร?
A3: สามารถเพิ่มอุปกรณ์ USB ผ่าน “Add Hardware” ใน virt-manager หรือกำหนด passthrough ด้วย virsh เพื่อเชื่อมต่อ USB flash, external HDD, printer กับ VM
Q4: จะตั้งให้ VM เปิดอัตโนมัติเมื่อเปิด host ได้อย่างไร?
A4: ใช้คำสั่ง virsh autostart <ชื่อ VM>
เพื่อให้ VM เปิดพร้อม host ทุกครั้ง
Q5: ถ้า VM ทำงานช้าควรแก้ไขอย่างไร?
A5: ตรวจสอบและปรับแต่งการจัดสรร resource (CPU, RAM), เลือก disk ที่เร็วขึ้น, เปลี่ยน qcow2 เป็น raw หรือเพิ่ม virtio driver ใน guest OS
Q6: ตั้งค่า network ของ VM ไม่สำเร็จควรทำอย่างไร?
A6: ตรวจสอบสถานะด้วย virsh หรือ brctl, ทบทวนการตั้งค่า network, แก้ไขไฟล์ Netplan หรือ NetworkManager ให้ถูกต้อง จากนั้น restart network service หรือ VM
Q7: KVM รองรับ cluster หรือ HA ได้หรือไม่?
A7: รองรับ สามารถใช้ Pacemaker, Corosync, NFS, iSCSI สำหรับสร้าง HA และ Live migration ได้ แต่ต้องมีความรู้เทคนิคเพิ่มเติม