麒麟系统KVM虚拟化实战:从环境检查到性能调优全指南
1. 环境评估装KVM之前先搞清楚这几件事1.1 硬件虚拟化到底开没开麒麟系统装KVM第一步不是敲命令而是先确认硬件支持。很多人一上来就apt install qemu-kvm装完发现/dev/kvm不存在虚拟机一启动就报“KVM is not available”或者莫名其妙的权限错误折腾半天才发现CPU虚拟化没开。检查方法很简单一条命令搞定egrep -c (vmx|svm) /proc/cpuinfo如果输出大于0说明CPU支持虚拟化。但这里有个坑输出大于0只能说明CPU指令集支持不代表BIOS里真的开了。更靠谱的判断方式是直接看/dev/kvm是否存在ls -l /dev/kvm如果能看到/dev/kvm这个设备文件说明内核已经加载了KVM模块这时再去看CPU能力才有意义。如果egrep输出是0或者/dev/kvm不存在大概率需要重启进BIOS找到Intel VT-x或AMD-V的选项打开。不同厂商的BIOS叫法不一样常见的有“Intel Virtualization Technology”、“Virtualization”、“SVM Mode”有些主板藏得深在“Advanced”或者“Overclocking”菜单下面我见过不少服务器用的是“VT-d”和“VT-x”分开控制的两个都得开。另外如果你是在公司机房、云平台或者一些政企环境里操作还得多留一个心眼物理机本身可能已经被别的虚拟机软件占用了VMM虚拟机监视器的位置这种情况下即使BIOS开了虚拟化宿主系统也没法直接管理KVM。可以用这条命令看看当前系统的虚拟化权限virt-host-validate这个工具会列出所有和虚拟化相关的环境检查项哪些通过、哪些警告一目了然。提示如果你是用个人电脑装麒麟系统做实验建议先确认CPU型号支持虚拟化。Intel的i3/i5/i7/i9和AMD的Ryzen绝大多数都支持但一些低功耗处理器比如部分赛扬、奔腾以及老旧的Atom平台可能砍掉了VT指令集这种就别折腾KVM了老老实实换方案。1.2 操作系统版本的兼容性判断麒麟系统并不是只有一个市面上主流的是银河麒麟和中标麒麟两大系列其中银河麒麟V10是目前最常见的版本。而在V10里面还分桌面版、服务器版、高级版等好几个分支我实测下来服务器版对虚拟化支持最好桌面版其实也能装只是默认没装全相关组件。先确认自己的内核版本和系统架构uname -a cat /etc/os-release正常来说银河麒麟V10基于Linux内核x86_64架构下完全支持KVM。如果你用的是ARM版本比如飞腾、鲲鹏平台的服务器KVM照样能用只是部分软件源里的包名可能有所差异安装方式要稍微调整。后续命令我会以x86_64为例ARM平台如果遇到差异我会额外标注。还有一个比较容易被忽略的问题CentOS停止维护后很多企业把系统迁到了麒麟但沿用CentOS的软件源习惯直接用yum install装KVM组件——这个思路其实没问题麒麟V10兼容CentOS生态yum命令可用。但你一定要保证系统源是通的离线环境下安装虚拟化组件会非常痛苦需要手动下载一堆rpm包处理依赖关系。后面我会专门讲离线安装的方案。2. 安装核心组件QEMU-KVM和工具链2.1 在线安装需要哪些包确认硬件支持后就可以正式安装了。麒麟系统银河麒麟V10安装KVM的核心组件和CentOS/RHEL系列很相似推荐的包组合如下sudo yum install -y qemu-kvm libvirt virt-install bridge-utils这几个包分别解决什么功能我拆开说一下qemu-kvmKVM的虚拟化核心提供用户态的QEMU进程负责CPU、内存、设备的模拟。没有这个libvirt就只是一个空壳。libvirt虚拟化管理的统一API层提供virsh命令行工具后续创建、删除、启停虚拟机都要靠它。virt-install命令行下创建虚拟机的工具参数写好后自动完成系统安装流程不用手动操作复杂的qemu命令。bridge-utils桥接网络工具集包含brctl后面配置虚拟机桥接网络时会用到。如果你的系统是Ubuntu系的有些麒麟版本基于Ubuntu安装命令要改成sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst装完之后启动libvirtd服务并设置开机自启sudo systemctl enable --now libvirtd sudo systemctl status libvirtd这里有一个常见问题有些人装完libvirtd但忘了启停vhostmd服务导致虚拟机管理界面显示不了CPU/内存的准确数据。虽然不影响运行但排查问题时不方便。建议直接把它们一起拉起来sudo systemctl restart libvirtd virtlogd virtlockd2.2 离线环境下的安装策略很多信创项目、政企内网环境是纯离线的这恰好是“麒麟系统安装KVM”最常见的落地场景。离线安装的核心思路是在能联网的同架构环境里把安装KVM所需的rpm包连同依赖全部下载下来再拷贝到目标机器上安装。具体操作分两步走。第一步找一台同架构、同系统的联网机器执行sudo yum install --downloadonly --downloaddir/tmp/kvm-packages qemu-kvm libvirt virt-install bridge-utils这个--downloaddir参数会把所有依赖包都下到指定目录。第二步把/tmp/kvm-packages整个目录拷贝到离线机器上然后执行cd /tmp/kvm-packages sudo yum localinstall *.rpm用yum localinstall的好处是它会自动解析当前目录下的依赖关系而不需要连网。不过实际操作中我发现一个问题如果麒麟系统的版本差异较大比如同是V10但打补丁的批次不同本地依赖可能不完整这时就需要再补几个包。建议下载时用--resolve参数它能连二级依赖都一并拉下来sudo yum install --downloadonly --resolve --downloaddir/tmp/kvm-packages qemu-kvm libvirt virt-install离线安装最怕的就是版本冲突。我踩过一次坑目标机器上已经有一个旧版本的libvirt-python新版本的libvirt-daemon依赖它但不兼容导致整个安装回滚。遇到这种情况不要硬刚先看冲突的包是哪个然后决定是升级还是降级sudo yum list installed | grep libvirt sudo yum deplist qemu-kvm2.3 服务启动和权限组配置安装完成后除了系统服务还有一个很容易被忽略的点普通用户能不能用KVM。libvirt默认只允许root和libvirt组的成员管理虚拟机。如果你希望用普通账号远程管理需要把用户加进组里sudo usermod -aG libvirt $(whoami)然后重新登录一次终端组权限才会生效。如果不重启终端临时切一下用户组也可以newgrp libvirt验证权限是否生效最简单的方法virsh list --all如果能正常输出列表哪怕为空说明libvirt服务正常权限也OK。如果出现failed to connect to the hypervisor排查顺序是先看libvirtd服务状态再检查当前用户是否有权限访问/var/run/libvirt/libvirt-sock套接字。3. 创建第一台虚拟机命令行全流程拆解3.1 系统镜像的准备与格式选择创建KVM虚拟机前必须先把安装介质准备好。这里的“介质”一般指ISO镜像文件。麒麟系统本身支持安装各种客户机系统比如麒麟自己的V10、Ubuntu、Debian、openEuler乃至Windows不过Windows在KVM上跑需要额外安装virtio驱动这一点后面会单独强调。镜像文件下载好后先建立一个统一的存放目录避免后续路径混乱sudo mkdir -p /data/iso /data/vm sudo mv /path/to/your.iso /data/iso/还有磁盘格式的选择。KVM原生支持qcow2和raw两种主流格式我强烈建议优先用qcow2。qcow2的优势在于一是支持COW写时复制创建时可以指定一个最大容量但实际使用多少才占多少磁盘空间对主机磁盘是友好的二是支持快照、压缩、加密等特性后续备份恢复、克隆模板都方便。raw格式性能会稍好一丢丢但空间利用率低也没有快照功能。3.2 virt-install 创建虚拟机的参数解析先看一条完整的创建命令我用了银河麒麟V10安装另一个麒麟V10桌面版的场景sudo virt-install \ --name kylin-vm01 \ --memory 4096 \ --vcpus 4 \ --disk path/data/vm/kylin-vm01.qcow2,size50,formatqcow2 \ --cdrom /data/iso/Kylin-Desktop-V10-SP1-Release-xxx.iso \ --os-variant kylin \ --network networkdefault \ --graphics vnc,listen0.0.0.0,port5901 \ --noautoconsole每个参数的含义我按实际使用顺序拆解--name虚拟机名称后续所有virsh操作都靠它标识。--memory内存大小单位MB。这里我给4GB桌面版麒麟系统4GB是起步如果装服务器版2GB也能跑起来但实际使用时建议别低于2GB。--vcpus虚拟CPU核心数。注意这个数字不一定越多越好受物理机CPU核数和超线程影响建议先查一下物理机总核数再分配。--disk磁盘配置。path是磁盘镜像的保存路径size是允许的最大容量单位GBformat指定格式。--cdrom挂载的ISO安装镜像。--os-variant指定客户机系统的类型。这个参数直接影响QEMU对CPU模型和设备模拟器的选择。--network虚拟机的网络连接模式。networkdefault表示使用libvirt自带的NAT虚拟网络虚拟机通过宿主机访问外网。--graphics图形显示配置。vnc,listen0.0.0.0表示允许从任意IP通过VNC连接port5901指定VNC端口。--noautoconsole创建后不自动打开控制台窗口适合远程SSH场景。执行后如果一切正常终端会输出类似下面的内容Starting install... Creating domain...此时虚拟机已经在后台启动了通过VNC客户端TigerVNC、RealVNC或者virt-manager里的图形界面连接宿主机的5901端口就能看到麒麟系统的安装画面。3.3 系统安装过程中的关键设置与避坑通过VNC进入安装界面后跟物理机上装系统基本没区别但有三个环节需要特别留意。第一个是安装位置选择。安装界面会识别到我们之前分配的虚拟磁盘通常显示为空闲磁盘。一定要选“自动创建分区”或者“手动分区”千万不要手滑选成“清除整个磁盘”——虽然虚拟机里清了也没啥事儿但它会额外耗时间而且会误格式化掉你可能需要保留的磁盘分区。第二个是软件源配置。如果你的ISO镜像过旧安装过程中跳出软件源更新的提示建议跳过或取消勾选在线更新。离线环境根本连不上外网卡在“正在校验软件源”这个环节能等半天。我见过有同事在虚拟机上装麒麟系统装到80%提示无法获取软件包就是因为勾选了在线仓库。第三个是root密码和用户创建。这个虽然简单但很多人习惯性把密码设成和宿主机一样的如果后续多台虚拟机都这么干一方面安全隐患大另一方面也容易搞混机器。建议每台虚拟机单独设置密码并在备注里记录用途方便后续管理。装完系统重启后千万别急着登进去装软件。先把远程管理工具链配好因为接下来创建第二台、第三台虚拟机时你会发现自己根本离不开virt-manager和virsh。3.4 virt-manager图形化管理工具的必要性命令行创建虚拟机已经很灵活了但日常管理还是推荐装一下virt-manager这个图形化工具。它像VirtualBox一样能直观看到虚拟机的CPU、内存、磁盘、网络状态点鼠标就能完成大部分操作。sudo yum install -y virt-manager安装后如果是在本地桌面环境使用直接运行virt-manager如果是远程SSH环境需要用到X11转发ssh -X userhost virt-manager 如果不想折腾X11也可以用web管理方案——cockpit。麒麟V10的软件源里自带安装后通过浏览器访问在“虚拟机”栏目里就能管理KVM实例sudo yum install -y cockpit cockpit-machines sudo systemctl enable --now cockpit.socket浏览器打开https://宿主机IP:9090登录后进入“虚拟机”页面可以看到所有KVM虚拟机的运行状态、资源占用支持创建、启动、停止、删除、VNC连接等操作。对于团队协作场景比X11转发好用得多。4. 网络配置实操NAT和桥接模式的折腾记录4.1 默认NAT网络什么时候够用KVM装好后默认会创建一个虚拟网络名字叫default它用的是NAT模式。NAT模式下虚拟机通过宿主机的IP访问外网宿主机是虚拟机和外界的“路由器”。查看当前网络列表virsh net-list --all查看default网络的详细配置virsh net-dumpxml default默认配置大概是这样的虚拟网桥virbr0作为网关IP地址通常是192.168.122.1虚拟机自动获取192.168.122.0/24网段内的地址。宿主机上的libvirtd服务启动时会自动创建virbr0这个网桥就是NAT的承载者。NAT模式最大的优点就是零配置就能上网适合测试环境、开发环境。宿主机上如果是桌面版麒麟装完KVM后直接创建虚拟机选networkdefault虚拟机就能通过virbr0访问外网。但对于需要对外提供服务的场景比如你在虚拟机上跑了一个Web服务想让别的物理机访问NAT模式就比较别扭因为你得额外配置端口转发sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.122.10:80每次都配iptables管理和维护都很麻烦。所以生产环境更推荐桥接模式。4.2 桥接模式让虚拟机拥有独立IP桥接模式的核心思路是把宿主机的物理网卡和虚拟机的虚拟网卡接入同一个虚拟交换机虚拟机像一台独立的物理机一样可以直接从同网段的DHCP服务器获取IP或者手动配置和宿主机同一网段的静态IP。配置桥接主要有两步。第一步在宿主机上创建一块虚拟网桥br0。以银河麒麟V10为例用的网络管理工具可能是nmcli也可能是传统的ifcfg配置文件。使用nmcli的方式sudo nmcli connection add type bridge ifname br0 con-name br0 sudo nmcli connection modify br0 ipv4.method auto ipv4.addresses ipv4.gateway ipv4.dns sudo nmcli connection add type ethernet slave-type bridge con-name bridge-slave ifname enp3s0 master br0 sudo nmcli connection up bridge-slave sudo nmcli connection up br0注意ifname enp3s0要换成你自己的物理网卡名称可以用ip addr查看宿主机网卡的实际名字。第二步创建虚拟机时指定桥接网络。修改virt-install的参数sudo virt-install \ --name kylin-bridge-vm \ --memory 4096 \ --vcpus 4 \ --disk path/data/vm/kylin-bridge-vm.qcow2,size50,formatqcow2 \ --cdrom /data/iso/Kylin-Desktop-V10-SP1-Release-xxx.iso \ --os-variant kylin \ --network bridgebr0 \ --graphics vnc,listen0.0.0.0,port5902 \ --noautoconsole关键就一处--network bridgebr0。桥接模式如果出问题大概率出在宿主机网卡配置上。最常见的是nmcli创建的桥接把原来的连接顶掉了导致宿主机断网。建议在做桥接前先把原网络配置的配置文件备份好一旦出问题可以快速恢复。4.3 网络故障排查的三个操作虚拟机的网络问题按下面这个顺序排查基本能快速定位第一在宿主机上确认虚拟网络是否存在。运行ip addr show br0如果br0不存在说明创建失败如果存在但没有IP说明DHCP获取没成功手动配一个同网段IP试试。第二进入虚拟机执行ip addr。如果虚拟机的网卡没有IP说明DHCP没生效。检查宿主机上的dnsmasq服务因为libvirt的NAT网络会启用一个dnsmasq进程来提供DHCP服务。用ps aux | grep dnsmasq确认它是否在运行。第三从虚拟机ping宿主机IP和默认网关。如果宿主机能通但网关不通说明物理网卡的IP和桥接IP段不一致如果网关注册失败检查/etc/sysconfig/network-scripts/里有没有残留的旧网卡配置我之前遇到过eth0和enp3s0的配置冲突导致整个网桥功能异常。提示麒麟系统的网络服务有时会因NetworkManager和systemd-networkd同时管理而冲突。建议统一使用nmcli管理把systemd-networkd的配置清掉避免两个服务互相抢网卡造成IP漂移或全部掉线的诡异问题。5. 磁盘、快照和性能调优的关键细节5.1 调整虚拟机的CPU和内存资源虚拟机创建之后如果发现资源不够用不需要重建虚拟机直接修改可以动态调整的CPU和内存。CPU可以热插拔前提是创建时指定了--vcpus的maxvcpus参数。比如sudo virsh setvcpus kylin-vm01 --maximum 8 --config sudo virsh setvcpus kylin-vm01 --count 8 --live内存虽然也支持热插拔但有前提虚拟机的客户系统内核要支持内存热插拔并且创建虚拟机时指定了--memory maxmemory8192。如果一开始没设置最大值后面想扩展是需要关机修改配置的sudo virsh edit kylin-vm01找到memory标签修改单位然后执行virsh define /etc/libvirt/qemu/kylin-vm01.xml重新加载配置。CPU和内存的分配原则说多了都是眼泪。虚拟机的资源分配不是越多越好。如果一台物理机只有4核8线程你给三台虚拟机每台分配4个vCPU反而会互相争抢物理核资源导致整体性能下降。建议按物理核数的一半作为单台虚拟机的vCPU上限其余留一部分给宿主机的系统进程和QEMU进程本身。5.2 虚拟机快照与备份恢复的思路qcow2格式最大的红利就是快照功能。创建快照的语法很简单sudo virsh snapshot-create-as kylin-vm01 before-update --description update test恢复快照sudo virsh snapshot-revert kylin-vm01 before-update注意恢复快照前一定要把虚拟机停掉否则会出现磁盘数据不一致的问题。快照管理可以用virsh snapshot-list kylin-vm01查看。另一个备份思路是利用qemu-img命令生成的镜像文件。把qcow2镜像定期拷贝到备份服务器或者利用qemu-img convert把qcow2转成raw弄一个冷备份sudo qemu-img convert -O raw /data/vm/kylin-vm01.qcow2 /backup/kylin-vm01.raw快照虽然好用但也不能滥用。快照太多会拖慢虚拟机的I/O性能因为每个快照都是一个COW层读写时QEMU需要逐层查找。我自己习惯的做法是系统刚装好、确认没问题的时候打一个干净快照后续每次重大变更比如升级内核、装数据库之前再打一个恢复时回滚到最近的可用快照。日常运行中没必要频繁打快照。5.3 virt-v2v和镜像模板批量部署的捷径再分享一个批量部署的技巧。你手头如果已经有一台配置好的虚拟机比如已经装好麒麟系统、配好基础软件、做了安全加固完全可以把它的镜像作为一个“模板”通过COW克隆快速生成新虚拟机。克隆前先关机sudo virsh shutdown template-vm然后使用virt-clone克隆sudo virt-clone --original template-vm --name kylin-vm02 --file /data/vm/kylin-vm02.qcow2克隆完启动新虚拟机后第一件事就是修改hostname和IP地址否则两台虚拟机在网络上会冲突。这个操作虽然基础但我确实见过有人克隆完直接启动结果一堆机器抢同一个IP排查了半天才发现是hostname没改。另外一个冷门但实用的功能是virt-v2v它可以把运行在VMware、VirtualBox等其他虚拟化平台上的虚拟机直接迁移到KVM。这个工具在混合虚拟化环境中非常实用比如你之前用VMware做的模板想整体搬到麒麟平台上执行一条命令就能完成镜像转换和驱动适配sudo virt-v2v -i vmx -o local -os /data/vm vmware-vm-name6. 常见问题与排查技巧实录6.1 典型报错速查表把实操中常见的报错整理成表格方便查阅报错信息根本原因解决方案KVM is not availableCPU虚拟化未开或内核模块未加载检查BIOS的VT设置执行modprobe kvm_intel或modprobe kvm_amdfailed to connect to the hypervisorlibvirtd服务未启动或权限不足启动libvirtd并将用户加入libvirt组No boot device available创建虚拟机时没有正确挂载ISO或磁盘检查virt-install过程中的cdrom参数确认镜像路径正确Client cannot connect to VNC serverVNC端口未监听或防火墙拦截确认--graphics vnc参数已指定listen0.0.0.0放行对应端口network is unreachable虚拟机网关配置错误确认桥接或NAT网络配置ping网关Permission deniedon/dev/kvm用户不在kvm组usermod -aG kvm $(whoami)6.2 VNC黑屏和磁盘空间诡异的坑我在实际部署中遇到过两个特别容易让新人抓狂的问题。第一个是VNC连接后黑屏。很多人以为系统有问题重装了好几遍其实就是创建虚拟机时没指定--graphics vnc的listen0.0.0.0默认监听在127.0.0.1上远程连不上本地连接VNC客户端就黑屏。解决办法简单粗暴sudo virsh edit kylin-vm01找到graphics标签改成graphics typevnc port5901 autoportno listen0.0.0.0改完重启虚拟机即可。第二个坑是磁盘占满但virt-manager里显示空间还有剩余。这种情况常见于qcow2镜像设置了比较大的size上限比如50G但宿主机的实际存储空间已经所剩无几。qcow2是动态增长的size参数只是上限不代表实际占用。查看实际占用用sudo qemu-img info /data/vm/kylin-vm01.qcow2看到disk size就是实际占用的宿主机存储空间。如果宿主机磁盘不够考虑清理宿主机上的旧文件或者扩容。6.3 Windows虚拟机装virtio驱动的特殊处理如果你需要在麒麟KVM上装Windows系统有一个绕不开的坎virtio驱动。KVM默认的设备模型是virtio虚拟化设备Windows系统不自带这些驱动如果不装创建虚拟机时没有磁盘或者网卡能够被识别装系统时就抓瞎。解决办法是先挂载一个virtio驱动的ISO镜像作为光驱。virtio-win这个项目专门解决这个问题麒麟系统的软件源里一般有sudo yum install -y virtio-win装好后驱动镜像通常位于/usr/share/ virtio-win/目录下。创建Windows虚拟机时把virtio-win的ISO和Windows安装ISO都挂载上去sudo virt-install \ --name win10-vm \ --memory 8192 \ --vcpus 4 \ --disk path/data/vm/win10.qcow2,size80,formatqcow2 \ --cdrom /data/iso/Win10_22H2.iso \ --disk path/usr/share/virtio-win/virtio-win.iso,devicecdrom \ --network networkdefault \ --graphics vnc,listen0.0.0.0,port5903 \ --noautoconsoleWindows安装过程中在“选择安装位置”界面如果看不到磁盘点“加载驱动程序”浏览到virtio-win的驱动目录选择对应的amd64或x86版本加载后磁盘就出来了。如果网卡也没识别同样在网络适配器目录里加载驱动。这一步没处理好Windows虚拟机就是装不上所以我在实操中一直强调提前把virtio-win准备好别等装完了再补救。7. 安全加固这是最容易被跳过的部分7.1 网络安全组和防火墙配置KVM装好、虚拟机跑起来很多人就认为大功告成了。但你得先过一遍安全清单尤其在生产环境。首先是防火墙。宿主机上如果开着firewalld默认策略会拦截很多端口。检查sudo firewall-cmd --list-all放行VNC端口如果你需要远程桌面登录虚拟机和SSH端口sudo firewall-cmd --permanent --add-port5900-5910/tcp sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --reload如果你管理的是一个虚拟化服务器集群还需要放行libvirt的相关端口。用firewall-cmd --add-servicelibvirt可以快速放行。还有一层容易被忽略虚拟机里的iptables或者ufw规则。虚拟机自身也要做安全组限制尤其是在NAT网络里默认对所有出口开放如果你在虚拟机里跑了数据库服务只监听在本地或者内网IP不要暴露到宿主机外部。7.2 AppArmor/SELinux的合规建议麒麟系统默认会启用安全模块银河麒麟V10默认是SELinux还是AppArmor取决于具体版本。以SELinux为例默认的 enforcing 模式下libvirt和QEMU可能会受到限制导致部分存储或网络操作异常。如果遇到SELinux阻止虚拟机启动可以先查看审计日志sudo ausearch -m avc -ts recent如果是开发测试环境简单粗暴但有效的办法是把SELinux调到permissive模式sudo setenforce 0但生产环境不建议关SELinux。更推荐的是有针对性的放行。例如如果虚拟机磁盘目录建在非标准位置比如/data/vm需要手动调整虚拟文件上下文sudo semanage fcontext -a -t virt_image_t /data/vm(/.*)? sudo restorecon -Rv /data/vm这里有个概念要记住SELinux上下文标签和普通的Unix权限是两码事。普通权限搞定了SELinux标签没设置好虚空机照样起不来。因为虚拟机创建的实操中最容易出问题的就是SELinux限制下libvirt无法创建/data/vm下的镜像文件。你可以在/var/log/audit/audit.log里看到大量的AVC denied记录。如果不想一个个加策略一个折中的办法是把虚拟磁盘目录放在默认的/var/lib/libvirt/images/下这是SELinux策略已经预先放行的路径能避免很多麻烦。7.3 用户权限与服务最小化KVM的管理通道默认走libvirt而libvirt的权限模型决定了root和libvirt组的人可以操作虚拟机。所以对用户组的管控要从紧。建议只有少数管理员加入libvirt组普通用户不该有管理虚拟机的权限。另外虚拟机的root密码要定期更换。如果用VNC远程连接一定要设置强密码因为VNC协议默认不加密在跨网段传输时容易被截获。生产环境建议配合SSH隧道ssh -L 5901:localhost:5901 userhost然后本地VNC客户端连接localhost:5901。这样VNC流量全部经过SSH加密安全性提升明显。最后宿主机上没必要跑的服务就停掉。KVM宿主机只需要保证必要的系统服务和libvirtd运行就行。我见过有人把虚拟机网络配置搞不定最后发现是宿主机上同时开着一堆容器服务把iptables规则搞得乱七八糟干扰了KVM的NAT网络。8. 最后的几个实操心得聊到这儿麒麟系统装KVM的完整流程算是过了一遍。从硬件检查、核心组件安装到虚拟机创建、网络配置、性能调优和安全管理基本上覆盖了日常使用会遇到的绝大多数场景。我个人的体会是麒麟系统跟CentOS系的操作习惯非常接近如果你之前有Linux管理经验上手KVM几乎没有额外的学习成本。难点从来不在安装命令本身而在那些“环境坑”上BIOS里忘开的虚拟化、离线源的依赖、SELinux的拦截、火墙的默认策略。这些东西不踩一遍光看文档永远记不住。最后送上一个实用小技巧每次在麒麟系统上装完KVM我习惯执行一次virt-host-validate再执行一次qemu-system-x86_64 --version确认整个工具链版本匹配、环境检查通过。之后再去创建虚拟机基本上就不会遇到“装好了却用不了”的怪问题。另外建议把创建虚拟机的virt-install参数写成一个shell脚本存到/usr/local/bin/下面下次再部署虚拟机改个名字就能直接跑。