kvm虚拟化

  KVM是Kernel-based Virtual Machine的缩写,从名字上可以知道,KVM是在支持虚拟化硬件环境上,基于Linux操作系统内核的虚拟化技术。

其上的客户操作系统可以完全虚拟化或者半虚拟化。半虚拟化允许多个客户操作系统在一套硬件上运行,可以更有效的使用系统资源,如:内存,处理器。在半虚拟化中,客户端操作系统被修改得适合在虚拟机上运行,最小化那些不适合在虚拟环境中执行的操作的执行时间。

一. 管理VM的工具

KVM包提供特定的工具来管理虚拟机管理程序qemu-kvm

不过建议使用libvirt软件包来管理虚拟机,它相对来说更容易使用。libvirt包含了API库、守护进程libvirtd以及命令行工具virsh。可以使用它来管理多种类型的虚拟机,如:KVM、Xen、VMWare ESX等。更详细的列表请参考libvirt

KVM:hvm
    kvm, kvm-intel , /dev/kvm

管理工具栈:
    qemu-kvm
    libvirt

管理kvm虚拟的方案:
    qemu: /usr/libexec/
    libvirt

管理客户端工具:

  • vir-manager(Virtual Machine Manager):管理虚拟机的图形化工具

  • vm-install:菜单驱动的脚本工具,可以用来配置和安装客户操作系统。

  • virt-viewer:用来访问客户操作系统的X viewer工具,支持X509证书认证和SASL认证的TLS/ SSL加密。

二. 检查硬件是否支持虚拟化

1、使用下面命令检查迎检是否支持虚拟化:

egrep '(vmx|svm)' /proc/cpuinfo    或   grep -E --color=auto "vmx|svm" /proc/cpuinfo

如果在flags部分看到vms或者svm,那么硬件(CPU)是支持虚拟化技术的。

2、验证
只要有kvm文件就支持kvm

[root@kvm ~]# ll /dev/kvm
crw-rw---- 1 root root 10, 232 2月 17 22:11 /dev/kvm

三. 安装KVM软件包

可以使用你Linux发行版的软件包管理工具来安装KVM(比如:debian上的apt,Redhat和CentOS上的yum)

yum install kvm -y

KVM安装完成后,建议安装一下KVM相关工具包,他们可以帮助管理系统上的虚拟机

yum install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools -y

安装完成后,做个软链接

[root@kvm qemu]# ll /usr/libexec/qemu-kvm 
-rwxr-xr-x 1 root root 4018232 8月  10 2016 /usr/libexec/qemu-kvm
[root@kvm qemu]# ln -sv /usr/libexec/qemu-kvm /usr/bin/ "/usr/bin/qemu-kvm" -> "/usr/libexec/qemu-kvm"

再运行装载模块命令

[root@kvm ~]# modprobe kvm
[root@kvm ~]# modprobe kvm-intel

查看载入系统的模块

#lsmod命令:显示已载入系统的模块

[root@kvm ~]# lsmod
Module Size Used by
tcp_diag 1041 0
inet_diag 8735 1 tcp_diag
ip6table_filter 2889 0
ip6_tables 18732 1 ip6table_filter
ebtable_nat 2009 0
ebtables 18135 1 ebtable_nat
ipt_MASQUERADE 2466 3
iptable_nat 6051 1
nf_nat 23316 2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4 9506 4 iptable_nat,nf_nat
nf_defrag_ipv4 1483 1 nf_conntrack_ipv4
xt_state 1492 1
nf_conntrack 80390 5 ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_state
ipt_REJECT 2351 2
xt_CHECKSUM 1303 1
iptable_mangle 3349 1
iptable_filter 2793 1
ip_tables 17831 3 iptable_nat,iptable_mangle,iptable_filter
bridge 82775 0
stp 2218 1 bridge
llc 5578 2 bridge,stp
ipv6 334932 278
vhost_net 30913 0
macvtap 10231 1 vhost_net
macvlan 9890 1 macvtap
tun 16646 2 vhost_net
kvm_intel 55496 4       #显示是intel处理器的
kvm 337772 1 kvm_intel
btusb 16915 0
bluetooth 99271 1 btusb
rfkill 19255 1 bluetooth
e1000 160643 0
microcode 112653 0
vmware_balloon 7199 0
sg 29318 0
i2c_piix4 11776 0
i2c_core 29964 1 i2c_piix4
shpchp 29130 0
ext4 378476 2
jbd2 93427 1 ext4
mbcache 8193 1 ext4
sd_mod 36998 4
crc_t10dif 1305 1 sd_mod
sr_mod 15049 0
cdrom 39085 1 sr_mod
mptspi 16411 3
mptscsih 36636 1 mptspi
mptbase 93615 2 mptspi,mptscsih
scsi_transport_spi 25447 1 mptspi
pata_acpi 3701 0
ata_generic 3837 0
ata_piix 24409 0
dm_mirror 14384 0
dm_region_hash 12085 1 dm_mirror
dm_log 9930 2 dm_mirror,dm_region_hash
dm_mod 95622 2 dm_mirror,dm_log

