Kvm 简介 安装 使用 桥接网络

来源:互联网 发布:mac配置jenkins 编辑:程序博客网 时间:2024/05/17 12:56

KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:


它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
它需要支持虚拟化扩展的 CPU。
它是完全开源的。官网。



安装组件介绍:
      1. KVM (名称来自英语: Kernel-basedVirtual Machine 的缩写,即基于内核的虚拟机)  是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。
        
其基本结构由两部分组成:
        一个是KVM Driver ,是Linux 内核的一个模块,负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行等;

        
      2.  另一个部分是稍微修改过的Qemu,用于模拟PC硬件的用户空间组件,模拟I/O设备模型以及提供访问外设的途径
        qemu  全称 Quick Emulator 。 是独立虚拟软件,能独立运行虚拟机(根本不需要 kvm )。 kqemu 是该软件的加速软件。 kvm 并不需要 qemu 进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由 kvm 驱动。所以,大家不要把概念弄错了,盲目的安装 qemu  kqemu 
         
当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。        
        从QEMU角度来看,也可以说QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的加速,从而极大地提高了虚拟机的性能。除此之外,虚拟机的配置和创建,虚拟机运行依赖的虚拟设备,虚拟机运行时的用户操作环境和交互,以及一些针对虚拟机的特殊技术(诸如动态迁移),都是由QEMU自己实现的。
        从QEMU和KVM模块之间的关系可以看出,这是典型的开源社区在代码共用和开发项目共用上面的合作。
       诚然,QEMU可以选择其他的虚拟机或技术来加速,比如Xen或者KQEMU;
        KVM也可以选择其他的用户空间程序作为虚拟机实现,只要它按照KVM提供的API来设计。但是在现实中,QEMU与KVM两者的结合是最成熟的选择,这对一个新开发和后起的项目(KVM)来说,无疑多了一份未来成功的保障。


      3.  libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。





一、安装准备
1.确定机器有VT
       终端输入命令: grep vmx /proc/cpuinfo (INTEL芯片)
grep svm /proc/cpuinfo (AMD芯片)
不知道芯片的生产厂商则输入:egrep '(vmx|svm)' /proc/cpuinfo
如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法成功安装KVM虚拟机。

2. 确保BIOS里开启VT
 Intel(R) Virtualization Tech [Enabled]
如有必要,还需在BIOS中开启VT-d

3. 确保内核版本较新,支持KVM
用uname –r查看内核版本,如果在2.6.20以下的linux版本,需升级内核。

我这里使用   CentOS release 6.3      内核版本  2.6.32-279.el6.x86_64


二、安装KVM
下面就Ubuntu和CentOS下安装使用KVM虚拟机做介绍:

1.Ubuntu 安装
用guest登陆,安装KVM的命令为:
sudo apt-get install kvm qemu qemu-kvm virt-manager kernel-package linux-source kqemu-source build-essential
kvm安装成功后会有/dev/kvm,如果无需图形管理器,只需要安装前三个即可。

再来查看下KVM是否安装成功,执行:virsh -c qemu:///system list
如果输入结果像下面这样的,那么成功了:
Connecting to uri: qemu:///system
Id Name State

----------------------------------


2.CentOS中安装时
注1:CentOS中安装时,先要选择Selinux为enable,使用命令
#system-config-securitylevel-tui
可查看或修改selinux的状态。

注2: CentOS中用root登陆时则安装命令为:
yum install kvm kmod-kvm qemu
再装入kvm模块:modprobe kvm-intel (Intel机器) 或者 modprobe kvm-amd (amd机器)

注3:可以用以下命令来检查是否装入kvm模块:
/sbin/lsmod | grep kvm
如果输出关于kvm版本的信息则已装入kvm模块

注4: 安装好后,可使用qemu-kvm命令,输入该命令,如果系统显示未知的命令,可查看/usr/libexec中是否有qemu-kvm可执行文件,如果有,将其拷贝到/bin目录下即可。
       如果确实按照上面的步骤进行了,却在/bin,/usr/libexec,/usr/bin,/usr/sbin里都找不到qemu-kvm可执行文件,可执行以下命令:
