KVM虚拟化

KVM虚拟化

KVM全称:Kernel-based Virtual machine

KVM内存压缩技术: 相同的内容只占用1份内存,所以KVM虚拟机可以超迈,尤其是在做虚拟机克隆的时候。

环境要求:Centos7、4G 内存、开启CPU虚拟化

管理工具安装:yum install libvirt virt-install qemu-kvm -y

libvirt作用:虚拟机的管理软件

libvirt可管理:kvm、xen、qumu、lxc...

virt virt-install virt-clone 作用:虚拟机的安装工具和克隆工具

qumu-kvm qumu-img(qcow2,raw)作用:管理虚拟机的虚拟磁盘

systemctl start libvirtd.service
systemctl enable libvirtd.service
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name c7 --memory 1024 --vcpus 1 --disk /opt/centos3.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

1.常用命令:

virsh list 
virsh list --all 查看虚拟机
virsh reboot        重启虚拟机
virsh shutdown  关机
virsh destroy       拔电关机
virsh start         开机
virsh undefine  删除虚拟机
virsh define        导入虚拟机配置文件
virsh dumpxml       导出虚拟机的备份文件;举例:virsh dumpxml centos7 >c7.xml
virsh edit          修改虚拟机配置文件,此命令带语法检查功能
virsh domrename 重命名虚拟机
virsh suspend   挂起虚拟机
virsh resume    挂起后,重新恢复虚拟机
virsh vncdisplay 查看虚拟机短端口号
virsh autostart  设置虚拟机为开机自启,前提是服务器设置开机自启systemctl status libvirtd.service 
virsh console    使用console 方式连接虚拟机
#开机自启,其实就是给虚拟机的配置文件设置软连接,当删除软连接后开机自启将失效,需要重新定义开机自启,存放软连接文件位置:/etc/libvirt/qemu/autostart
grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #登录虚拟机,输入此修改内核参数的命令,重启虚拟机,使用virsh console 虚拟机名称   连接到虚拟机。

2.虚拟机磁盘格式:

raw:裸格式,占用空间比较大,不支持快照功能,不方便传输,性能较好,总50G,占用50G

qcow2:cow(copy on write )占用空间小,支持快照,性能比raw差一点,方便传输,总50G 占用2G

#qcow2格式创建虚拟机:
#区别于raw格式创建虚拟机:--disk /opt/wb02.qcow2,format=qcow2,这两个字段为qcow2,其他参数与raw格式创建虚拟机一样。
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name wb02 --memory 1024 --vcpus 1 --disk /opt/wb02.qcow2,format=qcow2,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

3.磁盘工具常用命令:

#查看虚拟硬盘信息:qemu-img info 
qemu-img info cengos7.raw
#创建虚拟硬盘:qemu-img create 
创建qcow2格式磁盘(创建在当前路径下): qemu-img create -f qcow2 centos7.qcow2 1G
创建raw格式磁盘(创建在当前路径下): qemu-img create c7.raw 1G
#对虚拟硬盘扩容:qume-img resize 
#qcow2格式的虚拟磁盘只能扩容,不能缩容,raw格式的虚拟磁盘支持缩容,但是一般不建议缩容。
将centos7.qcow2磁盘文件扩容4G:qemu-img resize centos7.qcow2 +4G
将centos7.qcow2磁盘文件扩容到6G:qemu-img resize centos7.qcow2 6G
扩容raw格式的的磁盘文件: qemu-img resize c7.raw 5G
缩容rwa格式的虚拟磁盘(原有5G):qemu-img resize c7.raw 1G
#转换磁盘格式的命令 qemu-img convert
将raw格式的虚拟磁盘转换为qcow2格式:qemu-img convert -f raw -O qcow2 c7.raw c7.qcow2
#虚拟磁盘格式转换完成后,需要停机修改配置文件中的硬盘格式才能启用转换后的虚拟磁盘。
修改下面2行:

      

4.快照管理:

创建快照: virsh snapshot-create-as wb01 --name 基础优化_ok
查看快照:virsh snapshot-list wb01
还原快照:virsh snapshot-revert wb01 --snapshotname 基础优化_ok
删除快照:virsh snapshot-delete wb01 test_ces
#raw不支持做快照,qcow2支持做快照,并且快照保存在qcow2的磁盘文件中。

5.完整克隆:

自动克隆:virt-clone -o wb01 -n lb01 --auto-clone
手动克隆:
#克隆的虚拟机不要有快照,直接cp过去的虚拟机如果有快照的话,无法启动。
cp lb01.qcow2 lb01-clone.qcow2
virsh dumpxml lb01 >lb01-clone.xml
mv lb01-clone.xml /etc/libvirt/qemu
vim /etc/libvirt/qemu/lb01-clone.xml
        #修改虚拟机名字
    #删除虚拟机uuid
    #删除mac地址
    #修改磁盘路径
virsh define lb01-clone.xml
virsh start lb01-clone
  

6.链接克隆:

