KVM虚拟化

    技术2024-06-25  76

    一. 云计算

    (一). 虚拟化

    基于内核的虚拟技术.通过模拟硬件,并在上面跑操作系统. #linux虚拟化软件: #qemu 软件纯模拟全虚拟化软件,特别慢!AIX,兼容性好! #xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5 xen kvm #KVM(linux) 全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核 centos6 kvm #性能较好,兼容较好 #vmware workstations: 图形界面 #virtual box: 图形界面 Oracle

    (二). KVM安装

    KVM全称: **Kernel-based Virtual Machine **大多数云服务器都是KVM做的虚拟化.可以通过lscpu可看到.内存压缩技术,可以起更多的云主机.所以用KVM.云主机都不要swap. 云主机一旦用swap会非常卡 云主机如果在装机的时候拔电源,会找不到系统镜像文件.从而失败.只有删除再来一次. 参数说明–virt-type kvm虚拟化的类型(qemu)–os-type=linux系统类型–os-variant rhel7系统版本–name centos7虚拟机的名字–memory 1024虚拟机的内存–vcpus 1虚拟cpu的核数–disk /opt/centos2.raw,format=raw,size=10硬盘文件所在的位置及信息.cetnos2为磁盘名字.–cdrom /opt/CentOS-7-x86_64-DVD-1708.iso系统镜像文件–network network=default使用默认NAT的网络–graphics vnc,listen=0.0.0.0不带显示器,所有要借助VNC作为服务端.–noautoconsole可有可无. #服务器至少4G内存,且CPU要有KVM模块 lsmod|grep kvm kvm_intel 183621 0 kvm 586948 1 kvm_intel irqbypass 13503 1 kvm #安装软件 yum install libvirt virt-install qemu-kvm -y systemctl start libvirtd.service;systemctl enable libvirtd.service #在windows上安装VNC-Viewer.VNC-Viewer是一个远程的桌面管理软件支持VNC协议.类似向日葵.因为linux图形界面比较差,装VNC就是借助它来装系统. #先把.iso镜像文件放在/opt下.然后构建虚拟机. virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole #成功后,会启一个5900端口.然后通过VNC输入服务器的IP+5900就可以看到现象,虚拟出来一个云主机.然后过程就是装系统的过程.过程会比较慢.

    (三). KVM的常用命令

    生成环境中一定要备份虚拟机的配置文件. virsh list --all #显示虚拟机的列表,--all会显示状态. virsh start [虚拟机名字] #启动虚拟机.启动之后就可以通过VNC连接. virsh shutdown [name] #重启,虚拟机里面必须有系统. virsh destroy [name] #直接给这台云主机拔电源. virsh reboot [name] #重启,虚拟机里面必须有系统. virsh dumpxml centos7 >centos7-off.xml #导出这台虚拟机的配置文件.磁盘文件在构建虚拟机命令的时候所在的路径.虚拟机的磁盘文件和配置文件,只要有这两个就可以将虚拟机进行宿主机之间的迁移. virsh undefine [name] #如果要强删,先destroy,然后在undefine.undefine实质上是删除的虚拟机的配置文件.yum安装的虚拟机配置文件在/etc/libvirt/qemu/下. virsh define [虚拟机配置文件] #给虚拟机导入配置. virsh edit littlefeet.xml #用edit修改配置文件.有语法检查功能.不要直接vim virsh domrename web01 db01 #改虚拟机的名字,前提是要关机.低版本不能使用. virsh suspend [name] #挂起 virsh resume [name] #恢复 virsh vncdisplay [name] #显示虚拟机对应的VNC的端口号.查出来的端口号,可以只用这个号端口号登录VNC. virsh autostart [name] #将虚拟机标记为开机自启.其实原理就在/etc/libvirt/qemu/autostart/目录下创建了个软连接. virsh autostart --disable [name] #将虚拟机取消标记为开机自启. virsh console [name] #进入虚拟机的控制台界面.类似于进入VM的界面.ctrl+]才能退出来.进去控制台会卡主,除了退出以外没法进行其他操作.要进行其他操作就需要配置命令行.改内核文件. #改内核文件.让控制台可以操作.KVM虚拟机只要起来是可以通过远程连接工具连接的.先备份内核文件. /boot/grub2/grub.cfg grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #改完之后rebbot虚拟机生效.然后就和登录VM一样了.进入console界面.(要敲和回车哦)

    (四). KVM的磁盘格式转换和快照管理

    KVM支持联众磁盘格式 raw #也叫裸格式,有些高清的数码相机拍出来的就是raw格式. 占用空间比较大,不支持快照功能,不方便传输 ,性能较好,比如总50G,那就占用50G空间. qcow2 #qemu cow(copy on write). 占用空间小,支持快照,性能比raw差一点,方便传输 ,弹性使用,比如总50G 占用2G.更适合传输. #用qcow2构建虚拟机 virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

    1. 磁盘格式常用命令

    qemu-img info littlefeet.raw #查看littlefeet.raw的磁盘类型,如果是qcow2的还会看到快照等信息. qemu-img create littlefeet.raw 10G #创建一块磁盘,并给10G的空间.默认是创建的是raw格式的硬盘.qcow2类型的硬盘要加 -f (format) qemu-img create -f qcow2 littlefeet.qcow2 10G #创建qcow2的硬盘.并给10G空间. qemu-img resize jing.qcow2 +10G #增加10G的存储 或者直接后面接 20G,表示总共存储为20G qemu-img convert -f raw -O qcow2 /opt/littlefeet.raw /opt/littlefeet.qcow2 #convert转换格式,将rwq转换为qcow2格式. #转换格式需要先关机,然后virsh edit centos7.将下面的两个改为qcow2 <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> #就这两行,改为qcow2,以前是raw. <source file='/data/centos2.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>

    2. 快照管理

    #创建快照,只有qcow2的可以创建快照. virsh snapshot-create-as web1 --name nginx #snapshot-create-as 创建名字为nginx的快照. virsh snapshot-list web1 #查看快照列表 virsh snapshot-revert web1 --snapshotname 1516574134 #还原快照 virsh snapshot-delete web1 --snapshotname 1516636570 #删除快照 qemu-img snapshot -d nginx web1.qcow2 #不彻底删除快照.删除快照名为nginx的,镜像的磁盘名为web1.qcow2.但是这样不是彻底删除,生成禁用.

    (五). 克隆

    1. 自动克隆

    #自动克隆 virt-clone --auto-clone -o web01 -n web02 #用web01自动克隆web02,克隆的文件会放在同级目录下. #手动克隆,拷贝的时候里面不能带快照. cp centos2-clone.qcow2 web02.qcow2 #有快照CP之后起不来,在CP前删掉快照. virsh dumpxml web01 >web02.xml vim web02.xml #修改虚拟机的名字,删除虚拟机uuid,删除mac地址,删除mac后,系统会生成新的,修改磁盘路径 virsh define web02.xml #将修改后的虚拟机配置文件导入. virsh start web02

    2. 链接克隆

    官网没有命令支持自动链接克隆.只有写脚本. ####生成磁盘文件 #create -f 创建一个qcow2硬盘类型的文件,-b 基于web01.qcow2为模板,创建的链接硬盘格式名为web03.qcow2 qemu-img create -f qcow2 -b web01.qcow2 web03.qcow2 ####生成配置文件 virsh dumpxml web01 >web03.xml vim web03.xml #修改虚拟机的名字 <name>web03</name> #删除虚拟机uuid <uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid> #删除mac地址 <mac address='52:54:00:4e:5b:89'/> #修改磁盘路径 <source file='/opt/web03.qcow2'/> #导入文件,并启动. virsh define web03.xml virsh start web03 自动链接脚本 cat link_clone.sh #!/bin/bash old_vm=$1 new_vm=$2 #1.生成虚拟机磁盘文件 old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'` disk_tmp=`dirname $old_disk` qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2 #2.生成虚拟机的配置文件 virsh dumpxml $old_vm >/tmp/${new_vm}.xml #修改虚拟机的名字 sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml #删除虚拟机uuid sed -i '/<uuid>/d' /tmp/${new_vm}.xml #删除mac地址 sed -i '/<mac address/d' /tmp/${new_vm}.xml #修改磁盘路径 sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml #3.导入虚拟机并进行启动测试 virsh define /tmp/${new_vm}.xml virsh start ${new_vm}

    (六). KVM虚拟机的桥接网络

    #查看网卡状态 brctl show #创建桥接网卡命令 virsh iface-bridge eth0 br0 #取消桥接网卡命令 virsh iface-unbridge br0 #构建虚拟机使用桥接模式.DHCP要打开.或者网卡改为静态IP.etho0中的改BOOTPROTO="static" virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole #构建虚拟机使用NAT模式 virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

    1. 将现有虚拟机改为桥接模式

    #改虚拟机的配置文件.然后在启动,记得改静态IP <interface type='bridge'> <source bridge='br0'/>
    Processed: 0.030, SQL: 10