1、KVM的介绍和使用(命令行版)
1、KVM的介绍和使用(命令行版)
刘付kin 发表于1年前
1、KVM的介绍和使用(命令行版)
  • 发表于 1年前
  • 阅读 110
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

#介绍

  • Hypervisor:是一种“虚拟机监视器(VMM)”,它介于裸机硬件和操作系统之间的组件,通过它, 可以在物理服务器上安装多个操作系统。

  • VNC:是一个在UNIX和Linux平台上的远程控制开源程序,有:vncserver,vncviewer,vncpasswd, 和 vncconnect。

  • KVM:Linux 2.6X版本中加入的内核模块,分为两个:kvm.ko 和 kvm_intel.ko / kvm_amd.ko

  • QEMU-KVM:KVM是一个可以虚拟CPU和内存的模块,但是不能够虚拟I/O等,所以它借鉴了QEMU,形成了一个QEMU-KVM的工具。利用它,用户可以很方便的操作KVM内核,虚拟出虚拟机、虚拟磁盘等。

  • libvirt:它是基于qemu-kvm、xen、qemu等之上的服务工具,它将这些底层技术的操作进行了封装成了一个配置文件里面,这样可以大大的提高了复用。安装了它之后,会提供一个virsh的命令,很强大:创建、删除、启动、修改、克隆等都可以。

#一:使用最底层的命令(qemu-kvm 和 qemu-img)操作

  • 1、查看cup是否支持虚拟

      grep -E -o 'vmx|svm' --color /proc/cpuinfo
    

    注意:如果想在vmwareWorkstation的虚拟机中使用KVM,

    则需要在设置那里开启VT-X技术,如图:

