KVM虚拟化平台部署及管理

简介:

前言

KVM即Kernel Virtual Machine,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Redhat收购了Qumranet,至此Redhat拥有了自己的虚拟化解决方案,之后便舍弃Xen开始全面扶持KVM,从RHEL6开始KVM便被默认内置于内核中。本文介绍KVM虚拟化平台部署及管理。

KVM简介

KVM特点

KVM必须在具备Intel VT或AMD-V功能的x86平台上运行。KVM包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一个经过修改的QEMU(qemu-kvm),作为虚拟机上层控制和界面。

由于KVM仅是一个简单的虚拟化模块,所以它的内存管理没有自我实现,需借助于Linux内核实现内存管理。KVM能够使用Linux所支持的任何存储,在驱动程序的实现上,直接借助于Linux内核来驱动任何硬件。在性能上KVM继承了Linux很好的性能和伸缩性,在虚拟化性能方面,已经达到非虚拟化原生环境95%左右的性能(官方数据)。KVM拓展性也非常好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存,可以过载使用CPU和内存,还可借助KSM技术实现对内存的过量使用,且保证性能依旧非常不错。

KVM架构

wKiom1Wp7t2iSifVAACNp2a08jU227.jpg

KVM的架构非常简单,就是内核的一个模块,用户空间通过qemu模拟硬件提供给虚拟机使用,一个虚拟机就是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理。

KVM平台部署

检测硬件

检测是否支持虚拟化

1
2
3
4
5
6
7
8
[root@node2 ~] # egrep --color '(vmx|svm)' /proc/cpuinfo
#如果含有vmx或者svm字样,则表示硬件支持虚拟化,vmx代表Intel,svm代表AMD
#装载模块
[root@node2 ~] # modprobe kvm
[root@node2 ~] # modprobe kvm_intel
[root@node2 ~] # lsmod | grep kvm
kvm_intel              55496  0 
kvm                   337772  1 kvm_intel

安装管理软件

我们首先介绍KVM的原生管理软件qemu-kvm

1
2
[root@node2 ~] # yum install qemu-kvm qemu-kvm-tools -y
[root@node2 ~] # ln -s /usr/libexec/qemu-kvm /usr/sbin/

qemu-kvm命令详解

qemu-kvm的标准选项

qemu-kvm的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-name name:设定虚拟机名称;
-M machine:指定要模拟的主机类型,如Standard PC、ISA-only PC或Intel-Mac等
-m megs:设定虚拟机的RAM大小;
-cpu model:设定CPU模型,如coreduo、qemu64等
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP
架构中CPU的个数等、每个CPU的核心数及CPU的socket数目等;PC机上最多可以模拟255颗CPU;maxcpu
s用于指定热插入的CPU个数上限;
-numa opts:指定模拟多节点的numa设备;
-fda  file
-fdb  file :使用指定文件( file )作为软盘镜像, file /dev/fd0 表示使用物理软驱;
-hda  file
-hdb  file
-hdc  file
-hdd  file :使用指定 file 作为硬盘镜像;
-cdrom  file :使用指定 file 作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用;将 file 指定
/dev/cdrom 可以直接使用物理光驱;
-drive option[,option[,option[,...]]]:定义一个硬盘设备;可用子选项有很多。
     file = /path/to/somefile :硬件映像文件路径;
     if =interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
     index=index:设定同一种控制器类型中不同设备的索引号,即标识号;
     media=media:定义介质类型为硬盘(disk)还是光盘(cdrom);
     snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
     cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和w
ritethrough四个;
     format = format :指定映像文件的格式,具体格式可参见qemu-img命令;
