加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

KVM 虚拟化

发布时间:2020-12-12 13:33:33 所属栏目:百科 来源:网络整理
导读:虚拟化 KVM (kernel-based virtual machine) xen kvm vmware esx openVZ Oracle VM VirtualBox vsphere rhel5 xen rhel6 kvm 半(准)虚拟化: 客户机器操作系统内核必须是修改过的,才能使用半虚拟化。 硬件虚拟化技术。 典型代表: Xen 全虚拟化: 必须cpu
虚拟化 KVM (kernel-based virtual machine) xen kvm vmware esx openVZ Oracle VM VirtualBox vsphere rhel5 xen rhel6 kvm 半(准)虚拟化: 客户机器操作系统内核必须是修改过的,才能使用半虚拟化。 硬件虚拟化技术。 典型代表: Xen 全虚拟化: 必须cpu支持硬件虚拟化。 客户机器不需要修改内核,原则上可以安装任何的操作系统。 Intel # cat /proc/cpuinfo | grep vmx AMD : svm 典型代表: kvm,VMware ESXi ===================================================================================== 红帽官档下载路径 docs.redhat.com https://access.redhat.com/documentation/en-US/ KVM官方安装文档(english) Red_Hat_Enterprise_Linux-6-Virtualization_Host_Configuration_and_Guest_Installation_Guide-en-US.pdf 在宿主机安装kvm 1,配置好yum # vim /etc/yum.repos.d/rhel-source.repo [rhel-source] name=rhel6.5 baseurl= ftp://10.1.1.9/Server enabled=1 gpgcheck=0 # yum groupinstall "Virtualization" # yum groupinstall "Virtualization Client" # yum groupinstall "Virtualization Platform" # yum groupinstall "Virtualization Tools" 【安装部分软件包:yum install kvm libvirt qemu-kvm virt-manager virt-viewer? # service libvirtd restart # chkconfig libvirtd on # cat /proc/cpuinfo |grep -E "vmx|svm" --查看CPU是否支持intel或AMD的虚拟技术 # modprobe kvm # modprobe kvm_intel --如果不支持vmx指令,则加载不支持 # lsmod |grep kvm kvm_intel 52570 0 kvm 314739 1 kvm_intel 开始安装kvm 1,图形安装 # virt-manager ----和xen一样的命令,打开虚拟机管理器 安装名:kvm1 ----名字随意 安装方式: ----我这里选择第一个,使用iso直接安装 安装路径:/share/soft/rhel-server-6.5-x86_64-dvd.iso ----写上iso的路径 OS type: linux red hat enterprise linux 6 内存大小: 1024M ----内存如果较小,安装时无法使用图形安装方式,只能使用文本安装方式 cpu个数:2 ----不能大于宿主机器的cpu核数 硬盘大小: 20 G ----我这里定义20G大小,不马上分配;它的默认路径会在/var/lib/libvirt/images/kvm1.img;也可以自定义路径 第五步:网络现在只能选择default --这是一个nat网络(私有网络),桥接网络不能选,需要后面单独配置后才能选择 2,命令行交互式安装 # virt-install --prompt What is the name of your virtual machine? kvm2 How much RAM should be allocated (in megabytes)? 800 What would you like to use as the disk (file path)? /var/lib/libvirt/images/kvm2.img How large would you like the disk (/var/lib/libvirt/images/kvm2.img) to be (in gigabytes)? 20 What is the install CD-ROM/ISO or URL? /share/soft/rhel-server-6.5-x86_64-dvd.iso 3,直接使用命令行来安装 # virt-install --hvm -n "kvm3" -r 800 --vcpus 2 --os-type="linux" --os-variant="rhel6" --disk path=/var/lib/libvirt/images/kvm3.img,size=20 -l /share/soft/rhel-server-6.5-x86_64-dvd.iso --network bridge=virbr0 hvm是指全虚拟化 p是指半虚拟化 4,使用kc.cfg自动安装 # virt-install --vnc --noautoconsole --arch=x86_64 --hvm -n "kvm3" -r 800 --vcpus 2 --os-type="linux" --os-variant="rhel6" --disk path=/var/lib/libvirt/images/kvm3.img,size=20 --location= ftp://10.1.1.9/ --extra-args="ks=nfs:10.1.1.9:/ks/ks.cfg" --network bridge=virbr0 --extra-args="ks= http://10.1.1.9/ks.cfg" --network bridge=virbr0 5,直接使用以前学过的kickstart或cobbler网络安装服务器自动安装 ========================================================================== 主要的管理命令: 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 1 kvm1 running - kvm2 shut off 启动,关闭,重启相关基本操作 # virsh start kvm1 --启动一个虚拟机 # virsh shutdown kvm1 --正常在一分钟后关闭一个虚拟机(如果都没有登录进去,则会马上关闭) # virsh reboot kvm1 --正常重启一个虚拟机,一样会在关闭时要一分钟 # virsh destroy kvm1 --强制关闭一个虚拟机,类似断电,可以瞬间关闭虚拟机 保存,暂停相关基本操作 # virsh save kvm1 /etc/libvirt/qemu/kvm1.save --把kvm1关闭,并把当前状态保存为一个文件 # virsh restore /etc/libvirt/qemu/kvm1.save --通过保存的文件,恢复当时save时的状态 # virsh suspend kvm1 --暂停kvm1的状态 # virsh resume kvm1 --由暂停切换为继续的状态 连接虚拟机(domain)相关操作 方法一: # virt-manger 打开管理器,双击你要连接的虚拟机 方法二; # virt-viewer kvm1 --连接一个已经启动的虚拟机,并使用图形查看 方法三: # ssh x.x.x.x --非图形方式就可以连,但需要虚拟机配置好ip 方法四: 非图形方式也可以使用console连(此方法不需要虚拟机配置ip都可以连),但需要配置授权 # virsh console kvm1 --字符连接一个虚拟机,但是现在连接不了;因为需要一个串口的授权才可以; 授权做法: 1,在kvm1虚拟机里操作 vim /boot/grub/grub.conf kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=f900cbb3-c0cf-440c-94f6-0c208f1da6e0 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0,115200 --在内核参数这里加上console=ttyS0,115200,表示这个串口以115200的波特率可以连接;注意ttyS0里的S一定要大写; 如果小写会造成这个虚拟机启动不了,解决方法: a,挽救模式进去修改 b,用虚拟化的一个交互编辑工具 # yum install libguestfs-tools # virt-edit -a /var/lib/libvirt/images/kvm1.img /boot/grub/grub.conf去修改; 同理这个工具也可以用于完全没有图形的宿主机上无法通过virt-viewer或者ssh(因为找不到虚拟机的IP)或者virsh console来连接虚拟机的情况; 可以先用virt-edit来修改加上上面的console=ttyS0,115200;再用virsh console去连接 --如果上面的virt-edit打不开,可以使用# libguestfs-test-tool来调试错误(我这里以前讲库的时候做了一个小实验,把/lib64/libselinux.so.1改名成了/lib64/libselinux.so.1.bak,然后用软链接链接回来。但在这里就会造成错误。解决方法:mv /lib64/libselinux.so.1.bak /lib64/libselinux.so.1) 2,重启kvm1 # virsh reboot kvm1 ----直接destroy再start,可能无法生效,建议这样重启 3,再在宿主机上 # virsh console kvm1 ----然后回车就可以直接连你本地的这个虚拟机了;虚拟机没有IP一样可以连 exit只是退出登录的用户而已 要完全退出这个console连接,需要使用的是ctrl+ ] (也就是右中框号的这个键) ====================================================================== 虚拟机相关的文件: 以kvm1为例: 配置文件在:/etc/libvirt/qemu/kvm1.xml 磁盘文件默认在:/var/lib/libvirt/images/kvm1.img 命令删除一个虚拟机的做法(假设为kvm3) virsh destroy kvm3 virsh undefine kvm3 rm -rf /var/lib/libvirt/images/kvm3.img ===================================================================== kvm 的克隆 --注意:克隆都需要源虚拟机器是关闭或暂停状态 例一:图形克隆 例二:文本克隆 1,拷贝配置文件和磁盘文件 # cp /etc/libvirt/qemu/kvm1.xml /etc/libvirt/qemu/kvm3.xml # cp /var/lib/libvirt/images/kvm1.img /var/lib/libvirt/images/kvm3.img 2,修改拷贝的配置文件 # vim /etc/libvirt/qemu/kvm3.xml <domain type=‘kvm‘> <name>kvm3</name> ----名字改成kvm3 <uuid>811d69e8-b1d8-cfbf-684a-69f2e0af6b88</uuid> ----uuid随便改几个数字 <memory unit=‘KiB‘>1048576</memory> <currentMemory unit=‘KiB‘>1048576</currentMemory> <vcpu placement=‘static‘>2</vcpu> <os> <type arch=‘x86_64‘ machine=‘rhel6.5.0‘>hvm</type> <boot dev=‘hd‘/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset=‘utc‘/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type=‘file‘ device=‘disk‘> <driver name=‘qemu‘ type=‘raw‘ cache=‘none‘/> <source file=‘/var/lib/libvirt/images/kvm3.img‘/> ----磁盘路径改成kvm3.img的路径 <target dev=‘vda‘ bus=‘virtio‘/> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘/> </disk> <disk type=‘block‘ device=‘cdrom‘> <driver name=‘qemu‘ type=‘raw‘/> <target dev=‘hdc‘ bus=‘ide‘/> <readonly/> <address type=‘drive‘ controller=‘0‘ bus=‘1‘ target=‘0‘ unit=‘0‘/> <controller type=‘usb‘ index=‘0‘> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x01‘ function=‘0x2‘/> </controller> <controller type=‘ide‘ index=‘0‘> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x01‘ function=‘0x1‘/> <interface type=‘bridge‘> <mac address=‘52:54:00:5c:3a:2d‘/> ----网卡地址随便改下,只改后三位 <source bridge=‘br0‘/> <model type=‘virtio‘/> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/> </interface> <serial type=‘pty‘> <target port=‘0‘/> </serial> <console type=‘pty‘> <target type=‘serial‘ port=‘0‘/> </console> <input type=‘tablet‘ bus=‘usb‘/> <input type=‘mouse‘ bus=‘ps2‘/> <graphics type=‘vnc‘ port=‘-1‘ autoport=‘yes‘/> <sound model=‘ich6‘> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x04‘ function=‘0x0‘/> </sound> <video> <model type=‘cirrus‘ vram=‘9216‘ heads=‘1‘/> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x02‘ function=‘0x0‘/> </video> <memballoon model=‘virtio‘> <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/> </memballoon> </devices> </domain> 3,保存后,使用virsh list --all查看不到的,需要define一下 # virsh define /etc/libvirt/qemu/kvm3.xml # virsh list --all ----再查就可以查看到kvm3 - kvm1 shut off - kvm1-clone shut off - kvm2 shut off - kvm3 shut off # 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 <network> <name>default2</name> --修改名字为default2 <uuid>243166ddb-e2fd-9983-1997-5e8efdc06c42</uuid> --uuid随便修改一下 <bridge name=‘virbr2‘ stp=‘on‘ delay=‘0‘ /> --virbr1改成virbr2 <mac address=‘52:54:00:AF:27:25‘/> --MAC地址改一下,只改后面三位 <ip address=‘192.168.101.1‘ netmask=‘255.255.255.0‘> --IP改为101 <dhcp> <range start=‘192.168.101.128‘ end=‘192.168.101.254‘ /> --dhcp地址范围也改成101的 </dhcp> </ip> </network> 2,# virsh net-define /etc/libvirt/qemu/networks/default2.xml --定义一下,然后你可以使用virsh net-list --all去查看,状态为inactive,autostart的状态为no 3,# virsh net-start default2 --启动 # 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 4,# 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 例六:修改一个网络 <name>default2</name> <uuid>243166ddb-e2fd-9982-1996-5e8efdc06c42</uuid> <forward dev=‘eth0‘ mode=‘route‘> <interface dev=‘eth0‘/> </forward> <bridge name=‘virbr2‘ stp=‘on‘ delay=‘0‘ /> <mac address=‘52:54:00:AF:166:45‘/> <ip address=‘192.168.102.1‘ netmask=‘255.255.255.0‘> ----这里把以前的192.168.101.0的IP范围都改成了192.168.102.0 <range start=‘192.168.102.128‘ end=‘192.168.102.254‘ /> </network> 保存后,使用ifconfig virbr1 查看,还是192.168.102.1,没有改变 需要做下面三步: Network default2 defined from /etc/libvirt/qemu/networks/default3.xml 3,# virsh net-destroy default2 ----停一下这个网络 上面的第一步和第二步可以统一成一步来做: # virsh net-edit default2 --使用这个命令打开,修改,然后就直接net-destroy和net-start,不需要去net-define 例七:图形删除一个网络 # virt-manager打开图形--->edit --->connections details --->virtual network --->选择你要删除的网络,然后左下角,先停,再删除就可以了 用命令删除一个网络 # virsh net-destroy default2 ----停掉要删除的网络,用virsh net-list --all命令去查就变成了inactive状态 # virsh net-undefine default2 ----这下就删除了这个网络定义了,并且物理上的配置文件也没了 例8:增加一个桥接网络: 把物理网卡eth0桥接到br0(这个名字是自己定义的) 在rhel6里有一个networkmanger这个服务,可以图形管理所有的网络链接。但这个服务不支持kvm的桥接,所以要关掉这个服务,或者在eth0的配置文件里加上NM_CONTROLLED="no",让eth0不受networkmanger服务的控制 1,在宿主机上创建一个桥接网络 # /etc/init.d/NetworkManager stop # chkconfig NetworkManager off # vim /etc/sysconfig/network-scripts/ifcfg-br0 --此文件不存在,br0这个名字是自定义的 DEVICE=br0 --名字对应好 TYPE=Bridge --这里的Birdge,B要大写,后面的irdge要小写 BOOTPROTO=static IPADDR=172.16.x.x NETMASK=255.255.0.0 GATEWAY=172.16.254.254 ONBOOT=yes 2,把一个物理网卡加到一个桥接网络里,我这里是把eth0加到br0 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BRIDGE=br0 ----这句就是把eth0桥接到br0 NM_CONTROLLED=no ----这句就是让eth0不受networkmanager的控制 ONBOOT=YES # brctl show ----重启网络前的情况 3,重启网络 /etc/init.d/network restart # brctl show ----重启网络后查看的情况 在宿主机上ifconfig 查看就会有br0这个网卡,有IP;而eth0网卡也有,但没有IP;这是正常的 例九:图形修改一个虚拟机网卡链接 # virt-manager打开图形,双击你要修改的虚拟--->点击左上的一个!号按钮show hardware detail--->找个网卡,修改成你想要改的网络(但这里报需要重启虚拟机才能生效) # virsh shutdown kvm1 # virsh start kvm1 --重启后,就改成了你想要的虚拟网络了 --问题:可能有些人在图形选择时看不到br0,但是brctl show能查看到,那么你在选择时选择specify shared device name,然后再下面手动在bridge name后写br0 例十:文本修改一个虚拟机的网卡连接 1,# vim /etc/libvirt/qemu/kvm1.xml --直接打开修改 2,# virsh define /etc/libvirt/qemu/kvm1.xml ----vim修改后要define一下 # virsh edit kvm1 ----或者使用edit命令打开修改,就可以替代前面的1,2步 <interface type=‘bridge‘> ----接口类型把network改成bridge <mac address=‘52:54:00:5c:aa:2c‘/> <source bridge=‘br0‘/> ----把原来默认的network改成bridge,把原来的网络default改成br0 <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03 ‘ function=‘0x0‘/> # virsh start kvm1 ----重启后,虚拟机就是桥接网络了 ----KVM现在修改一个网卡的类型(比如NAT改桥接),需要重启才能生效;但如果你是加网卡或者删网卡,是不需要重启生效的(rhel6.5环境下测试为,图形加或删网卡不用重启,但命令加或删网卡要重启) ====================================================================== 例十一:添加网卡或硬盘 # virt-manage--->双击打开kvm1--->点左上角的!号show hardware details --->点左下角add devices 直接添加,并写上相关参数就可以(注意参数,device type都选择virtio,不需要重启虚拟机,可以直接生效,并且磁盘名叫vda,vdb,vdc...;如果你第一次加硬盘选择IDE disk,需要重启,并且磁盘名叫sda,sdb,sdc...) 注意:当虚拟机(非宿主机)为文本模式的情况,在宿主机上用上面的图形模式加的设备,在虚拟机的配置文件里没有加上,需要手动再加上,才可以 用图形方式在线删除磁盘后,还要去物理上把它的磁盘xxx.img文件给rm掉 例十二:直接用命令来添加一个硬盘设备 # dd if=/dev/zero of=/var/lib/libvirt/images/kvm2-2.img bs=1M count=1 seek=4000000 ----seek是指跳过多少个BS块,这里就是产生一个4T大小的文件(实际大小只1M) # virsh edit kvm2 **<devices>与</devices>之间加上下面的一段,也可以把其它磁盘的配置定义拷贝一段进行修改 <source file=‘/var/lib/libvirt/images/kvm2-2.img‘/> ----名字改成kvm1-2.img <target dev=‘vdb‘ bus=‘virtio‘/> ----磁盘名,改成vdb;bus总线如果是ide,那么磁盘名会叫sda(就算dev写hda,在虚拟机里fdisk也是看到sda);virtio这种总线会以vda,vdb...这种形式来命名 <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x10‘ function=‘0x0‘/> ----slot也改一下,我这里是把0x09改成0x10 </disk> 3,重启虚拟机 例十三:因为有些人的机器的/var目录空间不够,想把磁盘文件改到其它目录(如/data/kvm/目录) # virsh destroy kvm1 ----先停掉kvm1 # mv /var/lib/libvirt/images/kvm1.img /data/kvm/ # virsh edit kvm1 ...... <source file=‘/data/kvm/kvm1.img‘/> ----把这个路径改成mv后的新路径 ...... # virsh start kvm1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读