KVM简单介绍与管理

简介

KVM(Kernel-basedVirtual Machine,基于内核的虚拟机)是适用于包含虚拟化扩展(Intel VT或AMD-V)的x86硬件上的Linux的完全虚拟化解决方案。它由可加载的内核模块kvm.ko组成,它提供核心虚拟化基础架构和处理器特定模块,kvm-intel.ko或kvm-amd.ko。

使用KVM,可以运行多个运行未修改的Linux或Windows映像的虚拟机。每个虚拟机都有专用的虚拟化硬件:网卡,磁盘,图形适配器等。

原理

在这里插入图片描述
安装 KVM 之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。 参考上面的架构图,底部是能够进行虚拟化的硬件平台(目前指的是 Intel VT 或 AMD-SVM 处理器)。在裸硬件上运行的是系统管理程序(带有 KVM 模块的 Linux 内核)。这个系统管理程序与可以运行其他应用程序的普通 Linux 内核类似。但是这个内核也可以支持通过 kvm 工具加载的客户操作系统。最后,客户操作系统可以支持主机操作系统所支持的相同应用程序。

其中CPU和内存交由KVM进行虚拟化,而I/O设备通过qemu模拟进行模拟(QEMU 是一个平台虚拟化解决方案,允许对一个完整的 PC 环境进行虚拟化(包括磁盘、图形适配器和网络设备)。客户操作系统所生成的任何 I/O 请求都会被中途截获,并重新发送到 QEMU 进程模拟的用户模式中。)

KVM 向 Linux 中引入了一种除现有的内核和用户模式之外的新模式。这种新模式就称为客户模式,它用来执行客户操作系统代码。内核模式表示代码执行的特权模式,而用户模式则表示非特权模式(用于那些运行在内核之外的程序)。根据运行内容和目的,执行模式可以针对不同的目的进行定义。客户模式的存在就是为了执行客户操作系统代码,但是只针对那些非 I/O 的代码。在客户模式中有两种标准模式,因此客户操作系统在客户模式中运行可以支持标准的内核,而在用户模式下运行则支持自己的内核和用户 空间应用程序。客户操作系统的用户模式可以用来执行 I/O 操作,这是单独进行管理的

安装

第一步:先查看是否支持虚拟化功能
grep -E "svm|vmx" /proc/cpuinfo

在这里插入图片描述
类似这个图表示不支持,则需要打开cpu的虚拟化功能
吧下面这两项打勾,然后启动虚拟机
在这里插入图片描述
打开之后,可以再执行一次

grep  -E "svm|vmx" /proc/cpuinfo
  • vmx:Intel VT-x
  • svm:AMD AMD-v
    出现下面类似信息,则可以认为CPU虚拟化功能打开了
    在这里插入图片描述
第二步:安装方便管理的KVM工具
yum install libvirt libvirt-daemon-kvm qemu-kvm virt-manager  virt-install  -y
  • libvirt :用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术
  • libvirt-daemon-kvm:libvirt的守护程序
  • virt-manager :提供了一个VMM(Virtual Machine Manager)的图形化管理工具,用于管理KVM, Xen, 和LXC,可以用来启动,停止,添加,移除虚拟设备等功能
  • virt-install:安装虚拟机的一个工具
  • qemu-kvm :QEMU本身是一个完整的虚拟化解决方案,它通过动态的二进制转换,模拟CPU,并且提供一组设备模型,使它能够运行多种未修改的客户机OS,但是这种方式性能非常差。
    当KVM+QEMU时,KVM对CPU和内存进行虚拟,而QEMU负责对I/O设备进行模拟。一起使用可以大大的提高性能,接近真实计算机的运行速度。
    QEMU本身是个完整的虚拟化解决方案,也有几个分支我们可以从官网看出来
    在这里插入图片描述
    而qemu-kvm就是qemu配合kvm进行虚拟化的一个分支。
第三步:加载KVM内核模块

加载kvm模块

modprobe kvm

查看kvm模块相关信息

modinfo  kvm

在这里插入图片描述

第四步:启动libvirt守护程序
systemctl start libvirtd

启动之后会启动启动一个桥设备
在这里插入图片描述
在这里插入图片描述

管理虚拟机实例

可以通过图形化界面,也可以通过命令行管理,两种方法都简单说一下。

扫描二维码关注公众号,回复: 4133438 查看本文章

图形化界面管理

第一步:启动libvirt守护进程
启动图形化管理界面
virt-manager

在这里插入图片描述

在这里插入图片描述
接下来的操作就和VMware类似。

命令行方式管理

这种方式又可以再细分2种,可以用通用的虚拟机管理接口进行管理,也可以通过KVM自带的原生工具管理。

1.KVM管理工具
qemu-img