-boot [order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一
个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱、c表
示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;
-boot order= dc ,once=d

网络选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-net nic[,vlan=n][,macaddr=mac][,model= type ][,name=name][,addr=addr][,vectors= v ]:创建一
个新的网卡设备并连接至vlan n中;macaddr用于为其指定MAC地址,name用于指定一个在监控时显示
的网上设备名称;emu可以模拟多个类型的网卡设备
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script= file ][,downscript=dfile]:通过
物理机的TAP网络接口连接至vlan n中,使用script= file 指定的脚本(默认为 /etc/qemu-ifup )来配置
当前网络接口,并使用downscript= file 指定的脚本(默认为 /etc/qemu-ifdown )来撤消接口配置;使用
script=no和downscript=no可分别用来禁止执行脚本;
-net user[,option][,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
     vlan=n:连接至vlan n,默认n=0;
     name=name:指定接口的显示名称,常用于监控模式中;
     net=addr[ /mask ]:设定GuestOS可见的IP网络,掩码可选,默认为10.0.2.0 /8
     host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2;
     dhcpstart=addr:指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.1
6-x.x.x.31;
     dns=addr:指定GuestOS可见的dns服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3;
     tftp= dir :激活内置的tftp服务器,并使用指定的 dir 作为tftp服务器的默认根目录;
     bootfile= file :BOOTP文件名称,用于实现网络引导GuestOS;如:qemu -hda linux.img -boot
n -net user,tftp= /tftpserver/pub ,bootfile= /pxelinux .0

创建磁盘映像文件

1
2
3
4
[root@node2 ~] # qemu-img create -f qcow2 -o size=50G,preallocation="metadata" /kvm/images/centos6.qcow2
[root@node2 ~] # ll -h /kvm/images/
total 8.0M
-rw-r--r-- 1 root root 51G Jul 18 16:33 centos6.qcow2

配置桥设备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@node2 ~] # vim /etc/sysconfig/network-scripts/ifcfg-br0
 
DEVICE=br0
TYPE=Bridge
ONBOOT= yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=172.16.10.124
PREFIX=16
GATEWAY=172.16.0.1
DNS1=172.16.0.1
 
[root@node2 ~] # vim /etc/sysconfig/network-scripts/ifcfg-eth0
 
DEVICE=eth0
TYPE=Ethernet
ONBOOT= yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0
 
[root@node2 ~] # service network restart

如果我们加入网卡设备,则需要使系统启动后桥接网络到br0上,我们通过脚本实现启动和停止系统时桥接网络和删除桥接的自动执行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@node2 ~] # mkdir /kvm/script
[root@node2 ~] # vim /kvm/script/qemu-ifup
 
#!/bin/bash
 
switch=br0
   
if  [ -n  "$1"  ];  then
     ip link  set  $1 up
     sleep  1
     brctl addif $switch $1
     exit  0
else
     echo  "Error: No Interface."
     exit  1
fi
 
 
[root@node2 ~] # vim /kvm/script/qemu-ifdown
 
#!/bin/bash
 
switch=br0
   
if  [ -n  "$1"  ]; then
     brctl delif $switch $1
     ip link  set  $1 down
     exit  0
else
     echo  "Error: No Interface."
     exit  1
fi
 
[root@node2 ~] # chmod -R +x /kvm/script/

安装虚拟机