#yum provides "*/qemu-kvm"

注5:安装新内核后,可能有部分软件版本过低,不兼容。比如firefox因版本过低,无法启动。
CentOS下可使用如下命令更新该软件(以firefox为例):
#yum update firefox



三、使用KVM

1.安装虚拟机图形管理工具——Virtual Machine Manager
为方便期间我使用 centos图形界面工具 来操作创建虚拟机
virt-manager 管理虚拟化的方法

Virtual Machine Manager (virt-manager) 是一个轻量级应用程序套件,形式为一个管理虚拟机的命令行或图形用户界面 (GUI)。除了提供对虚拟机的管理功能之外,virt-manager 还通过一个嵌入式虚拟网络计算 (VNC) 客户端查看器为 Guest 虚拟机提供一个完整图形控制台。

作为一个应用程序套件,virt-manager 包括了一组常见的虚拟化管理工具。这些工具已在表 1 中列出,包括虚拟机构造、克隆、映像制作和查看。virsh 实用程序不是 virt-manager 包的一部分,但它本身就具有很重要的价值。

 安装:yum install virt-manager.x86_64

打开:GUI方式 菜单Applications->System Tools->Virtual Machine Management



创建后后打开报错:
Unable to open a connection to the libvirt management daemon.

Libvirt URI is: qemu:///system

Verify that:
 - The 'libvirtd' daemon has been started


原因是libvirtd没有开启
libvirtd其旨在为包括Xen、kvm在内的各种虚拟化工具提供一套方便、可靠的
编程接口。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。
Libvirt 库是一种实现 Linux 虚拟化功能的 Linux? API,它支持各种虚拟机监控程序,包括 Xen 和 KVM,以及 QEMU 和用于其他操作系统的一些虚拟产品


启动libvretd 
# service libvirtd start
Starting libvirtd daemon: libvirtd: relocation error: libvirtd: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
                                                           [FAILED]

启动失败,解决方法 更新文件
# yum upgrade device-mapper-libs




2.创建虚拟机
使用图形界面创建虚拟机

本节中的步骤创建两个虚拟机。

  1. 安装一个基于 Linux? 的操作系统 debian,下载镜像文件
  2. 要开始虚拟机创建过程,使用 sudo 以 root 用户启动 virt-manager
    $ sudo virt-manager

    打开 virt-manager 窗口,可通过该窗口连接到本地 QEMU 虚拟机管理程序(通过右键单击 localhost (QEMU),然后单击 Connect 来完成)。如果有更多虚拟机管理程序可用,那么它们应在这里列出,并可通过 libvirt API 连接。

    图 2. Virtual Machine Manager 窗口
    Virtual Machine Manager 窗口
  3. 当连接到本地 QEMU 虚拟机管理程序时,单击 Create Virtual Machine 图标,这将启动 VM Construction Wizard。
  4. 将此虚拟机命名为debian8-71,并从一个本地 ISO(已在上面下载)发起您的操作系统安装。
    图 3. 创建一个虚拟机
    创建一个虚拟机
  5. 单击 Forward 后,定义您的虚拟机的安装文件并为操作系统选择一个类型。在本例中,指定您的 ISO 文件,从操作系统类型列表中选择Linux,然后从版本列表中选择 iso 文件
    图 4. 定义安装媒体
    定义安装媒体
  6. 定义虚拟机的执行环境。为此虚拟机分配 1GB 内存和一个单一 CPU。这些选择需要一些技巧,因为内存大小应适合您的虚拟机(对于这个特定实例,1GB 有点大材小用)。CPU 可帮助(而且有时候会损害)操作系统。如果操作系统有效利用了多个核心,那么这些核心可分发给虚拟机。
    图 5. 定义执行环境
    定义执行环境
  7. 定义虚拟机的存储环境。在本例中,请求 virt-manager 创建您的虚拟磁盘(而不是由您自行提供),并动态调整它的大小(最高 1 GB)。请注意,该磁盘选项可能影响安装和执行速度。如果将磁盘指定为动态,它最开始是一个较小的主机文件,然后随着虚拟机对它的使用而扩展。此动态过程需要比较少时间来管理。备用选择是 raw,这是一个具有主机操作系统(虚拟机管理程序)的完整大小的磁盘映像。这里的代价是需要更多主机磁盘空间,但虚拟机的运行速度应该会更快,这是因为不需要动态调整过程。
    图 6. 定义存储环境
    定义存储环境
  8. 作为最后一步,virt-manager 提供了该虚拟机目前为止的摘要信息,从而允许您定义网络化选项(选择默认值:网络地址转换 [NAT])。请注意,它还提供了额外的选项和信息,比如虚拟磁盘的物理位置。您也可以定义自己想要的基础处理器的类型。在本例中,选择 AMD i686 作为架构,但也可选择 x86-64。
    图 7. 虚拟机的最后检查
    虚拟机的最后检查
  9. 当单击 Finish 时,启动虚拟机的过程就会开始。它首先引导一个 CD-ROM(您在其中提供了安装映像),这使得虚拟机能够安装该 Linux。当安装完成时,重新启动(这会自动断开 CD-ROM)之后就会得到一个正常运行的虚拟机。请注意,此窗口只提供了虚拟机的视图,并允许您与它交互。您可关闭此窗口,但虚拟机会继续在后台运行(并且可在 virt-manager root 窗口中看见它)。





3.更改虚拟机网络类型
        KVM:在KVM下运行的VM默认的网卡采用NAT的方式进行连接,无法与外界进行通讯,但是可以与同台KVM下的其他VM进行通讯,为了使VM与其他网络主机进行通讯,需要将网卡模式由NAT改为桥接的方式。

 Kvm 简介 安装 使用 - 朝鲜程序员 - 朝鲜程序员的博客

网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据

网络规划:

KVM宿主机   CENTOS6.3      IP:10.0.7.211
虚拟机            debian8.71        IP:10.0.7.212



修改宿主机网络文件 ifcfg-eth0

DEVICE="eth0"

BOOTPROTO=none

NM_CONTROLLED="yes"

ONBOOT=yes

TYPE="Ethernet"

UUID="d89a9846-1e07-488a-b1d1-ee8ba9505b55"

HWADDR=78:45:C4:34:07:48

#IPADDR=10.0.7.211

#PREFIX=24

#GATEWAY=10.0.7.254

DNS1=114.114.114.114

BRIDGE=br0

 



新创建一个网络文件 ifcfg-br0

DEVICE="br0"

BOOTPROTO=static

NM_CONTROLLED="yes"

ONBOOT=yes

TYPE="Bridge"

UUID="d89a9846-1e07-488a-b1d1-ee8ba9505b55"

HWADDR=78:45:C4:34:07:48

IPADDR=10.0.7.211

PREFIX=24

GATEWAY=10.0.7.254

DNS1=114.114.114.114

DEFROUTE=yes

 

重启网路……


在宿主机图形管理软件Virtual Machine Manager 中设置虚拟机网卡类型:

Kvm 简介 安装 使用 - 朝鲜程序员 - 朝鲜程序员的博客

 



进入虚拟机配置网络:

vi /etc/network/interface 


# 启动系统激活设备
# Loop回环地址
auto lo
iface lo inet loopback 


# 启动系统激活设备
# 网卡eth0设置为Static类型
auto eth0
iface eth0 inet static
# 指定IP地址、子网掩码、网关
address 10.0.7.212
netmask 255.255.255.0
gateway 10.0.7.254



 注意,要将NetworkManager这个服务给Stop了,然后重启网络

centos:
service NetworkManager stop
chkconfig NetworkManager off
 /etc/init.d/network restart


debian:
service NetworkManager stop
update-rc.d NetworkManager remove
/etc/init.d/networking restart