简介:用于创建、转换和修改映像文件。它可以处理QEMU支持的所有映像。
语法格式:qemu-img command [command options]

qemu-kvm

简介:管理虚拟机工具
语法格式:qemu-kvm [options] [disk_image]

这个命令需要执行一下

ln -sv /usr/libexec/qemu-kvm  /usr/bin

因为它的路径默认不再环境变量PATH中,需要做个软连接才能用

选项
这个命令选项非常多,标准选项,USB选项,显示选项,i386平台专用选项,网络选项,字符设备选项,蓝牙相关选项,Linux系统引导专用选项,调试/专家模式选项,PowerPC专用选项,Sparc32专用选项;
标准选项

	-machine [type=]name:-machine help来获取列表,用于指定模拟的主机类型; 
	-cpu cpu:-cpu help来获取列表;用于指定要模拟的CPU型号;
	-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虚拟机上vcpu的数量及拓扑;
	    cores:cpu数量
	    threads:每个cpu的线程数
	-boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
		order:各设备的引导次序:c表示第一块硬盘,d表示第一个光驱设备;
		示例:-boot order=dc,once=d,表示引导次序为光驱设备,然后第一块硬盘
	-m megs:虚拟机的内存大小;
	-name NAME:当前虚拟机的名称,要惟一;

块设备相关的选项:

	-hda/-hdb file:指明IDE总线类型的磁盘映射文件路径;第0和第1个;
	-hdc/-hdd file:第2和第3个;
	
	-cdrom file:指定要使用光盘映像文件; 
	
	-drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
		file=/PATH/TO/SOME_IMAGE_FILE:映像文件路径;
		if=TYPE:块设备总线类型,ide, scsi, sd, floppy, virtio,...
		media=TYPE:介质类型,cdrom和disk;
		index=i:设定同一类型设备多个设备的编号;
		cache=writethrough|writeback|none|directsync|unsafe:缓存方式;
		format=f:磁盘映像文件的格式;

显示选项:

	-vnc display[,option[,option[,...]]]]:启动一个vnc server来显示虚拟机接口; 让qemu进程监听一个vnc接口; 
		display:
			(1) HOST:N
				在HOST主机的第N个桌面号输出vnc;
					5900+N
			(2) unix:/PATH/TO/SOCK_FILE
			(3) none

网络选项

	-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
		为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
		model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
			-net nic,model=?
		macaddr=mac:指明mac地址;52:54:00:
		
	-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
		通过物理的TAP网络接口连接至vlan n;
		script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
		downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
		ifname=NAME:自定义接口名称;

了解了上面两个命令就直接来创建一个虚拟机实例测试一下

创建虚拟机实例

创建一个存放映像文件的目录

mkdir -pv /kvm

创建映像文件

 qemu-img create -f qcow2 -o preallocation=metadata,size=5G /kvm/centos.test.img

创建虚拟机

qemu-kvm -name centos7 -m 512  -cpu host -smp 1 -drive file=/kvm/centos.test.img,if=virtio,media=disk,cache=writeback,format=qcow2 -vnc :1

然后可以通过vnc访问,使用vnc需要先安装tigervnc-server

yum install tigervnc-server -y

连接虚拟机

vncviewer  127.0.0.1:5901

在这里插入图片描述

创建网桥

brctl addbr br0
brctl addif br0 ens33 ;\
ip addr del dev ens33 192.168.253.134/24 ;\
ifconfig  br0 192.168.253.134/24 up

先创建一个脚本

/etc/qemu-ifup

	#!/bin/bash
	#
	bridge=virbr0

	if [ -n "$1" ];then
		ip link set $1 up
		sleep 1
		brctl addif $bridge $1
		[ $? -eq 0 ] && exit 0 || exit 1
	else
		echo "Error: no interface specified."
		exit 1
	fi	

增加一个执行的权限

chmod +x /etc/qemu-ifup

导入光盘镜像引导,安装系统,并为虚拟机创建网络接口

qemu-kvm -name c1 -smp 2,sockets=1,cores=1 -m 512 \
-drive file=/kvm/centos7.iso,media=cdrom  \
-drive file=/kvm/centos.test.img,media=disk \
-vnc :1 -boot order=cd,once=d \
-net nic,model=e1000,macaddr=52:54:00:00:00:01 \
-net tap,ifname=tap1,script=/etc/qemu-ifup \
-daemonize

在这里插入图片描述
这里可以看到进入安装系统的页面了。接下来就正常安装和使用虚拟机。

2.virsh命令管理

创建一个磁盘映像文件

qemu-img create -f raw /kvm/test.raw  5G

创建iso镜像

dd if=/dev/cdrom  of=/kvm/c7.iso

创建虚拟机