#生成虚拟机磁盘文件
qemu-img create -f qcow2 -b /opt/wb01.qcow2 /opt/wb02.qcow2

 cp /etc/libvirt/qemu/wb01.xml /etc/libvirt/qemu/wb02.xml
 vim /etc/libvirt/qemu/wb02.xml
        #修改虚拟机名字
    #删除虚拟机uuid
      #删除mac地址
    #修改磁盘路径
 virsh define wb02.xml
 virsh list --all
 virsh start wb02
 [root@node01 /etc/libvirt/qemu]# virsh dumpxml wb01 | grep "qcow2"
      
      
[root@node01 /etc/libvirt/qemu]# virsh dumpxml wb02 | grep "qcow2"
      
      
         #基于wb01磁盘进行克隆。
[root@node01 /etc/libvirt/qemu]#

7.自动链接克隆脚本

#!/bin/bash
#new_kvm=$2
#old_kvm=$1
read -p "请输入被克隆的虚拟机名称:" old_kvm
read -p "请输入新的虚拟机名称:" new_kvm
old_kvm_disk=`virsh dumpxml wb01 | sed -r -n "s#()#\2#p" |tr -d  "  "`
old_kvm_disk_path=`dirname $old_kvm_disk`
qemu-img create -f qcow2 -b $old_kvm_disk $old_kvm_disk_path/${new_kvm}.qcow2
virsh dumpxml $old_kvm>/tmp/${new_kvm}.xml
#修改kv名称
sed -ri "s#()(.*)()#\1${new_kvm}\3#g" /tmp/${new_kvm}.xml
#删除虚拟机uuid
sed -i '/uuid/d' /tmp/${new_kvm}.xml
#删除mac地址
sed -ri '/mac address/d' /tmp/${new_kvm}.xml
#修改磁盘路径
sed -ri "s#()#\1/opt/${new_kvm}.qcow2\3#g" /tmp/${new_kvm}.xml

virsh define  /tmp/${new_kvm}.xml
virsh start  ${new_kvm}

8.kvm桥接模式

默认kvm虚拟机不支持桥接模式

#创建桥接网卡的命令
virsh iface-bridge eth0 br0
修改虚拟机配置文件
 
      
#取消桥接网卡的命令
virsh iface-unbridge br0

9.虚拟机网络模式

9.1新建虚拟机使用桥接模式

默认NAT模式(network )

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name c7 --memory 1024 --vcpus 1 --disk /opt/centos3.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

桥接模式(bridge)

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name c7 --memory 1024 --vcpus 1 --disk /opt/centos3.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

9.2 将已有的虚拟机配置改为桥接模式

a.创建桥接网路
b.virsh edit lb01 
修改下面两行
 
      
 c.重启kvm虚拟机
 d.重启kvm虚拟机后还获取不到就重启网卡或者用dhclint 命令重新获取dhcp地址

10.热添加硬盘和扩容

10.1热添加一块硬盘

a.创建一块硬盘
        qemu-img create -f qcow2 /opt/wb01_add.qcow2 2G
b.将硬盘添加给kvm;默认是以raw格式添加磁盘,所以在扩容qcow2的磁盘时,需要指明磁盘类型
        virsh attach-disk wb01 /opt/wb01_add.qcow2 vdb
        #完整添加磁盘命令
        virsh attach-disk wb01 /opt/wb01_add.qcow2 vdb --subdriver qcow2
#扩容硬盘命令后面需要跟3个参数 :virsh attach-disk 虚拟机名称  磁盘格式  目标盘符 
root@node01 /opt]# virsh attach-disk 
错误:命令 'attach-disk' 需要  选项  #虚拟机名称
错误:命令 'attach-disk' 需要  选项  #磁盘文件
错误:命令 'attach-disk' 需要  选项  #目标盘符
c.剥离硬盘
        virsh detach-disk wb01 vdb

10.2硬盘扩容

扩容操作需要规范化操作!!!

a.卸载分区(虚拟机中的中操作)
    [[email protected] /add_disk]# umount /dev/vdb
b.剥离硬盘(宿主机中操作)
    [root@node01 /opt]# virsh detach-disk  wb01 vdb
c.扩容硬盘容量(宿主机中操作)
    [root@node01 /opt]# qemu-img resize wb01_add.qcow2 4G
d.添加磁盘(宿主机中操作)
    [root@node01 /opt]# virsh attach-disk wb01 /opt/wb01_add.qcow2  vdb --subdriver qcow2
e.挂载分区(虚拟机中操作)
    [[email protected] ~]# mount /dev/vdb /add_disk/
f.更新硬盘信息(虚拟机中操作)
    [[email protected] ~]# xfs_growfs /dev/vdb
g.查看硬盘更新情况
    [[email protected] ~]# df -h

10.3 以上添加硬盘\删除硬盘都是临时生效,想要永久生效需要添加 --config 参数,如果需要临时生效+永久生效,需要执行两条命令。

virsh attach-disk wb01 /opt/wb01_add.qcow2  vdb --subdriver qcow2
virsh attach-disk wb01 /opt/wb01_add.qcow2  vdb --subdriver qcow2 --config 

