Chuyển đến nội dung chính
DevOps

Cài đặt KVM trên Ubuntu: Quản lý VM qua Cockpit Web UI

Hướng dẫn cài đặt KVM trên Ubuntu và quản lý VM qua Cockpit Web UI. Cấu hình network bridge, mạng ảo NAT, storage pool cho homelab 2 node.

Cài đặt KVM trên Ubuntu: Quản lý VM qua Cockpit Web UI

Nếu bạn đang tìm kiếm giải pháp ảo hóa mạnh mẽ, miễn phí và được tích hợp trực tiếp vào Linux kernel, thì KVM (Kernel-based Virtual Machine) chính là câu trả lời. KVM biến Linux thành một Type-1 hypervisor, cho phép bạn chạy nhiều máy ảo (VMs) với hiệu năng gần như native.

Trong bài viết này, mình sẽ hướng dẫn bạn cài đặt KVM từ A-Z trên 2 máy chủ vật lý với cấu hình cụ thể:

Hostname IP Address Vai trò
kvm-node01 192.168.1.10 KVM Host #1
kvm-node02 192.168.1.11 KVM Host #2

Cấu hình này phù hợp cho việc xây dựng homelab, chạy Kubernetes cluster, hoặc môi trường development/testing.

Tại sao chọn KVM?

Trước khi bắt tay vào cài đặt, hãy hiểu tại sao KVM là lựa chọn phổ biến:

So sánh các giải pháp ảo hóa:

┌─────────────────┬──────────────┬─────────────┬──────────────┐
│     Tiêu chí    │     KVM      │   VMware    │  VirtualBox  │
├─────────────────┼──────────────┼─────────────┼──────────────┤
│ Chi phí         │ Miễn phí     │ Có phí      │ Miễn phí     │
│ Hiệu năng       │ Xuất sắc     │ Xuất sắc    │ Tốt          │
│ Tích hợp Linux  │ Native       │ Cần driver  │ Cần driver   │
│ Production-ready│ Có           │ Có          │ Không        │
│ Cloud providers │ AWS, GCP...  │ VMware Cloud│ Không        │
│ Nested Virt     │ Tốt          │ Tốt         │ Hạn chế      │
└─────────────────┴──────────────┴─────────────┴──────────────┘

KVM được sử dụng bởi các cloud providers lớn như AWS, Google Cloud, DigitalOcean, và là nền tảng cho OpenStack, Proxmox VE.

Yêu cầu hệ thống

Cấu hình 2 máy chủ của chúng ta:

Yêu cầu hệ thống

Yêu cầu tối thiểu mỗi node:

Bước 1: Kiểm tra Hardware Virtualization Support

📚 Thực hiện trên cả 2 node: kvm-node01 và kvm-node02

Đầu tiên, bạn cần xác nhận CPU hỗ trợ ảo hóa phần cứng. Đây là bước quan trọng nhất - nếu CPU không hỗ trợ, bạn không thể sử dụng KVM.

Kiểm tra CPU flags:

# Kiểm tra số lượng CPU cores hỗ trợ virtualization
egrep -c '(vmx|svm)' /proc/cpuinfo

Kết quả trả về số lớn hơn 0 nghĩa là CPU hỗ trợ:

  • vmx - Intel VT-x
  • svm - AMD-V

Kiểm tra chi tiết hơn:

# Xem loại virtualization
lscpu | grep Virtualization

Output mẫu:

Virtualization: VT-x (Intel)

Virtualization: AMD-V (AMD)

Sử dụng công cụ kvm-ok:

# Cài đặt cpu-checker
sudo apt update
sudo apt install -y cpu-checker

Chạy kiểm tra

sudo kvm-ok

Kết quả mong muốn:

INFO: /dev/kvm exists
KVM acceleration can be used
⚠️ Lưu ý: Nếu kết quả báo "KVM acceleration can NOT be used", hãy kiểm tra BIOS/UEFI và enable tùy chọn Intel VT-x hoặc AMD-V.

Bước 2: Cài đặt KVM và các Packages

📚 Thực hiện trên cả 2 node

Tiến hành cài đặt KVM và các packages cần thiết:

# Update hệ thống
sudo apt update && sudo apt upgrade -y

Cài đặt KVM và toàn bộ dependencies

sudo apt install -y
qemu-kvm
libvirt-daemon-system
libvirt-clients
bridge-utils
virtinst
virt-manager
libguestfs-tools
libosinfo-bin
cloud-image-utils

Giải thích từng package:

Package Chức năng
qemu-kvm QEMU emulator với KVM acceleration
libvirt-daemon-system Libvirt daemon quản lý VMs
libvirt-clients CLI tools như virsh
bridge-utils Tạo và quản lý network bridges
virtinst Công cụ virt-install để tạo VMs
virt-manager GUI quản lý VMs (optional cho server)
libguestfs-tools Tools thao tác với disk images
libosinfo-bin Database thông tin các OS
cloud-image-utils Tools làm việc với cloud images

Verify cài đặt:

# Kiểm tra KVM modules đã load
lsmod | grep kvm

Output mẫu (Intel):

kvm_intel 368640 0

kvm 1028096 1 kvm_intel

Output mẫu (AMD):

kvm_amd 139264 0

kvm 1028096 1 kvm_amd

Bước 3: Cấu hình User và Services

📚 Thực hiện trên cả 2 node

Để sử dụng KVM mà không cần sudo cho mọi lệnh, thêm user vào các groups cần thiết:

# Thêm user hiện tại vào group libvirt và kvm
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

Verify groups

groups $USER

Enable và start libvirtd service:

# Enable service khởi động cùng hệ thống
sudo systemctl enable libvirtd

Start service

sudo systemctl start libvirtd

Kiểm tra status

sudo systemctl status libvirtd

Output mong muốn:

● libvirtd.service - Virtualization daemon
Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; ...)
Active: active (running) since ...
💡 Tip: Sau khi thêm user vào groups, bạn cần logout và login lại, hoặc chạy newgrp libvirt để áp dụng ngay.

Kiểm tra kết nối libvirt:

# Test virsh command
virsh list --all

Nếu thành công, output sẽ là:

Id Name State

----------------------

(empty - chưa có VM nào)

Bước 4: Cấu hình Network Bridge

Đây là bước quan trọng nhất để VMs có thể giao tiếp với mạng bên ngoài. Chúng ta sẽ cấu hình bridge network cho cả 2 máy chủ với IP tĩnh.

Xác định tên network interface (thực hiện trên cả 2 node):

# Liệt kê các network interfaces
ip link show

Tìm interface chính (thường là enp0s3, eth0, eno1, ens18...)

Ghi nhớ tên này để dùng ở bước sau

Backup config hiện tại:

