一、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 等完整虚拟化方案。