บทความนี้จะแนะนำวิงติดตั้งและกำหนดค่า KVM Hypervisor บนเซิร์ฟเวอร์ที่รัน Linux RHEL หรือ CentOS จะแสดงวิธีสร้าง VM ใน KVM เปลี่ยนการตั้งค่า และติดตั้ง Guest OS รวมถึงคำสั่งทั่วไปสำหรับจัดการ VM
KVM (Kernel-based Virtual Machine) เป็น Linux Hypervisor ที่ใช้เทคโนโลยี Hardware Virtualization Intel VT หรือ AMD SVM ด้วย KVM สามารถสร้าง VM แบบ Isolated พร้อม Virtual Hardware ของตัวเอง: Network Adapters, Disks, Graphic Cards หรืออุปกรณ์อื่นๆ สามารถติดตั้ง Guest OS ใดๆ ได้ (ไม่ได้จำกัดแค่ Linux)
วิธีติดตั้ง KVM บน CentOS/RHEL
ตอนตั้งค่า KVM ควรเริ่มจากตรวจสอบ CPU ต้องแน่ใจว่า CPU บน Host รองรับ Hardware Virtualization รันคำสั่งใน Console เซิร์ฟเวอร์:
# cat /proc/cpuinfo | egrep "(vmx|svm)"
ถ้า Processor รองรับ VT-x จะได้ Output ประมาณนี้:

ถ้าคำสั่งไม่คืนค่าอะไร แต่ทราบว่า CPU รองรับ Virtualization ให้ตรวจสอบใน BIOS ของเซิร์ฟเวอร์ ว่าตัวเลือก Intel Virtualization Technology หรือ SVM MODE ไม่ได้ถูก Disable
เซิร์ฟเวอร์ของผมรองรับ VT-x และเปิดอยู่แล้ว จึงติดตั้ง Package ที่จำเป็นบน CentOS/RHEL ด้วย yum/dnf:
# yum install libvirt libvirt-python libguestfs-tools qemu-kvm virt-install –y
- qemu-kvm – KVM Hypervisor
- libvirt – Library จัดการ Virtualization
- virt-install – CLI Tools จัดการ KVM VMs
จะติดตั้ง Package จำนวนมาก ตรวจสอบว่าไม่มี Error ระหว่างติดตั้ง
เพิ่ม Service libvirtd เข้า Startup และ Start 它:
# systemctl enable libvirtd
# systemctl start libvirtd

ตรวจสอบว่า Kernel Modules kvm_intel และ kvm โหลดแล้ว:
# lsmod | grep kvm
kvm_intel 188688 0 kvm 636931 1 kvm_intel irqbypass 13503 1 kvm
ถ้าคำสั่งไม่คืนค่า ให้ Restart Host และตรวจสอบใหม่
สร้างและกำหนดค่า Bridge Networking สำหรับ KVM
สร้าง Directory เก็บ Disk VM และ ISO Images:
# mkdir -p /vz/{disk,iso}
เพื่อให้ VM เข้าถึง Internet ได้ ต้องตั้งค่า Network แบบ Bridge ต้องใช้ bridge-utils ตรวจสอบว่าติดตั้งแล้ว:
# rpm -qa | grep bridge-utils
ติดตั้งถ้ายังไม่มี:
# yum install bridge-utils -y
หลังติดตั้ง Package แล้ว Network Interface virbr0 จะปรากฏใน OS:
# ip a

