Ubuntu服务器上配置KVM虚拟化环境:从零搭建Windows开发环境
1. 为什么要在Ubuntu服务器上跑Windows很多开发者可能都有这样的困惑明明手头有性能强劲的Ubuntu服务器但某些开发工具只能在Windows环境下运行。比如Visual Studio、SQL Server Management Studio这些微软系工具或者某些行业专用的Windows版开发套件。这时候在Linux服务器上搭建Windows虚拟机就成了最佳解决方案。我去年就遇到过这种情况团队接了个需要用到.NET Framework 4.8的项目但我们的CI服务器都是Ubuntu系统。最后用KVM虚拟化跑了几个Windows Server虚拟机完美解决了问题。相比双系统切换或者单独购置Windows服务器虚拟化方案既节省成本又方便管理。KVMKernel-based Virtual Machine作为Linux内核原生的虚拟化方案性能损耗可以控制在3%以内。这意味着你花1万块买的服务器跑虚拟机时能发挥出9700元的实力远比VirtualBox这类Type-2虚拟化高效得多。2. 准备工作硬件和系统检查2.1 确认CPU虚拟化支持在开始之前先确认你的服务器CPU是否支持硬件虚拟化。这个步骤很多人会忽略结果折腾半天发现根本跑不起来。打开终端执行egrep -c (vmx|svm) /proc/cpuinfo如果输出数字大于0恭喜你的CPU支持虚拟化。Intel CPU显示vmxAMD则是svm。我遇到过一些云服务器默认关闭虚拟化支持的情况这时候需要去控制面板里手动开启。2.2 检查系统环境推荐使用Ubuntu 20.04 LTS或更新版本这些系统对KVM的支持最完善。先更新软件包列表sudo apt update sudo apt upgrade -y内存方面建议主机至少16GB。我试过在8GB内存的机器上跑Windows 10虚拟机分配4GB给虚拟机后宿主机就有点卡顿了。如果要做团队开发环境32GB起步会更稳妥。3. 安装和配置KVM环境3.1 安装必要软件包完整的KVM生态包含多个组件用这个命令一次性安装sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager virt-viewer这里解释下各个包的作用qemu-kvm提供虚拟化核心功能libvirt管理虚拟机的守护进程virt-manager图形化管理工具后面会教无图形界面的用法bridge-utils配置网络桥接的工具安装完成后把当前用户加入相关用户组sudo usermod -aG libvirt $USER sudo usermod -aG kvm $USER记得注销重新登录使权限生效。我第一次配置时忘了这步结果virt-manager老是报权限错误。3.2 配置网络桥接默认的NAT网络虚拟机可以上网但外部无法直接访问虚拟机。对于开发环境建议配置桥接网络sudo nano /etc/netplan/00-installer-config.yaml修改为类似这样的配置根据你的实际网卡名调整network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: no bridges: br0: interfaces: [enp3s0] dhcp4: yes应用配置sudo netplan apply用ip addr show命令确认br0接口已经获取到IP地址。桥接模式下虚拟机会获得和物理机同网段的IP就像真实设备一样接入网络。4. 创建Windows虚拟机4.1 准备安装镜像从微软官网下载Windows 10/11或Server版的ISO镜像。建议放在/var/lib/libvirt/images/目录下sudo wget https://example.com/win10.iso -P /var/lib/libvirt/images/4.2 使用virt-install命令行创建虽然virt-manager图形界面更直观但在服务器上我们通常用命令行virt-install \ --name Win10-Dev \ --ram 8192 \ --vcpus 4 \ --disk path/var/lib/libvirt/images/win10.qcow2,size50 \ --os-type windows \ --os-variant win10 \ --network bridgebr0 \ --graphics spice \ --cdrom /var/lib/libvirt/images/win10.iso参数说明ram分配内存大小(MB)vcpus虚拟CPU核心数disk虚拟磁盘位置和大小(GB)graphics使用SPICE协议远程连接创建完成后虚拟机会自动启动进入Windows安装界面。这时候我们需要解决如何看到安装界面的问题。5. 远程连接虚拟机5.1 使用SSH隧道连接SPICE在本地电脑上执行ssh -L 5900:localhost:5900 your_userserver_ip然后使用Remote Viewer连接本地5900端口remote-viewer spice://localhost:5900这样就能看到Windows安装界面了。我推荐使用SPICE而不是VNC因为SPICE支持动态分辨率调整、音频传输等高级功能。5.2 无图形界面管理方案如果不想用图形界面可以纯命令行管理# 查看运行中的虚拟机 virsh list # 启动/关闭虚拟机 virsh start Win10-Dev virsh shutdown Win10-Dev # 查看虚拟机控制台 virsh console Win10-Dev对于Windows虚拟机记得在系统内安装virtio驱动提升磁盘和网络性能。驱动镜像通常位于/usr/share/virtio-win/virtio-win.iso。6. 性能优化技巧6.1 启用CPU透传如果你的CPU支持可以在虚拟机配置中添加cpu modehost-passthrough checknone/这样虚拟机可以直接使用宿主机的CPU指令集性能提升显著。我在Ryzen 9 5950X上测试编译速度比默认配置快15%。6.2 磁盘性能优化默认的qcow2格式方便但性能一般对于IO密集型应用可以改用raw格式qemu-img create -f raw /var/lib/libvirt/images/win10.raw 50G然后在虚拟机配置中使用virtio-scsi控制器并启用discard功能支持TRIM。6.3 内存大页配置对于内存大于32GB的服务器启用大页能提升内存访问效率sudo sysctl vm.nr_hugepages1024然后在虚拟机配置中添加memoryBacking hugepages/ /memoryBacking7. 常见问题解决7.1 虚拟机启动卡住如果Windows安装时卡在正在启动Windows尝试修改虚拟机配置features hyperv relaxed stateon/ vapic stateon/ spinlocks stateon retries8191/ /hyperv /features7.2 网络连接问题桥接网络不工作时检查宿主机的iptables/nftables规则网桥是否正常获取IP虚拟机内是否安装了virtio-net驱动7.3 性能突然下降用这个命令查看资源使用情况sudo perf kvm --host stat -a可能是内存交换、CPU过热降频或者磁盘IO瓶颈导致。8. 团队开发环境配置8.1 批量创建虚拟机用这个脚本批量创建多个开发环境for i in {1..5}; do virt-install \ --name Dev-$i \ --ram 4096 \ --vcpus 2 \ --disk path/var/lib/libvirt/images/dev-$i.qcow2,size30 \ --os-type windows \ --os-variant win10 \ --network bridgebr0 \ --graphics none \ --cdrom /var/lib/libvirt/images/win10.iso \ --noautoconsole done8.2 使用云镜像快速部署微软提供了预配置的Windows云镜像启动更快sudo apt install cloud-image-utils wget https://cloudbase.it/windows-images/Windows-Server-2019.qcow2 qemu-img convert -O qcow2 Windows-Server-2019.qcow2 windows-dev.qcow28.3 自动化配置通过cloud-init自动化配置虚拟机#cloud-config hostname: windows-dev password: mysecurepassword chpasswd: { expire: False } ssh_pwauth: True然后用virt-customize工具注入配置virt-customize -a windows-dev.qcow2 --upload cloud-config.yaml:/cloud-config.yaml这套方案在我们团队已经稳定运行一年多支撑了十几个.NET项目的开发测试需求。最关键的是所有环境都可以通过脚本快速重建新成员入职当天就能获得完整的开发环境。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2464530.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!