KVM安装完成后的相关软件包列表,版本号可能与你的系统略有不同。

[root@kvm ~]# rpm -qa | egrep "virt|kvm|qemu"
virt-manager-0.9.0-31.el6.x86_64
qemu-img-0.12.1.2-2.491.el6_8.3.x86_64
gpxe-roms-qemu-0.9.7-6.15.el6.noarch
libvirt-client-0.10.2-60.el6.x86_64
python-virtinst-0.600.0-29.el6.noarch
libvirt-0.10.2-60.el6.x86_64
qemu-kvm-0.12.1.2-2.491.el6_8.3.x86_64
libvirt-python-0.10.2-60.el6.x86_64
virt-what-1.11-1.2.el6.x86_64

备注:所有需要的软件包安装完成后,虽然我们可以使用modprob命令来重新加载模块,但还是推荐重启系统来加载KVM,libvirt相关的模块。 

四、介绍如何在KVM中安装Linux系统

1、查看帮助

[root@kvm qemu]# qemu-img -h

qemu-img version 0.12.1, Copyright (c) 2004-2008 Fabrice Bellard
usage: qemu-img command [command options]
QEMU disk image utility

Command syntax:
check [-f fmt] [--output=ofmt] [-r [leaks | all]] [-T src_cache] filename
create [-f fmt] [-o options] filename [size]
commit [-f fmt] [-t cache] filename
compare [-f fmt] [-F fmt] [-T src_cache] [-p] [-s] filename1 filename2
convert [-c] [-p] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-S sparse_size] filename [filename2 [...]] output_filename
info [-f fmt] [--output=ofmt] filename
map [-f fmt] [--output=ofmt] filename
snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
rebase [-f fmt] [-t cache] [-T src_cache] [-p] [-u] -b backing_file [-F backing_fmt] filenam

2、下载镜像文件

cirror project:为cliud环境测试vm提供的微缩版linux

镜像名称: cirros-0.3.4-x86_64-disk.img

镜像下载地址:http://download.cirros-cloud.net/0.3.4/

#先创建一个文件夹,用来存放镜像文件
[root@kvm qemu]# mkdir -p /images/kvm
[root@kvm qemu]# cd /images/kvm
[root@kvm kvm]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

3、启动第一个虚拟机:

[root@kvm kvm]# qemu-kvm -m 128 -smp 2 -name 'vm1' -hda /images/kvm/cirros-0.3.4-x86_64-disk.img
VNC server running on `::1:5900'

4、查看端口(再开一个窗口)

[root@kvm ~]# ss -tnl
State      Recv-Q Send-Q               Local Address:Port                 Peer Address:Port 
LISTEN     0      128                             :::49428                          :::*     
LISTEN     0      5                    192.168.122.1:53                              *:*     
LISTEN     0      128                             :::22                             :::*     
LISTEN     0      128                              *:22                              *:*     
LISTEN     0      128                              *:44608                           *:*     
LISTEN     0      1                              ::1:5900                           :::*     
LISTEN     0      128                             :::111                            :::*     
LISTEN     0      128                              *:111   

5、安装vnc客户端管理工具

#查看vnc软件名称
[root@kvm ~]# yum list all |grep vnc
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository contrib is listed more than once in the configuration
gtk-vnc.x86_64                              0.3.10-3.el6                 @base  
gtk-vnc-python.x86_64                       0.3.10-3.el6                 @base  
gtk-vnc.i686                                0.3.10-3.el6                 base   
gtk-vnc-devel.i686                          0.3.10-3.el6                 base   
gtk-vnc-devel.x86_64                        0.3.10-3.el6                 base   
libguac-client-vnc.i686                     1:0.9.9-3.el6                epel   
libguac-client-vnc.x86_64                   1:0.9.9-3.el6                epel   
libvncserver.i686                           0.9.7-7.el6_6.1              base   
libvncserver.x86_64                         0.9.7-7.el6_6.1              base   
libvncserver-devel.i686                     0.9.7-7.el6_6.1              base   
libvncserver-devel.x86_64                   0.9.7-7.el6_6.1              base   
novnc.noarch                                0.5.1-2.el6                  epel   
pyvnc2swf.noarch                            0.9.5-9.el6                  epel   
svncpp.i686                                 0.12.0-3.el6                 epel   
svncpp.x86_64                               0.12.0-3.el6                 epel   
svncpp-devel.i686                           0.12.0-3.el6                 epel   
svncpp-devel.x86_64                         0.12.0-3.el6                 epel   
tigervnc.x86_64                             1.1.0-18.el6                 base   
tigervnc-server.x86_64                      1.1.0-18.el6                 base   
tigervnc-server-applet.noarch               1.1.0-18.el6                 base   
tigervnc-server-module.x86_64               1.1.0-18.el6                 base   
x11vnc.x86_64                               0.9.13-8.el6                 epel   
x11vnc-javaviewers.noarch                   0.9.13-8.el6                 epel   

#安装vnc客户端
[root@kvm ~]# yum install tigervnc -y

#查看安装目录
[root@kvm ~]# rpm -ql tigervnc
/usr/bin/vncviewer
/usr/share/applications/vncviewer.desktop
/usr/share/doc/tigervnc-1.1.0
/usr/share/doc/tigervnc-1.1.0/LICENCE.TXT
/usr/share/doc/tigervnc-1.1.0/README.txt
/usr/share/icons/hicolor
/usr/share/icons/hicolor/16x16
/usr/share/icons/hicolor/16x16/apps
/usr/share/icons/hicolor/16x16/apps/tigervnc.png
/usr/share/icons/hicolor/24x24
/usr/share/icons/hicolor/24x24/apps
/usr/share/icons/hicolor/24x24/apps/tigervnc.png
/usr/share/icons/hicolor/48x48
/usr/share/icons/hicolor/48x48/apps
/usr/share/icons/hicolor/48x48/apps/tigervnc.png
/usr/share/locale/de/LC_MESSAGES/tigervnc.mo
/usr/share/locale/fr/LC_MESSAGES/tigervnc.mo
/usr/share/locale/pl/LC_MESSAGES/tigervnc.mo
/usr/share/locale/ru/LC_MESSAGES/tigervnc.mo
/usr/share/locale/sk/LC_MESSAGES/tigervnc.mo
/usr/share/locale/sv/LC_MESSAGES/tigervnc.mo
/usr/share/man/man1/vncviewer.1.gz

6、连接linux服务器

 

 

 

 

 

 

 


介绍使用virt-install创建虚拟机

1. 创建虚拟机的网络要求

默认情况下,虚拟机只能访问同一个Server的其他虚拟机(以及Server自己)。如果你希望虚拟机可以访问VLAN,你需要为你的主机操作系统配置一个桥接网络(Network Bridge)。

修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,增加一行 BRIDGE=br0 (确保已删除所有静态IP配置)

创建文件 /etc/sysconfig/network-scripts/ifcfg-br0 并添加下面内容:

DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.0"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"

你可以使用DHCP或者静态IP地址,在上面的配置中我使用的时静态IP地址。如果你的主机上配置了类似于iptables之类的防火墙,需要增加一个规则允许桥接网络的流量。

2. 其他创建虚拟机前要配置的内容

默认情况下虚拟机的镜像文件保存在/var/lib/libvirt/images,请确保那个位置有足够的空间。如果没有足够的空间,你可以在创建虚拟机时将镜像文件保存在其他位置。

/etc/sysctl.conf增加以下配置启用IP转发(IP forwarding):

inet.ipv3.ip_forward=1

修改完成后重新启动系统。

3. 使用virt-install创建虚拟机

使用virt-install工具来创建虚拟机,这个工具可以在交互或非交互模式下使用。

在下面的例子中,我提供了创建虚拟机必须的命令行参数:

# virt-install \
 -n myRHELVM1 \
 --description "Test VM with RHEL 6" \
 --os-type=Linux \
 --os-variant=rhel6 \
 --ram=2048 \
 --vcpus=2 \
 --disk path=/var/lib/libvirt/images/myRHELVM1.img,bus=virtio,size=10 \
 --graphics none \
 --cdrom /var/rhel-server-6.5-x86_64-dvd.iso \
 --network bridge:br0

我们逐个解释一下上面的各个参数:

  • -n: 虚拟机的名字

  • --description: 虚拟机的描述,比如:应用服务器、数据库服务器、Web服务器等

  • --os-type:操作系统的类型,可以是:Linux、Solaris、Unix或Windows

  • --os-variant:上面参数所指定的操作系统版本。比如:对于Linux有 rhel6、centos6、ubuntu14、suse11、fedora6等,对于Windows有win2k、win2k8、win8、win7

  • --ram:虚拟机的内存大小

  • --vcpu:虚拟机的处理器个数

  • --disk path:虚拟机镜像文件保存路劲,size的单位是GB。在这个例子中,镜像文件的大小是10GB。

  • --graphic none:这个参数告诉virt-install使用虚拟机的字符终端而不是用图形界面(VNC)。如果你的主机上安装了xmanager,可以忽略这个参数。

  • --cdrom:指定安装镜像的路径。除了cdrom意外也可以使用NFS或者http安装位置。比如:--location=http://www.4byte.cn/pub/rhel6/x86_64

  • --network bridge:br0:这个例子中使用桥接网络适配器br0。当然你可以使用自己的网络配置或者特定的端口来替换桥接网络。如果你计划使用NAT网络可以像这样配置:–network network=VMnetwork1。所有虚拟机的网络配置文件都保存在/etc/libvirt/qemu/networks/

4. 列出所有虚拟机

你可以在grub menu中增加console=tty0 console=ttyS0,115200 在安装过程中将控制台重定向到你的SSH窗口。另外,你也可以使用X server来显示安装过程。

下面的命令用来列出目前主机上已安装的虚拟机,可以看到当前我们已经安装了两个虚拟机:

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     dev-dev-vm                     running
 2     myRHELVM1                      running

5. 修改虚拟机配置文件

虚拟机创建完成后,可以在下面位置找到虚拟机的配置文件,配置文件是以"虚拟机名称.xml"来命名的。

# ls -l /etc/libvirt/qemu/myRHELVM1.xml
-rw-------. 1 root root 2109 Oct 15 12:30 /etc/libvirt/qemu/myRHELVM1.xml

不建议手工修改这个配置文件,应该使用virsh edit命令来修改,要修改domain(虚拟机)使用以下命令:

virsh edit myRHELVM1

6.连接虚拟机控制台

使用以下命令来连接虚拟机控制台,要退出控制台的话使用Ctrl+]

virsh console myRHELVM1

如果主机上没有安装X server并且网络也没有配置,那么只能通过连接虚拟机的串口控制来登录到虚拟机

配置虚拟机的控制台访问与配置一个物理主机没有什么区别,只需要为虚拟机增加合适的内核启动参数即可。

比如,对于一台RHEL虚拟机(或者CentOS虚拟机),增加以下内容到/etc/grub.conf文件中内核启动部分然后重启虚拟机:

console=tty0 console=ttyS0,115200

或者,也可以在/etc/grub.conf增加以下内容达到同样目的:

serial --unit=0 --speed=115200
terminal --timeout=5 serial console

6.显示虚拟机信息

使用以下命令显示虚拟机的信息

# virsh dominfo myRHELVM1
Id:             5
Name:           myRHELVM1
UUID:           58083ae7-51db-50c3-64d8-bc4c49f642d0
OS Type:        Linux
State:          running
CPU(s):         2
CPU time:       207.6s
Max memory:     2097152 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c698,c788 (permissive)

7. 显示虚拟机内存和CPU使用情况

使用virt-top命令来显示虚拟机内存和CPU使用情况

# virt-top
virt-top 07:14:44 - x86_64 8/8CPU 1600MHz 32094MB
3 domains, 2 active, 2 running, 0 sleeping, 0 paused, 1 inactive D:0 O:0 X:0
CPU: 0.1%  Mem: 4096 MB (4096 MB by guests)
   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM    TIME   NAME
    5 R    0    0 1546    0  0.0  6.0   3:29.55 dev-dev-vm
    8 R    0    0 1546    0  0.0  6.0   1:42.17 myRHELVM2
    -

8. 启动、关闭以及重启虚拟机

使用virsh命令来启动、关闭以及重启虚拟机

使用下面命令关闭虚拟机:

# virsh shutdown myRHELVM1
Domain myRHELVM1 is being shutdown

使用下面命令重启虚拟机:

# virsh reboot myRHELVM1

使用下面命令启动虚拟机,一旦虚拟机启动可以使用 virsh list –all 来查看所有运行中得虚拟机

# virsh start myRHELVM1
Domain myRHELVM1 started


posted @ 2017-02-17 23:41  努力哥  阅读(1083)  评论(0编辑  收藏  举报