เพื่อสร้าง Bridge ต้องตั้งค่า Config File ของ Network Interface เซิร์ฟเวอร์:
# cp /etc/sysconfig/network-scripts/ifcfg-enp1s0f0 /etc/sysconfig/network-scripts/ifcfg-enp1s0f0_bak – Backup ไฟล์
# nano /etc/sysconfig/network-scripts/ifcfg-enp1s0f0 — เปิดแก้ไข
ลบเนื้อหาเดิมและแทนที่ด้วย:
DEVICE="enp1s0f0" ONBOOT="yes" BRIDGE=br0
ในกรณีของคุณ Interface Name อาจต่างออกไป (ดูได้จากคำสั่ง ip a)
จากนั้นสร้างไฟล์:
# nano /etc/sysconfig/network-scripts/ifcfg-br0
ประกอบด้วย Config ดังนี้:
DEVICE="br0" TYPE=BRIDGE ONBOOT=yes BOOTPROTO=static IPADDR="IP_address_of_the_server" NETMASK="255.255.255.0" GATEWAY="Default_gateway" DNS1="8.8.8.8" DNS2="8.8.4.4"
ต้องระบุ IP Address เซิร์ฟเวอร์และ Default Gateway ของคุณ หลังแก้ไข Config Network Interface แล้ว ให้ Restart Network:
# service network restart
หากหลัง Restart Network เข้าถึงเซิร์ฟเวอร์ไม่ได้ ลอง Restart Host ด้วย บางครั้งจำเป็นต้อง Restart เพื่อให้ Bridge ทำงานถูกต้อง
ดูสถานะ Bridge ด้วยคำสั่ง:
# brctl show
bridge name bridge id STP enabled interfaces br0 8000.ac1f6b654321 no enp1s0f0 virbr0 8000.525400abcdef1 yes virbr0-nic
ขั้นตอนสุดท้าย กำหนดค่า Network Traffic Forwarding:
# echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
จากนั้น Restart libvirtd:
# service libvirtd restart
การตั้งค่า KVM Network พื้นฐานเสร็จสิ้น สามารถสร้าง VM ได้แล้ว
การสร้าง Virtual Machines ใน KVM
ก่อนสร้าง VM ผมดาวน์โหลด CentOS 8 Image จาก Mirror อย่างเป็นทางการไปที่ /vz/iso:
# cd /vz/iso && wget https://mirror.imt-systems.com/centos/8.3.2011/isos/x86_64/CentOS-8.3.2011-x86_64-dvd1.iso
เพื่อสร้าง KVM VM ใหม่ รันคำสั่ง:
virt-install -n test-centosvm \
--noautoconsole \
--network=bridge:br0 \
--ram 2048 --arch=x86_64 \
--vcpus=4 --cpu host --check-cpu \
--disk path=/vz/disk/test-centosvm.img,size=32 \
--cdrom /vz/iso/CentOS-8.3.2011-x86_64-dvd1.iso \
--graphics vnc,listen=IP,password=p@sswdr0w1 \
--os-type linux --os-variant=rhel7 --boot cdrom,hd,menu=on
test-centosvm— ชื่อ VMnoautoconsole– หลังสร้าง VM จะไม่เชื่อมต่อ Console อัตโนมัติnetwork– ประเภท Network (Bridge ในที่นี้)ram— ปริมาณ RAM ใน VMvcpus– จำนวน CPU Cores (vCPU Config สำหรับ VM)disk– Virtual Disk, Path – พาธไป Disk, Size – ขนาด Disk (ขยาย/ลดได้ภายหลัง)cdrom– Virtual CDROM, Mount ISO Image ติดตั้ง Guest OSgraphics — พารามิเตอร์เชื่อมต่อ VM ผ่าน Graphic Console ใช้ VNC ระบุ IP ของ KVM Server ที่สร้าง VM และ Password เข้า Console VM
เพื่อให้ VM บูทอัตโนมัติ รัน:
# virsh autostart test-centosvm
วิธีเชื่อมต่อ KVM VM ด้วย VNC และติดตั้ง OS
เพื่อเชื่อมต่อ KVM VM ด้วย VNC ต้องหา Port ที่รันอยู่:
# virsh vncdisplay test-centovms
IP:0
0 หมายถึง Port สำหรับเชื่อมต่อ VNC คือ 5900 หากได้ค่าอื่น ให้บวกค่าที่ได้กับ 5900
ผมใช้ TightVNC สำหรับเชื่อมต่อ VNC รันแล้วระบุ IP เซิร์ฟเวอร์และ VNC Port ที่ได้ก่อนหน้า (คั่นด้วย Double Colon)

คลิก Connect และป้อน Password ที่ตั้งไว้ตอนสร้าง KVM VM หากทำถูกต้อง จะเห็น Console ของเซิร์ฟเวอร์ ที่กำลังติดตั้ง CentOS (หรือ Guest OS อื่นที่ Mount ISO ไว้)

หากเปิด Firewall บนเซิร์ฟเวอร์ ให้เปิด Port 5900-5910 สำหรับ VNC ใน firewalld/iptables (10 Port พอ) หลังติดตั้ง Guest OS บน VM เริ่ม VM จาก Console เซิร์ฟเวอร์:

เพื่อ Shutdown KVM VM ใช้คำสั่ง:
# virsh shutdown test-centosvm
แสดงรายชื่อ VM ที่ลงทะเบียนทั้งหมดใน KVM:
# virsh list --all
ศึกษาเพิ่มเติมเกี่ยวกับการจัดการ KVM VM จาก Console เซิร์ฟเวอร์ด้วย virsh (วิธีเพิ่ม RAM, CPU, Disk, Network Interfaces) หากชอบ GUI สามารถใช้ virt-manager KVM GUI
การตั้งค่า KVM Host พื้นฐานเสร็จสิ้น และสร้าง VM แล้ว สามารถสร้าง VM จำนวนไม่จำกัดใน KVM ขึ้นอยู่กับทรัพยากรเซิร์ฟเวอร์และความต้องการของคุณ