准备工作:在处理器虚拟化引擎勾选:虚拟化Intel VT-x/EPT或AMD-V/RVI(V),再准备一个CentOS7的系统,上传一个7的镜像放入该系统里。vnc客户端下载。

grep -E '(vmx|svm)' /proc/cpuinfo         //查看是否有输出

下面开始安装虚拟机:

yum list | grep kvm
yum install -y qemu-kvm qemu-kvm-tools libvirt virt-install            //安装软件
yum install -y net-tools            //ifconfig命令有了后好干活
systemctl start libvirtd            //管理kvm的工具
systemctl enable libvirtd          //开机自启动

第一步://创建虚拟磁盘

qemu-img create -f qcow2 /opt/kvm.qcow2 9G     //创建一个名称为kvm1.qcow2的qcow2格式的9G虚拟磁盘
qemu-img info kvm.qcow2    //查看该虚拟磁盘的信息

第二步://安装虚拟机

virt-install --virt-type kvm --name kvmdeName --ram 1024 --vcpus 2 \
--cdrom=/opt/CentOS-7-x86_64-DVD-1511_7.2.iso --disk path=/opt/kvm.qcow2 \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole  //创建一个2核cpu和1G内存的虚拟机

如果有报错:ERROR Host does not support any virtualization options

现象:virt-install创建新虚拟机时,提示Host does not support any virtualization options。
环境:CentOS7,KVM,CPU:Intel(R) Xeon(R) CPU E5-2609,qemu-kvm、qemu-kvm-tools、
virt-manager、libvirt virt-install四大件已正常yum安装,selinux已关,iptables已经全放通。
处理步骤:
1、常规步骤,先进bios看cpu是否开启了虚拟化,确认已开启
2、grep -E '(vmx|svm)' /proc/cpuinfo,
 查看是否有回显信息,发现是有的,也说明步骤1没看眼花。
3、dmesg |grep kvm,实际作用和步骤1、步骤2一致,
  再次确认主机是否支持虚拟化,不支持的话会显示kvm:disabled by bios,此处我这里没有任何回显。
4、此时百度和Google上常规的解决方法完结,问题并没有解决...只有自己想办法了,此处略去瞎忙步骤一万步。
5、systemctl status libvirtd 忽然发现原来libvirt日志里有报错:internal error: Failed to probe QEMU binary with QMP:
  /usr/libexec/qemu-kvm: relocation error: /lib64/libspice-server.so.1这个,难道问题出在程序包上?
6、百度得知spice server是作为一个库提供给qemu使用的,编译出来就是libspice(新知识点get)。
  然而这玩意咋调试排错是完全不懂的,那么先看看qemu-kvm有没有问题吧。
7、ll /usr/libexec/qemu-kvm 先看qemu-kvm是否有执行权限,发现是有的,那么正常。
8、/usr/libexec/qemu-kvm --version 手动运行下试试,发现报错:version libssl.so.10 not defined in file libssl.so.10
9、依然通过百度获得解决方法解决办法:yum -y install openssl如果已经安装,就更新一下yum -y update openssl
10、我这里直接yum upgrade openssl,神奇的事情发生了,/usr/libexec/qemu-kvm --version 正常显示版本virt-install 成功通过故障解决!

第三步:使用vnc工具连接上去进行KVM系统的安装

光标放入Install Centos7按tab键按空格键输入以下代码:
net.ifnames=0 biosdevname=0     //为了使网卡名称为eth0 

只需要分一个根分区即可

虚拟机基本命令:

virsh list --all      //查看都有哪些kvm虚拟机
virsh start kvmdeName                         //开启虚拟机
virsh shutdown kvmdeName               //关闭虚拟机
virsh autostart kvmdeName			   //设置虚拟机(kvmdeName)跟随系统自启
virsh autostart --disable kvmdeName    //关闭虚拟机跟随系统自启    

virsh dumpxml kvmdeName > backup.xml   //备份虚拟机
virsh defined virsh kvmdeName    //还原虚拟机
virsh undefine kvmdeName                 //彻底删除虚拟机
virsh suspend kvmdeName    //挂起虚拟机
virsh resume kvmdeName     //继续虚拟机
virsh snapshot-create-as kvmdeName kuaizhao0624     //创建一个快照
virsh snapshot-list    kvmdeName  kuaizhao0624     //查看快照
virsh snapshot-revert  kvmdeName  kuaizhao0624     //恢复到快照
virsh snapshot-delete  kvmdeName  kuaizhao0801      //删除快照