输入图片说明

  • 2、查看Linux内核是否加载了kvm模块

      lsmod | grep kvm
    
  • 3、加载KVM模块

      modprobe kvm
      modprobe kvm_intel
    
  • 4、安装qemu-kvm,安装完成后会生成/usr/libexec/qemu-kvm,是用户空间操作kvm内核的接口

      yum install qemu-kvm
    
  • 5、通过网络上传ISO镜像文件

      通过CRT的Alt + p 打开ftp客户端上传即可
    
  • 6、生成一个8G的镜像文件,作为虚拟机的磁盘

      qemu-img create  -f  raw  /root/hadoop.img 8G      默认生成raw格式,给多少就一次性划分多少
      qemu-img create  -f  qcow2  /root/hadoop.img 8G           生成qcow2格式,用多少算多少
    
  • 7、使用qemu-kvm创建虚拟机(参数说明 -m 指定内存大小 -smp 指定cup数量 -boot启动顺序)

      /usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/CentOS.img -cdrom /iso/CentOS-6.6-x86_64-minimal.iso -vnc :1
    
      参数说明:
      	-m 指定客户机内存大小,默认单位MB
      	-smp 指定客户机cpu个数。SMP:(symmetric[sɪ'metrɪk] Multi-processing)对称多处理
      	-boot 指定客户机系统启动顺序,order=cd是指先光盘再硬盘。c:CD-ROM d:Hard Disk
      	-hda 指定客户机的IDE硬盘(即前面的创建的镜像文件)
      	-cdrom 指定客户机的光驱
    
  • 8、安装vnc或使用vnc工具连接虚拟机,给虚拟机安装系统

  • 9、关闭虚拟机并再次启动虚拟机,指定vnc端口为5901(不需要指定cdrom,因为已经将操作系统安装到磁盘中了)

      /usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/CentOS.img -vnc :1
    

#二:使用高级命令(virtsh)操作

上述采用最底层的qemu-kvm命令来对虚拟机进行创建和管理,比较困难。除此之外,还可以使用基于qemu-kvm的libvirt 和 virsh 进行操作,而virsh又是基于libvirt的,只要安装libvirt就会提供virsh命令。

他们的关系如下:

输入图片说明

##步骤:

  • 1、同样先判断机器是否支持虚拟化,然后加载内核模块。

  • 2、安装 qemu-kvm 、 libvirt

      yum install qemu-kvm libvirt
    
  • 3、启动libvritd守护进程

      service libvirtd start
    
  • 4、使用virsh有两种方式

    • 直接使用:virsh list --all

    • virsh 【回车】 进入交互界面

      virsh# list --all

  • 5、虚拟机要上网==>brige或者nat,brige需要创建一个网桥,并且把虚拟机的网卡和hypervisor的网卡都关联到这个网桥上。nat不需要创建,因为virsh默认提供了vritbr0

    • iface-bridge eth0 br0 ===>br0是随意定义的

      • iface-bridge命令底层是调用了brctl命令
  • 6、编写配置文件

    其实libvirt它是借助于qemu-kvm的功能,在她的基础之上在进行操作封装。同时,它把虚拟机的参数都记录在一个配置文件中,从而使得,配置文件可以重用。


	<domain type="kvm">
		<!--虚拟机名称-->
		<name>centos-adv</name>
		<!--最大内存,单位mb-->
		<memory unit="MiB">4096</memory>
		<!--可用内存,单位k-->
		<currentMemory unit="MiB">2048</currentMemory>
		<!--虚拟cpu个数-->
		<vcpu>2</vcpu> 

		<os>
			<type arch="x86_64">hvm</type>
			<!-- 硬盘启动 -->
			<boot dev="hd" />
			<!--光盘启动-->
			<boot dev="cdrom" />
		</os>

		<features>
			<acpi />
			<apic />
			<pae />
		</features>

		<clock offset="localtime" />
		<on_poweroff>destroy</on_poweroff>
		<on_reboot>restart</on_reboot>
		<on_crash>destroy</on_crash>

		<devices>
			<!--指定基于那个虚拟化平台,也可以指定为xen-->
			<emulator>/usr/libexec/qemu-kvm</emulator>

			<disk type="file" device="disk">
				<driver name="qemu" type="qcow2" />
				<!--目的镜像>路径,设置为本虚拟化I/O-->
				<source file="/cloud/centos.qcow2" /> 
				<target dev="hda" bus="ide" />
			</disk>

			<disk type="file" device="cdrom">
				<!--光盘镜像路径 -->
				<source file="/cloud/CentOS-6.6-x86_64-minimal.iso" />
				<target dev="hdb" bus="ide" />
			</disk>

			<!--配置第一个网卡,指定他的网络为:NAT(virbr0是libvirtd进程提供的NAT网桥)-->
			<interface type="bridge">
				<mac address='06:64:12:00:00:52'/>	
				<!--当前主机网桥的名称-->
				<source bridge="virbr0" />
				<model type='ide'/>
			</interface>

			<!--配置第二个网卡,指定他的网络为:bridge(br0是利用brctl命令创建的)-->
			<interface type="bridge">
				<!--mac地址不能一样-->
				<mac address='06:64:12:00:00:53'/>	
				<!--当前主机网桥的名称-->
				<source bridge="br0" />
				<model type='ide'/>
			</interface>

			<input type="mouse" bus="ps2" />
			<!--vnc端口号自动分配,可以通过virsh vncdisplay来查询-->
			<graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" keymap="en-us" passwd='abcd'/>
		</devices>
	</domain>

#注意问题:

  • 1、由于虚拟机的网卡都绑定到了网桥br0上了,所以hypervisor的公网网卡eth0也需要绑定到这个br0上,否则它上面的虚拟机无法联网。

    brctl addif br0 eth0 && brctl stp br0 on && ifconfig eth0 0.0.0.0 && ifconfig br0 192.168.33.250 netmask 255.255.255.0 && route add default gw 192.168.33.1

  • 2、添加网卡时,可以指定添加到那个网桥:bridge? 还是libvirt提供的 virbr0 (NAT)形式?

  • 3、添加了网卡设备之后,在虚拟机中需要使用ifconfig eth0 up 来启动它

  • 4、查看ifconfig,eth0没有ip地址

    • 1、网卡没有开机启动
    • 2、网卡mac地址冲突
  • 5、解决:

    • 手动指定IP,但是下次启动就没有了。
      • 指定eth0的ip和默认网关

      • ifconfig eth0 192.168.122.100/24

      • route add default gw 192.168.122.1

      • 指定eth1的ip和默认网关

      • ifconfig eth1 192.168.33.100/24

      • route add default gw 192.168.33.1


#上述的配置中,使用的是IDE总线,读写速度很低,可以将磁盘设置成半虚拟化virtio

<disk type="file" device="disk">
	<driver name="qemu" type="qcow2" />
	<source file="/cloud/centos.img" /> 
	<target dev='vda' bus='virtio'/>
</disk>

不仅磁盘可以设置为本虚拟话,网卡也可以设置为半虚拟化virtio
<!--虚拟机网络连接方式-->
<interface type="bridge">
	<mac address='06:64:12:00:00:52'/>	
	<!--当前主机网桥的名称-->
	<source bridge="virbr0" />
	<model type='virtio'/>
</interface>

##virsh命令操作

  • 1、定义虚拟机(指定配置文件,配置文件会被拷贝到libvirt的一个指定文件夹中)

      virsh define /cloud/centos-base.xml
    
  • 2、virsh 进行管理虚拟机

      virsh list --all  # 显示所有虚拟机 --all显示全部 
    
  • 3、启动虚拟机

      virsh start centos
    
  • 4、关闭虚拟机

      virsh shutdown centos
    
  • 5、强制关机

      virsh destroy centos
    
  • 6、移除虚拟机

      virsh undefine centos
    
  • 7、显示vnc端口

      virsh vncdisplay centos
    
  • 8、动态查询kvm使用资源

      top -d 1 | grep kvm
    
  • 9、查询kvm进程

      ps -aux | grep kvm
    
  • 10、开机自动启动虚拟机

      virsh autostart centos
    
  • 11、导出虚拟机centos的硬件配置信息为/cloud/centos.bak.xml

      virsh dumpxml centos > /cloud/centos.bak.xml
    
  • 12、编辑虚拟机配置(配置的是libvirt中的配置文件,而不是我们编写的那个。)

      virsh edit centos
    
  • 13、克隆KVM虚拟机

      virt-clone -o Winxp -n winxpclong -f /home/kvm/winxpclong.img
      (-o  原始客体的名称-n新客户端的名称-f作为新客户端磁盘映像的新文件)
    
标签: KVM
共有 人打赏支持
粉丝 7
博文 100
码字总数 72832
×
刘付kin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: