一、Linux 虛擬化技術分類
1. 全虛擬化 (Full Virtualization)
-
特點:Guest OS 無需修改,完全模擬硬件
-
代表技術:
-
KVM (Kernel-based Virtual Machine):主流方案,集成到 Linux 內核
-
QEMU:硬件模擬器,常與 KVM 配合使用
-
2. 半虛擬化 (Paravirtualization)
-
特點:Guest OS 需要修改內核,性能更高
-
代表技術:Xen(早期云平臺常用)
3. 容器化 (Containerization)
-
特點:共享主機內核,輕量級資源隔離
-
代表技術:
-
Docker:應用級容器
-
LXC (Linux Containers):系統級容器
-
4. 硬件輔助虛擬化
-
依賴:CPU 必須支持虛擬化擴展
-
Intel:VT-x
-
AMD:AMD-V
-
二、KVM/QEMU 實踐
1. 環境準備
# Ubuntu/Debian sudo apt-get install qemu-kvm libvirt-daemon-system virt-manager ? # 驗證虛擬化支持 egrep -c '(vmx|svm)' /proc/cpuinfo # 輸出應 >0 kvm-ok ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 顯示"KVM acceleration can be used"
2. 創建虛擬機
# 使用 virt-install 創建虛擬機 virt-install \--name ubuntu-server \--ram 2048 \--vcpus 2 \--disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=20 \--os-type linux \--os-variant ubuntu22.04 \--network bridge=virbr0 \--graphics none \--console pty,target_type=serial \--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/' \--extra-args 'console=ttyS0,115200n8 serial'
3. 管理虛擬機
# 查看運行中的虛擬機 virsh list ? # 啟動/關閉虛擬機 virsh start ubuntu-server virsh shutdown ubuntu-server ? # 刪除虛擬機 virsh undefine ubuntu-server
三、Docker 容器化實踐
1. 基礎操作
# 安裝 Docker curl -fsSL https://get.docker.com | sudo bash ? # 運行容器 docker run -it --rm ubuntu:22.04 /bin/bash ? # 構建自定義鏡像 cat <<EOF > Dockerfile FROM alpine:latest RUN apk add --no-cache nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] EOF docker build -t my-nginx .
2. 容器網絡
# 創建自定義網絡 docker network create my-net ? # 運行容器并連接網絡 docker run -d --name web --network my-net nginx
3. 資源限制
# 限制 CPU 和內存 docker run -it --cpus="1.5" --memory="512m" ubuntu
四、性能優化技巧
-
KVM 優化
# 使用 VirtIO 驅動提升磁盤/網絡性能 <disk type='file' device='disk'><driver name='qemu' type='qcow2' cache='none' io='native'/><source file='/path/to/image.qcow2'/><target dev='vda' bus='virtio'/> </disk> ? # CPU 綁定 virsh vcpupin <domain> <vcpu> <cpulist>
-
容器優化
# 使用 --memory-swap=0 禁用交換分區 docker run -m 256m --memory-swap=0 my-app ? # 使用 cgroups v2 控制資源 systemd.unified_cgroup_hierarchy=1
五、虛擬化監控工具
工具 | 用途 | 示例命令 |
---|---|---|
virt-top | 實時監控 KVM 虛擬機 | virt-top |
docker stats | 監控容器資源使用 | docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" |
sar | 系統資源統計 | sar -r 1 3 |
perf | 性能分析 | perf stat -e cpu-cycles ls |
六、安全注意事項
-
KVM 安全:
-
定期更新 QEMU/KVM
-
使用 SELinux 或 AppArmor
-
禁用不必要的虛擬機功能(如 USB 透傳)
-
-
容器安全:
-
以非 root 用戶運行容器
FROM alpine RUN adduser -D appuser USER appuser
-
限制容器能力
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
-
七、高級場景
1. 嵌套虛擬化
# 啟用嵌套虛擬化(Intel CPU) sudo modprobe -r kvm_intel sudo modprobe kvm_intel nested=1 cat /sys/module/kvm_intel/parameters/nested # 應顯示 Y
2. GPU 透傳
# 綁定 GPU 到 vfio-pci echo "options vfio-pci ids=10de:1b80,10de:10f0" > /etc/modprobe.d/vfio.conf
3. Kubernetes 虛擬化
# 使用 KubeVirt 管理虛擬機 kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0/kubevirt-operator.yaml
八、故障排查
-
常見錯誤:
-
KVM 無法啟動:檢查
/var/log/libvirt/qemu/
日志 -
容器網絡不通:檢查 iptables 規則
iptables -L -n -v
-
性能下降:使用
perf top
分析熱點
-
-
調試工具:
# KVM 調試 virsh dumpxml <vm-name> # 查看虛擬機配置 qemu-monitor: info cpus # 進入 QEMU 監控模式 ? # 容器調試 docker inspect <container-id> nsenter -t <pid> -n ip a
選擇虛擬化方案時需根據具體需求(性能需求、隔離要求、管理復雜度)進行權衡。建議從容器化開始實驗,再逐步深入 KVM 等完整虛擬化方案。