Linux-KVM虚拟化
kvm安装
1、在宿主机上准备好yum(只需要本地镜像yum就可以)
2、查看CPU是否支持inter或AMD的虚拟技术
# cat /proc/cpuinfo |grep -E "vmx|svm"
3、安装kvm
# yum install qemu-kvm libvirt virt-install libvirt-python virt-manager virt-install libvirt-client
virt-viewer
4、确认是否有装在kvm模块,没有装载可以使用modprobe kvm来装载
# lsmod |grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
5、启动并设置为开机自启动
# systemctl start libvirtd
# systemctl status libvirtd
# systemctl enable libvirtd
启动报错排查
/var/log/messages日志报错信息:virModuleLoadFile:53
kvm安装虚拟机
图形安装
--和xen一样的命令,打开虚拟机管理器
# virt-manager
第一步、
安装方式: --我这里选择第一个,使用iso直接安装
第二步、
安装路径:/data/CentOS-7-x86_64-DVD-1611.iso --写上iso的路径
第三步、
内存大小: 800M -- 内存如果较小,安装时无法使用图形安装方式,只能使用文本安装方式
cpu个数:2 --不能大于宿主机器的cpu核数
第四步、
硬盘大小:20G --我这里定义20G大小;它的默认路径会在/var/lib/libvirt/images/kvm1.qcow2
第五步、
name:kvm1 --自定义一个虚拟机名称
网络现在只能选择default --这是一个nat网络(私有网络),桥接网络不能选,需要后面单独配置后才能选择
命令行安装
# virt-install --hvm --name "kvm1" --memory 800 --vcpus 2
--disk=/var/lib/libvirt/images/kvm1.qcow2,size=20 -l /share/CentOS-7-x86_64-DVD-1611.iso --network
bridge=virbr0
--hvm 指使用全虚拟化
kvm主要的管理命令
virsh help
virsh help domain
virsh help network
virsh help monitor --因为参数很多,可以用象domain,network,monitor这种关键字,只查看与关键字有关的参数帮助
......
# virsh list
Id Name State
----------------------------------------------------
1 kvm1 running
# virsh list --all
Id Name State
----------------------------------------------------
1 kvm1 running
- kvm2 shut off
启动、关闭、重启相关
# virsh start kvm1 --启动一个虚拟机
# virsh shutdown kvm1 --正常关闭一个虚拟机(把服务都停掉,再关电源)
# virsh reboot kvm1 --正常重启一个虚拟机,先shutdown再start
# virsh destroy kvm1 --强制关闭一个虚拟机,类似断电,可以瞬间关闭虚拟机
# virsh reset kvm1 --相当于是先destroy,再start
保存、暂停相关
# virsh save kvm1 /etc/libvirt/qemu/kvm1.save --把kvm1关闭,并把当前状态保存为一个文件
# virsh restore /etc/libvirt/qemu/kvm1.save --通过保存的文件,恢复当时save时的状态
# virsh suspend kvm1 --暂停kvm1的状态
# virsh resume kvm1 --由暂停切换为继续的状态
连接虚拟机相关
方法一:
# virt-manager 打开管理器,双击你要连接的虚拟机
方法二:
# virt-viewer kvm1 --连接一个已经启动的虚拟机,并使用图形查看
方法三:
# ssh x.x.x.x --非图形方式就可以连,但需要虚拟机配置好ip
方法四:
非图形方式也可以使用console连(此方法不需要虚拟机配置ip都可以连),但需要配置授权
# virsh console kvm1 --字符连接一个虚拟机,但是现在连接不了;因为需要一个串口的授权才可以;
授权做法:
1,在kvm1虚拟机里操作(注意不是在宿主机上操作)
# grubby --update-kernel=ALL --args="console=ttyS0"
# reboot
2,在宿主机virsh console kvm1连接使用
3,退出的方式
exit只是退出登录的用户而已
要完全退出这个console连接,需要使用的是ctrl+ ] (也就是右中框号的这个键)
虚拟机相关的文件
以kvm1为例:
配置文件在:
/etc/libvirt/qemu/kvm1.xml
磁盘文件默认在:
/var/lib/libvirt/images/kvm1.qcow2
打开虚拟机配置文件的做法:
方法一:
# vim /etc/libvirt/qemu/kvm1.xml
方法二:
# virsh edit kvm1 --此方法默认是调用vi,所以没有颜色,你可以做个软链接,让访问vi实际链接到vim就可以了
命令删除一个虚拟机的做法(假设kvm3)
# virsh destroy kvm3
# virsh undefine kvm3
# rm -rf /var/lib/libvirt/images/kvm3.img
kvm的克隆
--注意:克隆都需要源虚拟机器是关闭或者暂停状态
图形克隆
先关闭kvm1或 virsh suspend kvm1暂停kvm1(使用virsh resume kvm1恢复)
virt-manager--》右键点kvm1--》选择clone-->修改克隆后的名字或其它参数--》点clone
文本克隆
1、拷贝配置文件和磁盘文件
# cp /etc/libvirt/qemu/kvm1.xml /etc/libvirt/qemu/kvm3.xml
# cp /var/lib/libvirt/images/kvm1.qcow2 /var/lib/libvirt/images/kvm3.qcow2
2、修改拷贝的配置文件
# vim /etc/libvirt/qemu/kvm3.xml
kvm3 --名字改成kvm3
811d69e8-b1d8-cfbf-684a-69f2e0af6b88 --uuid随便改几个数字
1048576
1048576
2
hvm
destroy
restart
restart
/usr/libexec/qemu-kvm
--磁盘路径改成kvm3.qcow2的路径
--网卡地址随便改下,只改后三位
3、保存后,使用virsh list --all查看不到的,需要define一下
# virsh define /etc/libvirt/qemu/kvm3.xml
# virsh list --all --再查就可以查看到kvm3
Id Name State
----------------------------------------------------
- kvm1 shut off
- kvm1-clone shut off
- kvm2 shut off
- kvm3 shut off
4、再启动
# virsh start kvm3 --可以启动克隆的机器了
命令克隆
# virt-clone -o kvm1 -n kvm4 -f /var/lib/libvirt/images/kvm4.img
Allocating kvm4.img 7% [- ] 34 MB/s | 957 MB 05:29 ETA
--把kvm1克隆成kvm4,指定磁盘路径为/var/lib/libvirt/images/kvm4.img;如果kvm1有多个硬盘,那么克隆时也要对应的克隆成多个路径
kvm网络管理
只查看与网络有关的帮助参数
# virsh help network
# virsh net-list --all
Name State Autostart
-----------------------------------------
default active yes --这是一个NAT网络,私有网络
# virsh net-info default
Name default
UUID 704eb1b7-3feb-4a38-8642-9c3fe2f023bb
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr0
default网段的配置文件的路径为:
/etc/libvirt/qemu/networks/default.xml
# virsh net-destroy default --停掉default网络,由virsh net-list --all去查看,状态变为inactive
# virsh net-start default --启动default网络,状态变为active
图形增加私有网络
virt-manager打开图形--》edit --》connections details --》 virtual
networks--》点左下角的+号增加一个私有网络(选择名字,网络分配地址范围,dhcp的分配范围)
注意:这里最后一步有三种网络:
1、isolated 相当vmware的hostonly,没有NAT,也没有网关(完全和vmware的hostonly类型一样)
2、NAT 有网关,有NAT,可以通过宿主上外网(和vmware的NAT类型一样)
3、routed 也是相当于hostonly,在isolated的基础上就是加了一个网关(仍然是和vmware的hostonly一致,但多了一个网关)
把上面的步骤做完后,直接在宿主机用ifconfig或virsh net-list --all,就可以看到新加的网络了
手动增加私有网络
1、拷贝一个网络配置文件并编辑
# cp /etc/libvirt/qemu/networks/default1.xml /etc/libvirt/qemu/networks/default2.xml
# vim /etc/libvirt/qemu/networks/default2.xml
default2 --修改名字为default2
243166ddb-e2fd-9983-1997-5e8efdc06c42 --uuid随便修改一下
--virbr1改成virbr2
--MAC地址改一下,只改后面三位
--IP改为101
--dhcp地址范围也改成101的
2、定义一下,然后就可以使用virsh net-list --all去查看,状态为inactive,autostart的状态为no
# virsh net-define /etc/libvirt/qemu/networks/default2.xml
3、启动
# virsh net-start default2
4、查看
# ifconfig virbr2 |head -2 --查看就有了
virbr2 Link encap:Ethernet HWaddr 52:54:00:AF:27:25
inet addr:192.168.101.1 Bcast:192.168.101.255 Mask:255.255.255.0
# ls /etc/libvirt/qemu/networks/autostart/
default1.xml default.xml
5、设置为开机自动启动
# virsh net-autostart default2
# ls /etc/libvirt/qemu/networks/autostart/ --这里就会多了default2.xml了,其实都是网络配置文件的软链接
default1.xml default2.xml default.xml
刚加的网络配置文件都在下面的目录
# ls /etc/libvirt/qemu/networks
autostart default1.xml default2.xml default.xml
修改一个网络
1、编辑配置文件
# vim /etc/libvirt/qemu/networks/default2.xml
default2
243166ddb-e2fd-9982-1996-5e8efdc06c42
--我这里把以前的192.168.101.0的IP范围都改成了192.168.102.0
保存后,使用ifconfig virbr1 查看,还是192.168.102.1, 没有改变
需要做下面三步:
2、定义一个网络,使你的修改被他知道
# virsh net-define /etc/libvirt/qemu/networks/default2.xml --定义一个网络,使你的修改被他知道
Network default2 defined from /etc/libvirt/qemu/networks/default3.xml
3、停一下这个网络
# virsh net-destroy default2 --停一下这个网络
Network default2 destroyed
4、再启动这个网络
# virsh net-start default2 --再启这个网络
Network default2 started
ifconfig virbr2查看,成功修改成192.168.102.1
上面的第一步和第二步可以统一成一步来做:
# virsh net-edit default2 --使用这个命令打开,修改,然后就直接net-destroy和net-start,不需要去net-define
删除一个网络
图形删除一个网络
virt-manager打开图形--》edit --》connections details --》 virtual networks--》选择你要删除的网络,然后左下角,先停,再删除就可以了
命令删除一个网络
# virsh net-destroy default2 --停掉要删除的网络,用virsh net-list --all命令去查就变成了inactive状态
# virsh net-undefine default2 --这下就删除了这个网络定义了,并且物理上的配置文件也没了
增加一个桥接网络
把物理网卡enp2s0桥接到br0(这个名字是自己定义的)
1、在宿主机上创建一个桥接网络
# systemctl stop NetworkManager
# systemctl status NetworkManager
# systemctl disable NetworkManager
# vim /etc/sysconfig/network-scripts/ifcfg-br0 --此文件不存在,br0这个名字是自定义的
DEVICE=br0 --名字对应好
TYPE=Bridge --这里的Birdge,B要大写,后面的irdge要小写
BOOTPROTO=static
IPADDR=172.16.13.X
NETMASK=255.255.255.0
GATEWAY=172.16.13.254
DNS1=114.114.114.114
ONBOOT=yes
2、把一个物理网卡加到一个桥接网络里,这里是把enp2s0加到br0
# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0 --原物理网卡enp2s0里的配置只留下这三句就可以了
DEVICE="enp2s0"
ONBOOT="yes"
BRIDGE=br0
3、重启网络
/etc/init.d/network restart 或者 systemctl restart network
在宿主机上ifconfig 查看就会有br0这个网卡,有IP;而原enp2s0网卡没有IP;这是正常的
修改虚拟机的网卡连接
图形修改
virt-manager打开图形,双击你要修改的虚拟机--》点击左上的一个!号(centos7里看到的是一个像灯泡一样的符号)按钮show virtual hardware
detail-->>找个网卡,修改成你想要改的网络
命令修改
# virsh edit kvm3
改成下面的样子
--network改成了bridge
--network改成了bridge;default改成了br0
# virsh shutdown kvm1
# virsh start kvm1 --重启后,虚拟机就是桥接网络
kvm磁盘管理
图形添加硬盘设备
virt-manager--》 双击打开kvm4--》点左上角的灯泡符号show virtual hardware details --》点左下角add devices
直接添加,并写上相关参数就可以(注意参数,device type都选择virtio,不需要重启虚拟机,可以直接生效,并且磁盘名叫vda,vdb,vdc...;如果你第一次加硬盘选择IDE
disk,需要重启,并且磁盘名叫sda,sdb,sdc...)
注意:用图形方式在线删除磁盘后,还要去物理上把它的磁盘xxx.qcow2文件给rm掉
命令添加硬盘设备
1、使用dd命令创建一个磁盘文件
# dd if=/dev/zero of=/var/lib/libvirt/images/kvm4-2.img bs=1M count=1 seek=4000000
--seek是指跳过多少个BS块,这里就是产生一个4T大小的文件(实际大小只1M)
# qemu-img info /var/lib/libvirt/images/kvm4-2.img
image: /var/lib/libvirt/images/kvm4-2.img
file format: raw --格式为raw(这是老版本的默认格式,新版本是qcow2格式)
virtual size: 3.8T (4194305048576 bytes)
disk size: 1.0M
# cd /var/lib/libvirt/images/
# qemu-img convert -f raw -O qcow2 kvm4-2.img kvm4-2.qcow2
--把kvm4-2.img文件转换成一个新文件kvm4-2.qcow2(格式也转换成qcow2)
# rm kvm4-2.img -rf --原来的这个文件不用了就可以删除掉了
# qemu-img info /var/lib/libvirt/images/kvm4-2.qcow2
image: /var/lib/libvirt/images/kvm4-2.qcow2
file format: qcow2 --转化后的新文件格式就为qcow2格式了
virtual size: 3.8T (4194305048576 bytes)
disk size: 256K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
2、编辑虚拟机的配置文件
# virsh edit kvm4
与之间加上下面的一段,也可以把其它磁盘的配置定义拷贝一段进行修改
--格式为qcow2
--路径名称改成kvm4-2.qcow2
--新加的硬盘,就叫vdb
--slot也改一下,我这里是把0x07改成0x09(只要这个编号没有被重复占用就可以)
3、重启虚拟机后(有可能reboot还不行,需要force off再启动),登录使用fdisk就能查看到这个4T大小的硬盘了
迁移磁盘目录
比如宿主机的/var目录空间不够,想把磁盘文件改到气他目录(如/data/kvm/目录)
# virsh destroy kvm1 --先停掉kvm1
# mv /var/lib/libvirt/images/kvm1.qcow2 /data/kvm/
# virsh edit kvm1
......
--把这个路径改成mv后的新路径
......
# virsh start kvm1