第四步:创建一个桥接网卡并绑定到eth0上

看看有没有ifconfig命令,没有执行:yum install net-tools -y
iptables -t nat -vnL           //现在是通过iptables的nat转发让虚拟机上网的
brctl show                    //查看网卡
brctl addbr br0              //创建一个桥接网卡
brctl addif br0 eth0        //将桥接网卡绑定到eth0也可以是eno....  br0关联eno 网络会断开
brctl show                 //这时br0和eth0已经关联起来了
ip addr del dev eth0 192.168.22.22/24         //eth0/eno的ip删除掉
ifconfig br0 192.168.22.22/24 up             //br0网卡启动
ping www.baidu.com  发现ping不通
ip ro li                               //查看能不能出去,发现没网关route -n也可以查看
route add default gw 192.168.22.2     //添加网关

virsh autostart kvmdeName            //随宿主机的启动而启动

以上命令重启后就没了,需要进行修改/etc/rc.local

chmod +x /etc/rc.d/rc.local

vi /etc/rc.local
brctl addbr br0                          
brctl addif br0 eno16777736                       //eno是自己网卡名字
ip addr del dev eno16777736 192.168.22.22/24     //eno是自己网卡名字
ifconfig br0 192.168.22.22/24 up
route add default gw 192.168.22.2

第五步:编辑kvm虚拟机

virsh edit 虚拟机名称
搜索:interface
修改为:
<interface type=’bridge’>
<source bridge=’br0’/>

第六步:重启虚拟机

virsh shutdown kvmdeName
virsh start kvmdeName

第七步:用vnc登录虚拟机做网卡的修改

在这里插入图片描述

快速制造多台虚拟机

1、为原虚拟机所在的lv做一个快照。
lvcreate -L 2G -sn kvmSS /dev/vg/kvm (一般快照大小是宿主的15-20%)
2、复制/etc/libvirt/qemu/虚拟机名.xml并改名为/etc/libvirt/qemu/虚拟机名1.xml
cp /etc/libvirt/qemu/虚拟机名.xml /etc/libvirt/qemu/虚拟机名1.xml
3、修改 /etc/libvirt/qemu/虚拟机名1.xml
vim /etc/libvirt/qemu/虚拟机1.xml (修改一下几项,随便改只要与原来不一样就可以了。)比如:
<name>1kvmSS</name>
<uuid>395ae05e-c118-e460-4de4-7f58e08f8aa1</uuid>
<source dev=‘虚拟机快照名’>
 <macaddress='52:54:00:a7:11:cb'/>
4、virsh define 虚拟机名1.xml (定义虚拟机)
5、virsh start 虚拟机名1 (新的虚拟机就可以使用啦。呵呵)

如果遇到虚拟机网卡启动失败提示device eth0 does not seem
可以ifconfig -a 查看网卡的名字是否不是eth0.
如果不是,ip link set ethX name eth0

最后补充:如果需要修改cpu和内存的信息,需修改xml文件

修改xml文件
vim /etc/libvirt/qemu/kvmdeName.xml  //也可以用下面的命令来修改,我们用命令修改:
virsh edit kvmdeName
第6行修改为:
<vcpu placement=’auto’ current=”1”>2 </vcpu>      //最大是2个cpu,当前1个cpu,修改完需要重启查看
virsh setvcpus 虚拟机名 2 --live    //修改为2个cpu
virsh qemu-monitor-command kvmdeName --hmp --cmd balloon 1024   //增加和缩小内存
virsh qemu-monitor-command kvmdeName --hmp --cmd info balloon   //查看内存

qemu-img convert -f raw -O qcow2 原始.raw  将要转换的.qcow2    //转换raw数据格式为qcow2

KVM优化:

cpu缓存:
kvm是一个qemu-kvm的进程,它是靠cpu调度的,可能会调度到任何一个cpu上,cpu有三级缓存
一级缓存:静态内存
二级缓存:动态高速内存
下一刻有可能从cpu1上到cpu2上,这时缓存就失效了,缓存命中率降低,性能会受到影响,所以我们需要做qemu-kvm进程和cpu绑定来提高性能。
taskset --help
cpu优化:
ps -ef |grep kvm
taskset -cp 0 6573            //-c 0指定第0个cpu,-p 6573:表示qemu-kvm的进程号
内存优化:直接在BIOS设置中打开EPT即可
内存EPT技术,Linux内存是虚拟内存,包含物理内存和交换分区,kvm有虚拟内存和物理内存。

内存合并:减少了内存碎片
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never            //默认是开启的

IO优化:
cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