Linux 虚拟化方案

一、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

四、性能优化技巧

  1. 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>
  2. 容器优化

    # 使用 --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

六、安全注意事项

  1. KVM 安全

    • 定期更新 QEMU/KVM

    • 使用 SELinux 或 AppArmor

    • 禁用不必要的虚拟机功能(如 USB 透传)

  2. 容器安全

    • 以非 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

八、故障排查

  1. 常见错误

    • KVM 无法启动:检查 /var/log/libvirt/qemu/ 日志

    • 容器网络不通:检查 iptables 规则 iptables -L -n -v

    • 性能下降:使用 perf top 分析热点

  2. 调试工具

    # KVM 调试
    virsh dumpxml <vm-name>  # 查看虚拟机配置
    qemu-monitor: info cpus  # 进入 QEMU 监控模式
    ​
    # 容器调试
    docker inspect <container-id>
    nsenter -t <pid> -n ip a

选择虚拟化方案时需根据具体需求(性能需求、隔离要求、管理复杂度)进行权衡。建议从容器化开始实验,再逐步深入 KVM 等完整虚拟化方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值