virt-install --name Centos-7-x86_64 --virt-type kvm --ram 1024 \
--cdrom=/kvm/c7.iso --disk path=/kvm/test.raw \
--network  network=default  \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

#--name:指定虚拟机名称Centos-7-x86_64 
#--virt-type:虚拟类型为kvm
#--ram:内存1024
#--cdrom:镜像路径/kvm/c7.iso
#--disk 磁盘映像
#--network 网络类型

在这里插入图片描述

virsh命令
简介:
virsh是管理virsh客户域的主要接口。程序可以是用于创建、暂停和关闭域。它还可以用于列出当前域。Linux操作系统的虚拟化意味着运行多个系统的能力。在单个硬件系统上同时操作操作系统的实例,资源是由Linux实例驱动的。virsh提供长期稳定的C应用程序编程接口。它目前支持Xen、QEMU、KVM、LXC、OpenVZ、VIALALBOX和VMware ESX。
语法格式:
virsh [OPTION]… COMMAND [ARG]…
选项

Domain Management (help keyword 'domain')
Domain Monitoring (help keyword 'monitor')
Host and Hypervisor (help keyword 'host')
Interface (help keyword 'interface')
Networking (help keyword 'network')
Network Filter (help keyword 'filter')
Snapshot (help keyword 'snapshot')
Storage Pool (help keyword 'pool')
Storage Volume (help keyword 'volume')

域管理常用命令

Domain Management (help keyword 'domain')
	create:从xml格式的配置文件创建并启动虚拟机;
	define:从xml格式的配置文件创建虚拟机;
	start:开始
    destroy:强行关机;
    shutdown:关机;
    reboot:重启;
    undefine:删除虚拟机;
    suspend/resume:暂停于内存中,或继续运行暂停状态的虚拟机;
    save/restore:保存虚拟机的当前状态至文件中,或从指定文件恢复虚拟机;
    console:连接至指定domain的控制台;
    attach-disk/detach-disk:磁盘设备的热插拔;从XML文件附加设备
    attach-interface/detach-interface:网络接口设备的热插拔;
	    type:bridge
	    source:BRIDGE_NAME

示例:
1.查看虚拟机状态

virsh list --all  #如果不加--all  关闭的虚拟机看不到

2.启动虚拟机

virsh start Centos-7-x86_64   #名称为Centos-7-x86_64 的虚拟机

3.暂停/恢复虚拟机
虚拟机处于paused暂停状态,一般情况下是被admin运行了virsh suspend才会处于这种状态,但是仍然消耗资源,只不过不被超级管理程序调度而已。这种暂停状态是将状态保存在内存中,重启就没了。

暂停

virsh suspend  Centos-7-x86_64

恢复

virsh resume Centos-7-x86_64

4.保存/恢复虚拟机
这里的保存是将状态保存在磁盘上,重启物理机,仍然可以恢复

保存为/kvm/Centos7-x86_64.s1

virsh save Centos-7-x86_64  /kvm/Centos7-x86_64.s1 

恢复

virsh restore /kvm/Centos7-x86_64.s1

5.强制关闭虚拟机(约等于拔电源)、

virsh destroy Centos-7-x86_64

6.修改虚拟机配置

virsh edit Centos-7-x86_64

7.删除虚拟机

virsh undefine Centos-7-x86_64

8.创建虚拟机
create创建需要有xml文件,我们可以通过修改现有的xml

virsh dumpxml Centos-7-x86_64 > /kvm/test.xml

修改/kvm/test.xml

  <name>test</name>##修改虚拟机名称
  <uuid>60368396-c0d4-495f-9bed-858196ed79e4</uuid> # 删除此行

创建虚拟机并启动

 virsh create /kvm/test.xml

9.连接虚拟机终端

virsh console  Centos-7-x86_64

会遇到卡住的问题
在这里插入图片描述
解决方法参考的文章是:https://www.linuxidc.com/Linux/2014-10/107891.htm
利用vnc进入虚拟机执行

echo "ttyS0" >> /etc/securetty

在/etc/grub.conf文件中为内核添加参数

console=ttyS0

在这里插入图片描述

然后重启虚拟机
就可以发现可以连接到终端了

在这里插入图片描述
这种方法在CentOS6可以用类似方法,如果是CentOS7还有一种更简单的方法
只需要在虚拟机里运行

grubby --update-kernel=ALL --args="console=ttyS0"

然后重启就可以了
在这里插入图片描述

参考文章:
官方文档: https://www.linux-kvm.org/page/Main_Page
https://www.ibm.com/developerworks/cn/linux/l-using-kvm/index.html
https://www.ibm.com/developerworks/cn/linux/l-linux-kvm/

猜你喜欢

转载自blog.csdn.net/L835311324/article/details/84113140