11.热添加网卡

#给lb01添加一块桥接模式的网卡
virsh attach-interface lb01 bridge br0 
 #给lb01添加一块NAT模式的网卡
virsh attach-interface lb01 network default
# --model virtio 指定网卡类型,添加后的网卡名称为eth0\eth1
virsh attach-interface lb01 network default --model virtio
#删除网卡需要指定网络类型
virsh detach-interface lb01 netwokr

11.1当一台虚拟机有多个相同类型的网卡时,需要指明mac地址 才能删除对应的网卡

[root@kvm01 ~]# virsh detach-interface lb01 netwokr --mac 52:54:00:51:b8:91
错误:No interface found whose type is netwokr
错误:分离接口失败

[root@kvm01 ~]# virsh detach-interface lb01 network
错误:域有 2 个接口。请使用 --mac 指定要分离的接口。
错误:分离接口失败

[root@kvm01 ~]# virsh detach-interface lb01 network --mac 52:54:00:51:b8:91
成功分离接口

[root@kvm01 ~]#

11.2想要修改网卡的原有类型,只能删除网卡后再重新添加网卡,在添加网卡时声明所需要的网络类型。

11.3 以上添加\删除网卡,都是临时生效,需要永久生效需要 加--config 参数,如果需要临时生效+永久生效,需要执行两条命令(如果添加网卡的时候使用的--config参数,那么删除的时候也需要添加--config 才能永久删除,同理立即删除+永久删除需要执行两条删除命令)。

#临时+永久添加网卡
virsh attach-interface lb01 network default --model virtio
virsh attach-interface lb01 network default --model virtio --config 
#临时+永久删除网卡
virsh detach-interface lb01 network --mac 52:54:00:51:b8:91
virsh detach-interface lb01 network --mac 52:54:00:51:b8:91 --config 


## 12.热添加内存

#### 12.1扩容\缩容内存

```shell
virsh setmem lb01 --size 256M #临时修改虚拟机的内存大小
virsh setmem lb01 --size 1024M --config #永久修改虚拟机内存
#虚拟机的内存调整,不得大于最大值(下面第一行),如果必须要调整,需要修改配置文件中的最大值(下面第一行,建议使用命令修改。)
 1048576
  1048576
virsh setmaxmem lb01 --size 4096M #临时修改虚拟机的最大值(必须使用destroy 关机才能修改,永久修改)

12.2 内存扩容\缩容注意事项

    a.内存缩容最小不得小于128M(最小也要满足内容运行的所需内存)

    b.想要修改内存最大值,需要使用destroy 命令关机后,才能修改内存最大值。(配置文件)

    c.内存最大值不可以超过宿主机内存,否则开机时会出现如下报错。
[root@kvm01 ~]# virsh  start lb01
错误:internal error: process exited while connecting to monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory

d. 虚拟机扩容内存时不得超过虚拟机剩余内存,否则虚拟机会卡死。

13.热添加CPU

virsh setvcpus lb01 --maximum 4 --config #设置虚拟机CPU最大核心数(需要关机重启,才能生效,永久修改)
virsh setvcpus lb01 2 #设置cpu的核心数,(临时添加)
virsh setvcpu #设置CPU属性,是否支持虚拟化,几乎用不到。

14.kvm虚拟机冷迁移

冷迁移:关机后迁移,其实就是scp 虚拟机的配置文件和磁盘文件。

首先找一台与原来环境一样的机器。

然后将KVM虚拟机的配置文件+磁盘文件copy到与原机器相同的路径下(根据kvm 的配置文件中的磁盘和配置的路径迁移)

执行virsh virsh define @@@.xml

最后执行 virsh start @@@

迁移时,如果迁移的是链接克隆的虚拟机,一定要把基础磁盘一并迁移走才可以起来,否则就会出现如下报错

error: Failed to start domain web02
error: Cannot access backing file '/opt/web01.qcow2' of storage file '/opt/web02.qcow2' (as uid:107, gid:107): No such file or directory

15.kvm虚拟机热迁移

热迁移:虚拟机在运行状态完成宿主机之间的迁移

思考:虚拟机的迁移主要是迁移那个文件? 如何保证磁盘文件能够快速迁移?

KVM虚拟机的迁移其实就是迁移配置文件和磁盘文件,虚拟机的配置文件比较小,可以做到秒迁移,磁盘文件一般来说比较大,如果做到秒迁移呢? 这里就要用到网络文件存储,也就是NFS(network file system ),将磁盘文件存储到NFS目录下,就解决了磁盘文件的迁移问题,当然也可以采用Glusterfs集群文件系统来实现。

#临时热迁移
[root@kvm01 ]# virsh migrate --live --verbose lb01 qemu+ssh://10.0.0.6/system --unsafe
#永久热迁移
[root@kvm01 ]#  virsh migrate --live --verbose wb01 qemu+ssh://10.0.0.6/system --unsafe --persistent --undefinesource

你可能感兴趣的:(KVM虚拟化)