sudo mkdir -p /etc/netplan/backup
sudo cp /etc/netplan/*.yaml /etc/netplan/backup/

Cấu hình cho kvm-node01 (192.168.1.10)

sudo nano /etc/netplan/01-bridge-config.yaml
# /etc/netplan/01-bridge-config.yaml - kvm-node01
network:
version: 2
renderer: networkd

ethernets: enp0s3: # ⚠️ Thay bằng tên interface thực tế dhcp4: false dhcp6: false

bridges: br0: interfaces: - enp0s3 # ⚠️ Thay bằng tên interface thực tế addresses: - 192.168.1.10/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 mtu: 1500 parameters: stp: true forward-delay: 4

Cấu hình cho kvm-node02 (192.168.1.11)

sudo nano /etc/netplan/01-bridge-config.yaml
# /etc/netplan/01-bridge-config.yaml - kvm-node02
network:
version: 2
renderer: networkd

ethernets: enp0s3: # ⚠️ Thay bằng tên interface thực tế dhcp4: false dhcp6: false

bridges: br0: interfaces: - enp0s3 # ⚠️ Thay bằng tên interface thực tế addresses: - 192.168.1.11/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 mtu: 1500 parameters: stp: true forward-delay: 4

Áp dụng cấu hình (thực hiện trên cả 2 node):

# Kiểm tra syntax
sudo netplan try

Nếu OK, áp dụng

sudo netplan apply

Verify bridge đã tạo

ip addr show br0 brctl show

Output mong muốn:

bridge name     bridge id               STP enabled     interfaces
br0             8000.xxxxxxxxxxxx       yes             enp0s3
⚠️ Cảnh báo: Khi cấu hình network bridge qua SSH, bạn có thể bị mất kết nối. Sử dụng netplan try sẽ tự động rollback sau 120 giây nếu bạn không confirm.

Quy hoạch IP cho VMs

Range Mục đích
192.168.1.10 - 192.168.1.11 KVM Hosts
192.168.1.20 - 192.168.1.49 Infrastructure VMs (DNS, DHCP, etc.)
192.168.1.50 - 192.168.1.99 Kubernetes Cluster
192.168.1.100 - 192.168.1.149 VMs trên kvm-node01
192.168.1.150 - 192.168.1.199 VMs trên kvm-node02
192.168.1.200 - 192.168.1.250 Reserved / DHCP Pool
192.168.1.1 Gateway

Cấu hình Mạng Ảo cho VMs (NAT Network)

Ngoài bridge network, chúng ta sẽ tạo thêm một mạng ảo riêng cho các VMs. Mạng này sử dụng NAT để VMs có thể truy cập internet thông qua host, nhưng được cô lập khỏi mạng vật lý.

Tạo file định nghĩa mạng ảo:

# Tạo file XML cho mạng ảo
sudo tee /tmp/vm-private-network.xml << EOF
<network>
  <name>vm-private</name>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr1' stp='on' delay='0'/>
  <ip address='10.10.10.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.10.10.100' end='10.10.10.200'/>
    </dhcp>
  </ip>
</network>
EOF

Tạo và kích hoạt mạng ảo (thực hiện trên cả 2 node):

# Define network từ XML
sudo virsh net-define /tmp/vm-private-network.xml

Start network

sudo virsh net-start vm-private

Enable autostart

sudo virsh net-autostart vm-private

Verify

sudo virsh net-list --all

Output mong muốn:

 Name          State    Autostart   Persistent

default active yes yes vm-private active yes yes

Xem thông tin chi tiết mạng ảo:

# Xem cấu hình
sudo virsh net-dumpxml vm-private

Xem DHCP leases

sudo virsh net-dhcp-leases vm-private

Xem bridge interface

ip addr show virbr1

Quy hoạch mạng ảo cho cả 2 nodes:

Node Virtual Network Subnet DHCP Range
kvm-node01 vm-private 10.10.10.0/24 10.10.10.100-149
kvm-node02 vm-private 10.10.10.0/24 10.10.10.150-200
💡 Lưu ý: Cả 2 node dùng chung subnet 10.10.10.0/24 nhưng chia DHCP range khác nhau để tránh xung đột IP. VMs trên 2 node có thể giao tiếp trực tiếp với nhau qua mạng ảo.

Cấu hình mạng ảo cho kvm-node02 (cùng subnet, khác DHCP range):

# Trên kvm-node02, tạo file XML với DHCP range khác
sudo tee /tmp/vm-private-network.xml << EOF
<network>
  <n>vm-private</n>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr1' stp='on' delay='0'/>
  <ip address='10.10.10.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.10.10.150' end='10.10.10.200'/>
    </dhcp>
  </ip>
</network>
EOF

Define và start

sudo virsh net-define /tmp/vm-private-network.xml sudo virsh net-start vm-private sudo virsh net-autostart vm-private

Cài đặt Cockpit để quản lý KVM qua Web UI

Cockpit là web UI giúp quản lý KVM trực quan và dễ dàng. Cài đặt trên cả 2 node:

# Cài đặt Cockpit và module KVM
sudo apt install -y cockpit cockpit-machines

Enable và start Cockpit

sudo systemctl enable --now cockpit.socket

Kiểm tra status

sudo systemctl status cockpit.socket

Mở firewall (nếu có)

sudo ufw allow 9090/tcp

Truy cập Cockpit:

Node URL
kvm-node01 https://192.168.1.10:9090
kvm-node02 https://192.168.1.11:9090

Login bằng user Linux của bạn (cần quyền sudo).

Giao diện Cockpit cho KVM:

Tính năng Cockpit cho KVM:

Tính năng Mô tả
Virtual Machines Tạo, xóa, start, stop VMs trực quan
Console VNC/Serial console ngay trong browser
Storage Pools Quản lý disk images, upload ISO
Networks Tạo/sửa virtual networks (NAT, Bridge)
Snapshots Tạo và restore snapshots
Resource Monitor Theo dõi CPU, RAM, Disk, Network real-time

Cấu hình VXLAN Overlay Network (Mạng ảo chung 2 node)

Để VMs trên 2 node có thể giao tiếp trực tiếp với nhau qua mạng ảo chung, chúng ta sử dụng VXLAN (Virtual Extensible LAN). VXLAN tạo tunnel Layer 2 qua mạng vật lý, cho phép VMs trên các host khác nhau như cùng một switch ảo.

Cấu hình VXLAN Overlay Network (Mạng ảo chung 2 node)

Bước 1: Tạo VXLAN interface trên kvm-node01:

# Tạo VXLAN interface với VNI 100
sudo ip link add vxlan100 type vxlan id 100 \
    local 192.168.1.10 \
    remote 192.168.1.11 \
    dstport 4789 \
    dev br0

Bật interface

sudo ip link set vxlan100 up

Bước 2: Tạo VXLAN interface trên kvm-node02:

# Tạo VXLAN interface với VNI 100
sudo ip link add vxlan100 type vxlan id 100 
local 192.168.1.11
remote 192.168.1.10
dstport 4789
dev br0

Bật interface

sudo ip link set vxlan100 up

Bước 3: Tạo bridge cho VXLAN (thực hiện trên cả 2 node):

# Tạo bridge mới cho VXLAN
sudo ip link add vxlan-br0 type bridge
sudo ip link set vxlan-br0 up

Gắn VXLAN interface vào bridge

sudo ip link set vxlan100 master vxlan-br0

Verify

bridge link show

Bước 4: Cấu hình persistent với Netplan:

Tạo file /etc/netplan/02-vxlan.yaml trên kvm-node01:

network:
version: 2
tunnels:
vxlan100:
mode: vxlan
id: 100
local: 192.168.1.10
remote: 192.168.1.11
port: 4789

bridges: vxlan-br0: interfaces: - vxlan100 mtu: 1450 parameters: stp: false forward-delay: 0

Tạo file /etc/netplan/02-vxlan.yaml trên kvm-node02:

network:
version: 2
tunnels:
vxlan100:
mode: vxlan
id: 100
local: 192.168.1.11
remote: 192.168.1.10
port: 4789

bridges: vxlan-br0: interfaces: - vxlan100 mtu: 1450 parameters: stp: false forward-delay: 0

Áp dụng cấu hình:

sudo netplan apply

Verify VXLAN

ip -d link show vxlan100 bridge link show

Bước 5: Định nghĩa VXLAN network cho libvirt (cả 2 node):

sudo tee /tmp/vxlan-network.xml << EOF
<network>
<name>vxlan-net</name>
<forward mode="bridge"/>
<bridge name="vxlan-br0"/>
</network>
EOF

Define và start network

sudo virsh net-define /tmp/vxlan-network.xml sudo virsh net-start vxlan-net sudo virsh net-autostart vxlan-net

Verify

sudo virsh net-list --all

Bước 6: Tạo VM sử dụng VXLAN network:

# Tạo VM với VXLAN network
sudo virt-install 
--name vm-vxlan-01
--memory 2048
--vcpus 2
--disk path=/var/lib/libvirt/images/vm-vxlan-01.qcow2,size=20
--os-variant ubuntu22.04
--network network=vxlan-net
--graphics vnc
--cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso
--noautoconsole
⚠️ Lưu ý MTU: VMs sử dụng VXLAN cần đặt MTU = 1450 (do VXLAN header ~50 bytes). Cấu hình trong VM:

Test kết nối VXLAN:

# Trên VM1 (kvm-node01) - IP: 10.10.10.101
ping 10.10.10.103  # Ping đến VM3 trên kvm-node02

Kiểm tra VXLAN statistics

ip -s link show vxlan100

So sánh các loại mạng ảo:

Loại Use Case VMs giao tiếp cross-node Cô lập
NAT (vm-private) Dev/Test đơn giản ❌ Không ✅ Có
Bridge (br0) Production, LAN access ✅ Qua LAN ❌ Không
VXLAN Overlay Multi-node cluster ✅ Trực tiếp L2 ✅ Có

Bước 5: Cấu hình Storage Pool

📚 Thực hiện trên cả 2 node

Storage pool là nơi lưu trữ các disk images của VMs.

Tạo thư mục lưu trữ:

# Sử dụng thư mục mặc định
sudo mkdir -p /var/lib/libvirt/images

Set permissions

sudo chown -R libvirt-qemu:kvm /var/lib/libvirt/images sudo chmod -R 775 /var/lib/libvirt/images

Định nghĩa storage pool:

# Tạo pool mới
sudo virsh pool-define-as 
--name default
--type dir
--target /var/lib/libvirt/images

Build và start pool

sudo virsh pool-build default sudo virsh pool-start default sudo virsh pool-autostart default

Verify

sudo virsh pool-list --all sudo virsh pool-info default

Output mong muốn:

 Name      State    Autostart

default active yes

Bước 6: Cấu hình Hostname và /etc/hosts

Để 2 node có thể giao tiếp với nhau bằng hostname, cần cấu hình SSH và hostname:

Trên kvm-node01:

# Set hostname
sudo hostnamectl set-hostname kvm-node01

Cập nhật /etc/hosts

sudo nano /etc/hosts

127.0.0.1       localhost
192.168.1.10       kvm-node01
192.168.1.11       kvm-node02

Trên kvm-node02:

# Set hostname
sudo hostnamectl set-hostname kvm-node02

Cập nhật /etc/hosts

sudo nano /etc/hosts

127.0.0.1       localhost
192.168.1.10       kvm-node01
192.168.1.11       kvm-node02

Test kết nối giữa 2 node:

# Từ kvm-node01
ping -c 3 kvm-node02

Từ kvm-node02

ping -c 3 kvm-node01

Bước 7: Tạo Virtual Machine đầu tiên

Sau khi cài đặt KVM xong, chúng ta sẽ tạo VM đầu tiên sử dụng mạng ảo vm-private.

Phương pháp 1: Sử dụng Cloud Image (Nhanh)

Cloud images là disk images đã cài đặt sẵn OS, chỉ cần configure và boot:

Trên kvm-node01:

# Download Ubuntu Cloud Image
cd /var/lib/libvirt/images
sudo wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

Tạo disk image cho VM

sudo qemu-img create -f qcow2
-F qcow2
-b jammy-server-cloudimg-amd64.img
vm-test-01.qcow2 20G

Tạo cloud-init configuration:

# Tạo thư mục cho cloud-init
sudo mkdir -p /var/lib/libvirt/cloud-init

Tạo file meta-data

sudo tee /var/lib/libvirt/cloud-init/meta-data << EOF instance-id: vm-test-01 local-hostname: vm-test-01 EOF

Tạo file user-data

sudo tee /var/lib/libvirt/cloud-init/user-data << EOF #cloud-config hostname: vm-test-01 users:

  • name: ubuntu sudo: ALL=(ALL) NOPASSWD:ALL groups: users, admin home: /home/ubuntu shell: /bin/bash lock_passwd: false

chpasswd: list: | ubuntu:ubuntu123 expire: false

package_update: true packages:

  • qemu-guest-agent
  • curl
  • wget
  • vim

runcmd:

  • systemctl enable qemu-guest-agent
  • systemctl start qemu-guest-agent EOF

Tạo cloud-init ISO

sudo cloud-localds /var/lib/libvirt/images/vm-test-01-cidata.iso
/var/lib/libvirt/cloud-init/user-data
/var/lib/libvirt/cloud-init/meta-data

Tạo VM với mạng ảo vm-private:

sudo virt-install 
--name vm-test-01
--memory 2048
--vcpus 2
--disk path=/var/lib/libvirt/images/vm-test-01.qcow2,format=qcow2
--disk path=/var/lib/libvirt/images/vm-test-01-cidata.iso,device=cdrom
--os-variant ubuntu22.04
--network network=vm-private
--graphics none
--import
--noautoconsole
💡 Lưu ý: Sử dụng --network network=vm-private thay vì --network bridge=br0 để VM kết nối vào mạng ảo.

Kiểm tra VM:

# List VMs
virsh list --all

Xem IP của VM (VM sẽ nhận IP từ DHCP 10.10.10.x)

virsh domifaddr vm-test-01

Hoặc xem từ DHCP leases

sudo virsh net-dhcp-leases vm-private

Console vào VM

virsh console vm-test-01

Login: ubuntu / ubuntu123

Thoát console: Ctrl + ]

Kiểm tra network trong VM:

# Sau khi login vào VM
ip addr show

Output mẫu:

eth0: 10.10.10.101/24 (mạng ảo)

Test internet (qua NAT)

ping -c 3 google.com

Test ping đến host

ping -c 3 10.10.10.1

Tạo VM với 2 Network Interfaces

Nếu bạn cần VM vừa kết nối mạng ảo (internal) vừa kết nối bridge (external):

sudo virt-install 
--name vm-dual-nic
--memory 2048
--vcpus 2
--disk path=/var/lib/libvirt/images/vm-dual-nic.qcow2,size=20,format=qcow2
--os-variant ubuntu22.04
--network network=vm-private
--network bridge=br0
--graphics vnc,listen=0.0.0.0
--cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso
--boot cdrom,hd
--noautoconsole
Tạo VM với 2 Network Interfaces

Phương pháp 2: Cài đặt từ ISO

# Download Ubuntu Server ISO (nếu chưa có)
cd /var/lib/libvirt/images
sudo wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso

Tạo VM với mạng ảo

sudo virt-install
--name vm-ubuntu-01
--memory 2048
--vcpus 2
--disk path=/var/lib/libvirt/images/vm-ubuntu-01.qcow2,size=20,format=qcow2
--os-variant ubuntu22.04
--network network=vm-private
--graphics vnc,listen=0.0.0.0,port=5901
--cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso
--boot cdrom,hd
--noautoconsole

Kết nối VNC để cài đặt:

# Xem VNC port
sudo virsh vncdisplay vm-ubuntu-01

Output: :1 (nghĩa là port 5901)

Kết nối từ máy khác bằng VNC client

Address: 192.168.1.10:5901

So sánh các loại Network

Loại Network Use Case VM IP Truy cập từ bên ngoài
vm-private (NAT) Development, Testing 10.10.10.x Cần port forwarding
br0 (Bridge) Production, Services 192.168.1.x Trực tiếp
Dual NIC DMZ, Multi-tier apps Cả hai Tùy chọn

Bước 8: Quản lý Virtual Machines với virsh

Sau khi tạo VM trên KVM, bạn sẽ quản lý chúng bằng virsh command.

Quản lý Virtual Networks

# Liệt kê tất cả networks
virsh net-list --all

Xem thông tin network

virsh net-info vm-private

Xem DHCP leases (IP đã cấp cho VMs)

virsh net-dhcp-leases vm-private

Xem cấu hình XML của network

virsh net-dumpxml vm-private

Start/Stop network

virsh net-start vm-private virsh net-destroy vm-private

Enable/Disable autostart

virsh net-autostart vm-private virsh net-autostart --disable vm-private

Xóa network

virsh net-undefine vm-private

Các lệnh cơ bản

Lifecycle management:

# Liệt kê tất cả VMs
virsh list --all

Start VM

virsh start vm-test-01

Shutdown graceful

virsh shutdown vm-test-01

Force stop (như rút điện)

virsh destroy vm-test-01

Reboot

virsh reboot vm-test-01

Suspend/Resume

virsh suspend vm-test-01 virsh resume vm-test-01

Autostart khi host boot

virsh autostart vm-test-01 virsh autostart --disable vm-test-01

Thông tin VM:

# Thông tin tổng quan
virsh dominfo vm-test-01

CPU và memory stats

virsh domstats vm-test-01

Network interfaces

virsh domiflist vm-test-01

Disk information

virsh domblklist vm-test-01

IP address

virsh domifaddr vm-test-01

Snapshots

# Tạo snapshot
virsh snapshot-create-as vm-test-01 
--name "before-upgrade"
--description "Snapshot before system upgrade"

Liệt kê snapshots

virsh snapshot-list vm-test-01

Revert về snapshot

virsh snapshot-revert vm-test-01 before-upgrade

Xóa snapshot

virsh snapshot-delete vm-test-01 before-upgrade

Clone VM

# Shutdown VM trước khi clone
virsh shutdown vm-test-01

Clone VM

virt-clone
--original vm-test-01
--name vm-test-02
--auto-clone

Xóa VM

# Shutdown VM
virsh shutdown vm-test-01

Xóa VM definition và storage

virsh undefine vm-test-01 --remove-all-storage

Bước 9: Cấu hình Nested Virtualization (Optional)

Nested virtualization cho phép chạy VMs bên trong VMs - hữu ích khi bạn muốn test Kubernetes hoặc Docker trong VM.

Cho Intel CPU:

# Tạo file config
echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf

Reload module

sudo modprobe -r kvm_intel sudo modprobe kvm_intel

Verify

cat /sys/module/kvm_intel/parameters/nested

Output: Y hoặc 1

Cho AMD CPU:

# Tạo file config
echo "options kvm_amd nested=1" | sudo tee /etc/modprobe.d/kvm-amd.conf

Reload module

sudo modprobe -r kvm_amd sudo modprobe kvm_amd

Verify

cat /sys/module/kvm_amd/parameters/nested

Bước 10: Troubleshooting

Lỗi thường gặp

Lỗi: "Cannot access storage file"

# Kiểm tra permissions
ls -la /var/lib/libvirt/images/

Fix permissions

sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/.qcow2 sudo chmod 660 /var/lib/libvirt/images/.qcow2

Lỗi: VM không có IP address

# Kiểm tra bridge
brctl show
ip addr show br0

Trong VM, request DHCP

sudo dhclient -v

Lỗi: "Permission denied" khi chạy virsh

# Thêm vào groups
sudo usermod -aG libvirt,kvm $USER

Logout và login lại

Xem logs:

# Libvirt logs
sudo journalctl -u libvirtd -f

QEMU logs cho specific VM

sudo tail -f /var/log/libvirt/qemu/vm-test-01.log

Tài liệu tham khảo


Nếu bạn gặp vấn đề trong quá trình cài đặt, hãy để lại comment bên dưới!

DUY TRAN
Tác giả

DUY TRAN

Pursuing an AI-first mindset and intelligent system architecture. I build solutions by combining technology, creativity, and the ability to see structure in chaos — the foundation for becoming a Solution Architect.

Bình luận

Bài viết liên quan

Circuit Breaker Pattern trong Spring Boot
DevOps

Circuit Breaker Pattern trong Spring Boot

Tìm hiểu Circuit Breaker Pattern trong Spring Boot với Resilience4j - từ nguyên lý hoạt động, cấu hình chi tiết, ví dụ thực tế đến best practices. Hướng dẫn đầy đủ giúp bạn xây dựng hệ thống microservices resilient, ngăn chặn cascading failures và tự động recovery khi service gặp sự cố.

Duy TranDuy Tran35 phút