1
2
3
4
5
6
7
8
9
10
[root@node2 ~] # yum install tigervnc -y
[root@node2 ~] # qemu-kvm -name "centos6.6" \
-m 512 -smp 2 \
-drive  file = /kvm/images/centos6 .qcow2,media=disk, format =qcow2 \
-drive  file =CentOS-6.6-x86_64-bin-DVD1.iso,media=cdrom \
-net nic -net tap,ifname=vnet0,script= /kvm/script/qemu-ifup ,downscript= /kvm/script/qemu-ifdown  \
-boot order= dc ,once=d
VNC server running on `::1:5900'
 
[root@node2 ~] # vncviewer :5900

wKiom1WqG6fgJGE0AAOpuo0nbc8620.jpg

现在就可以安装系统了,我们看一下脚本有没有生效

1
2
3
4
5
6
7
8
[root@node2 ~] # ifconfig vnet0
vnet0     Link encap:Ethernet  HWaddr A6:BC:EA:47:22:7B  
           inet6 addr: fe80::a4bc:eaff:fe47:227b /64  Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:645 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:500 
           RX bytes:0 (0.0 b)  TX bytes:60078 (58.6 KiB)

脚本生效了,安装过程就不详述了,想必朋友们已经轻车熟路了,qemu-kvm就先说到这里了

基于Libvirt实现虚拟机管理

因为对进程的管理非常麻烦,Redhat发布了一个开源项目Libvirt,Libvirt有API,也有一套命令行工具,可以完成对虚拟机的管理,大多数的管理平台都是通过Libvirt来完成对KVM虚拟机管理的,下面我们就来介绍一下基于Libvirt实现虚拟机管理

安装所需组件

1
[root@node2 ~] # yum install libvirt virt-manager virt-viewer python-virtinst -y

启动服务

1
2
3
4
5
[root@node2 ~] # service libvirtd start
Starting libvirtd daemon:                                  [  OK  ]
 
#使用libvirt创建网桥无需再手动修改配置文件,一条命令即可解决
# virsh iface-bridge eth0 br0

virt-install

virt-install是一个命令行工具,它能够为KVM、Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装;此外,它能够基于串行控制台、VNC或SDL支持文本或图形安装界面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等
-n NAME, --name=NAME:虚拟机名称,需全局惟一;
-r MEMORY, -- ram =MEMORY:虚拟机内在大小,单位为MB;
--vcpus=VCPUS[,maxvcpus=MAX][,sockets= #][,cores=#][,threads=#]:VCPU个数及相关配置;
--cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;
安装方法:指定安装方法、GuestOS类型等;
-c CDROM, --cdrom=CDROM:光盘安装介质;
-l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如 ftp : //172 .16.0.1 /pub
--pxe:基于PXE完成安装;
--livecd: 把光盘当作LiveCD;
--os- type =DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
--os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
-x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外
选项,例如指定kickstart文件的位置,--extra-args  "ks=http://172.16.0.1/class.cfg"
--boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的ke
rnel /initrd 来引导系统启动等 ;例如:
--boot  cdrom,hd,network:指定引导次序;
--boot kernel=KERNEL,initrd=INITRD,kernel_args=”console= /dev/ttyS0 ”:指定启动系统的内核及initrd文件;
#存储配置:指定存储类型、位置及属性等;
--disk=DISKOPTS:指定存储设备及其属性;格式为--disk  /some/storage/path ,opt1=val1,opt2=val2等;
常用的选项有:
     device:设备类型,如cdrom、disk或floppy等,默认为disk;
     bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
     perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
     size:新建磁盘映像的大小,单位为GB;
     cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
     format :磁盘映像格式,如raw、qcow2、vmdk等;
     sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
     --nodisks:不使用本地磁盘,在LiveCD模式中常用;
#网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
-w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
     bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
     network=NAME:连接至名为“NAME”的网络;
其它常用的选项还有:
     model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
     mac:固定的MAC地址;省略此选项时将使用随机地址
--nonetworks:虚拟机不使用网络功能;
#其它:
--autostart:指定虚拟机是否在物理启动后自动启动;
--print-xml:如果虚拟机不需要安装过程(-- import 、--boot),则显示生成的XML而不是创建此虚拟
机;默认情况下,此选项仍会创建磁盘映像;
--force:禁止命令进入交互式模式,如果有需要回答 yes 或no选项,则自动回答为 yes
--dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创
建的需求通知给libvirt;
-d, --debug:显示debug信息;

安装虚拟机

1
2
3
4
[root@node2 ~] # virt-install -n "centos6.6" \
--vcpus=2 -r 512 -c CentOS-6.6-x86_64-bin-DVD1.iso \
--disk path= /kvm/images/centos6 .6.qcow2,bus=virtio,size=50,sparse \
--network bridge=br0,model=virtio --force

wKioL1WqRFvB3PFPAAO9jsboHvg907.jpg

virt-manager

virt-manager是一套用 python编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机,virt-manager就是利用libvirt的API实现的。

安装虚拟机

1
2
3
4
5
6
[root@node2 ~] # mount /dev/cdrom /media/cdrom/
[root@node2 ~] # ln -s /media/cdrom/ /var/www/html/centos6
[root@node2 ~] # service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@node2 ~] # virt-manager &

创建一个新虚拟机,这次选用网络安装

wKioL1WqXi2jUwVYAAKUNty8yVw207.jpg

指定安装源

wKioL1WqXqDRT2_TAAJPazh3Udw414.jpg

过程就不想详细描述了,直接开始安装

wKioL1WqYHOwZyBjAAKiu8kyOHA265.jpg

安装完成,重启即可进入系统

wKiom1WqZVOR4rOIAAOmTAzUHII326.jpg

virt-manager类似于VMware Workstation,操作较为简单,就不多作介绍了,至此,KVM虚拟化平台部署及管理的几种方式就全部介绍完了

The end

KVM虚拟化平台部署及管理的几种方式就说到这里了,总体来说,Libvirt组件在用户体验上是要强于qemu-kvm的,至于选用哪种方式,全凭个人喜好,部署过程有什么疑问可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~~~


本文转自 北城书生  51CTO博客,原文链接:http://blog.51cto.com/scholar/1675955


相关文章
|
4月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
107 5
|
2月前
|
存储 Linux 调度
KVM 虚拟化的功能特性
【10月更文挑战第13天】虚拟化技术创建实体资源的虚拟版本,提升资源利用率。KVM(Kernel-based Virtual Machine)作为全虚拟化解决方案,借助Linux内核实现Hypervisor功能,通过模块化方式提供高效的虚拟化环境。
|
1月前
|
SQL 数据挖掘 数据库
虚拟化数据恢复—XenServer虚拟化平台数据恢复案例
服务器虚拟化数据恢复环境: 某品牌720服务器中有一组通过同品牌、型号为H710P的RAID卡+4块STAT硬盘组建的RAID10磁盘阵列。上层部署XenServer虚拟化平台。1台Windows Server操作系统虚拟机,该虚拟机有2块虚拟磁盘(系统盘+数据盘),当作网站服务器使用。 服务器虚拟化故障: XenServer虚拟机不可用,虚拟磁盘中数据丢失。
|
3月前
|
KVM 虚拟化
虚拟化技术概述及KVM环境安装
关于虚拟化技术概述及KVM环境安装的教程,涵盖了虚拟化的定义、分类、管理工具,以及KVM的系统需求、安装步骤和使用指南。
90 11
虚拟化技术概述及KVM环境安装
|
2月前
|
安全 KVM 虚拟化
OpenEuler 中配置 KVM 虚拟化环境指南
本文档详细介绍了如何在OpenEuler系统中配置和管理KVM虚拟化环境,包括环境准备、组件安装、虚拟机安装及管理命令等,适合初学者和有经验的用户。内容覆盖了从桥接网卡配置到虚拟机的安装与管理,以及常见问题的解决方法,帮助用户高效利用虚拟化技术。
128 0
|
4月前
|
Linux KVM 虚拟化
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
|
6月前
|
虚拟化 芯片
minos 2.3 中断虚拟化——GICv2 管理
硬件肯定需要软件配合,这一节就来实战 GICv2 首先准备好 GICv2 手册:https://developer.arm.com/documentation/ihi0048/bb/?lang=en,对于硬件的管理,最底层的操作就是读写硬件的寄存器,所以这里准备好手册,随时查阅手册
110 5
minos 2.3 中断虚拟化——GICv2 管理
|
7月前
|
安全 Devops 虚拟化
【专栏】虚拟化技术与云计算平台 OpenStack:硬件虚拟化、操作系统级虚拟化和容器化
【4月更文挑战第28天】本文探讨虚拟化技术原理,如硬件虚拟化、操作系统级虚拟化和容器化,以及开源云计算平台OpenStack如何利用这些技术提供优势。OpenStack支持多种虚拟化技术,具备开源灵活性、多租户架构、可扩展性、插件式设计和成本效益。未来,OpenStack将在容器化、DevOps、跨云策略和安全合规性方面发挥更大作用,助力企业数字化转型。
646 4
|
1月前
|
存储 安全 虚拟化
虚拟化技术:实现资源高效利用和灵活管理的利器
虚拟化技术作为实现资源高效利用和灵活管理的重要手段,在数字化时代背景下,正逐步改变传统IT架构模式。本文概述了虚拟化技术的概念、原理及其在数据中心管理、云计算平台、企业信息化建设、科研教育及医疗行业的应用,并探讨了其面临的挑战与未来发展趋势。
120 3
|
4月前
|
存储 Linux 调度
OpenStack如何支持虚拟化技术?
【8月更文挑战第21天】
257 0
下一篇
DataWorks