文章目录

  • 本文章由公号【开发小鸽】发布!欢迎关注!!!
  • 一. 虚拟机基础
    • (一) 虚拟化分类
      • 1. Host是通过什么方式将硬件资源虚拟化,并提供给Guest使用的呢?
      • 2. 1型虚拟化
      • 3. 2型虚拟化
    • (二) KVM
      • 1. KVM的概述
      • 2. KVM的虚拟化实现
      • 3.QEMU介绍
      • 4.Libvirt
        • (1)Libvirt概述
        • (2)Libvirt组成
    • (三)KVM虚拟化平台搭建
      • 1. 环境准备
      • 2. 查看硬件是否支持虚拟化
      • 3. 安装KVM
      • 4. 安装kvm所依赖的组件
      • 5. 创建物理桥接设备并关联网卡
      • 6. 测试使用KVM安装虚拟机
      • 7. 查看KVM虚拟机的状态
      • 8. 登录虚机测试网络情况
      • 9. 远程连接管理KVM虚拟机
    • (四) KVM虚拟化原理
      • 1. CPU虚拟化
      • 2.内存虚拟化
      • 3.存储虚拟化
      • 4.网络虚拟化
        • (1) Linux Bridge
        • (2) VLAN
        • (3) KVM是如何实现VLAN的?
        • (4) 虚拟交换机的实现

本文章由公号【开发小鸽】发布!欢迎关注!!!

老规矩–妹妹镇楼:

一. 虚拟机基础

(一) 虚拟化分类

1. Host是通过什么方式将硬件资源虚拟化,并提供给Guest使用的呢?

通过一个Hypervisor的程序,根据Hypervisor的实现方式和所处的位置,虚拟化又分为两种:1型虚拟化和2型虚拟化。

2. 1型虚拟化

Hypervisor直接安装在物理机上,多个虚拟机在Hypervisor上运行,这里的Hypervisor的实现方式一般是一个定制的Linux系统,如Xen何VMWare的ESXi都是这种类型。

3. 2型虚拟化

Host上安装常规的OS,如Linux,Windows等,Hypervisor作为OS上的一个程序运行,并对虚拟机进行管理。如KVM,VirtualBox和VMWare WorkStation就是这种类型。

这种类型的虚拟化更加灵活,支持虚拟机的嵌套,即可以在KVM上再运行一个KVM。

(二) KVM

1. KVM的概述

KVM(Kernal-Based Virtual Machine),即KVM是基于Linux内核实现的虚拟化基础设施,可以将Linux内核转化为一个Hypervisor。KVM在2007年被导入Linux2.6.20核心中,它能够在x86架构且硬件支持虚拟化技术(如Intel VT或AMD-T)的平台上运行。

2. KVM的虚拟化实现

KVM中有一个内核模块kvm.ko(kvm-intel.ko或kvm-AMD.ko),用来管理虚拟CPU和内存,而IO,存储和网络都交给Linux内核和Qemu来实现,QEMU软件(qemu-kvm)作为虚拟机上层控制和界面管理。

3.QEMU介绍

Qemu是一个广泛使用的开源计算机模拟器和虚拟机,它能够独立运行虚拟机,即根本不需要kvm,kqemu是该软件的加速软件。对于kvm来说,并不需要qemu来做虚拟化处理,只是需要qemu的上层管理界面进行虚拟机控开关至,虚拟机依旧是由kvm驱动的。

当qemu作为模拟器时,可以在一种架构(如x86 PC)下运行另一种架构(如ARM)下的操作系统和程序。通过使用动态转换,它可以获得非常好的性能。

当qemu作为虚拟机时,QEMU可以使用其他虚拟机管理程序(如 Xen 或 KVM)来使用CPU扩展(HVM)进行虚拟化,通过在主机CPU上直接执行客户机代码来获得接近于宿主机的性能。

4.Libvirt

(1)Libvirt概述

Libvirt是KVM的管理工具,当然除了KVM它还可以管理其他的Hypervisor,如Xen,VirtualBox等,OpenStack底层也使用了Libvirt。它实际上是一系列库函数提供给其他技术调用,来管理虚拟机的。它的设计是面向驱动的,对于任一种虚拟机技术都会开发该技术对应的驱动,这样不同的虚拟机技术就可以使用不同的驱动来调用libvirt的接口。

(2)Libvirt组成

Libvirt中包含三个组件:

后台daemon程序libvirtd:接受和处理API请求;

API库:让其他人可以开发基于Libvirt的高级工具,如virt-manager,这是个图形化的KVM管理工具;

virsh:KVM命令行工具;

(三)KVM虚拟化平台搭建

1. 环境准备

CentOS7_64位系统,配置图形界面。

2. 查看硬件是否支持虚拟化

[root@localhost ~]# egrep ‘(vmx|svm)’ /proc/cpuinfo

结果是VMX表示Intel,SVM表示AMD。

3. 安装KVM

由于Linux内核已经将KVM收录了,在安装系统时已经加入了KVM,我们只需要在命令行模式下启用KVM即可:

启用KVM模块:

[root@localhost ~]# modprobe kvm
[root@localhost ~]# lsmod |grep kvm

modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

执行 lsmod 指令,会列出所有已载入系统的模块。Linux 操作系统的核心具有模块化的特性,因此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
可以看到是,KVM模块已经被载入Linux中。

4. 安装kvm所依赖的组件

需要安装qemu-kvm和libvirt相关的组件,如下所示:

[root@localhost ~]# yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm

安装完成后启动libvirtd后台服务:

[root@localhost ~]# service libvirtd start

查看libvirtd后台服务状态:

systemctl status libvirtd.service

设置开机自启动libvirtd

systemctl enable libvirtd.service

5. 创建物理桥接设备并关联网卡

在第4步中,我们已经创建了虚拟网桥virbr0,可以通过网桥管理命令查看:

brctl show

接下来,需要将NetworkManager服务关闭,开机启动也关闭:

[root@localhost ~]# chkconfig NetworkManager off
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager

接下来,需要创建物理桥接设备,使用virsh命令行工具创建物理网桥设备br0并关联网卡ens33到该设备中:

[root@localhost ~]# virsh iface-bridge ens33 br0

此时,ens33之前的IP已经被放置到br0网桥中了。

通过网桥管理来查看当前的网桥设备:

btctl show

如果列表中多了br0,则表示桥接成功。

6. 测试使用KVM安装虚拟机

安装virt-manager图形化界面管理虚拟机

yum -y install virt-manager

启动virt-manager创建虚拟机:

virt-manager

从http://download.cirros-cloud.net/中下载一个很小的Linux镜像cirrors,上传到虚拟机中,使用virt-manager创建虚拟机,并分配内存和CPU,可以看到,cirrors已经成功在Centos7上生成了一个新的Linux虚拟机,如下所示:

7. 查看KVM虚拟机的状态

virsh list –all

8. 登录虚机测试网络情况

登录cirros虚机,查看当前虚机的地址信息,然后尝试Ping宿主机以及百度,结果是成功的。说明当前的虚机已经和宿主机连通了,并且也能够访问外网了。
返回到宿主机中,通过网桥管理器查看当前宿主机的网桥情况:

brvtl show

可以看到,br0是我们生成的物理网桥,它绑定了ens33宿主机的物理网卡,以及vnet0这个虚机的网卡,因此虚机和宿主机能够相互通信。

注意一点,虚拟中的虚拟网卡的名称是eth0,而不是宿主机中显示的vnet0,两个名称是不同的。

9. 远程连接管理KVM虚拟机

由于KVM(准确来说是Libvirt)默认是不接受远程管理的,需要进行相关的配置才能够连接上KVM虚拟机。

(四) KVM虚拟化原理

1. CPU虚拟化

KVM的虚拟化是需要CPU硬件的支持的,之前通过命令查找硬件的cpu信息中是否有vmx或svm,vmx是Intel的虚拟化,svm是AMD的虚拟化。

一个KVM虚拟机在宿主机中是一个qemu-kvm进程,与其他的Linux进程一样被调度,而虚机中的每一个虚机vCPU对应qemu-kvm进程的一个线程。

2.内存虚拟化

KVM通过内存虚拟机化共享物理系统内存,动态分配给虚机,为了在一台机器上运行多个虚机,KVM需要实现VA(虚拟内存)->PA(物理内存)->机器内存(MA)直接的地址转换。虚机的OS控制从VA到PA的转换,KVM负责PA到MA。

3.存储虚拟化

KVM的存储虚拟化通过存储池(Storage Pool)和卷(Volume)来管理的。存储池是宿主机上的一块空间,是多种类型的,卷是池中的一块空间,宿主机将卷分配给虚机,卷在虚机中就是一块硬盘。

文件目录是最常用的存储池类型,KVM将宿主机目录/var/lib/libvirt/images作为默认的存储池,而该存储池中的卷就是一个个的文件了,每一个文件对于虚拟来说就是一个磁盘。KVM所有可用的存储池都定义在宿主机的/etc/libvirt/storage目录下,每一个池子有一个XML文件,默认有一个default.xml文件,其中的默认目录就是/var/lib/libvirt/images。

使用文件作为卷的优点是:存储方便,移植性号,可复制,可远程访问。卷不一定都放在宿主机本地文件系统中,也可以存储在通过网络连接的远程文件系统,这样卷就能够在多个宿主机之间共享,便于虚机在不同宿主机之间进行热迁移。

KVM支持多种卷的文件格式,如:

raw是默认格式,原始磁盘镜像格式,移植性号,性能好,大小固定;

qcow2,cow表示copy on write写时复制,节省磁盘空间,支持多快照;

vmdk是VMWare的虚拟磁盘格式,即VMWare的虚机可以直接在KVM上运行;

4.网络虚拟化

网络虚拟化中最重要的是Linux Bridge和Vlan。

(1) Linux Bridge

宿主机中有一块连接外网的物理网卡eth0,如何让虚机VM1访问外网。选择的方案是给VM1分配一个虚拟网卡vnet0,通过Linux Bridge br0将eth0和vnet0连接起来,这样虚机和宿主机就通过Linux Bridege连接起来了。

Linux Bridge是Linux上用来做二层交换的设备,即二层交换机,多个网络设备可以连接到同一个Linux Bridge上,当某个设备收到数据包时,Linux Bridge会将数据转发给其他设备。

注意,在KVM中我们会看到一个virbr0,这是默认创建的一个Bridge,它的作用是为连接其上的虚拟网卡提供NAT访问外网的功能,virbo0默认分配了一个IP192.168.122.1,并通过dnsmasql为连接其上的其他虚拟网卡提供DHCP服务。注意,使用NAT服务的虚机可以访问外网,但是外网无法访问虚机,因为NAT会将虚机发出网络包的源地址转换为宿主机的IP地址,不像网桥,虚机通过自己的IP直接和外网通信。

(2) VLAN

LAN表示本地局域网,通常使用集线器和交换机来连接LAN中的PC,一个LAN表示一个广播域,即LAN中的所有成员都会收到任一个成员发出的广播包。

VLAN表示虚拟的LAN,一个带有VLAN功能的交换机能够将自己的端口划分出多个LAN,即隔离出了多个广播域,每个域的二层广播包(arp)是无法跨越每个广播域的边界的,但是在三层上是可以通过路由器让不同的广播域相通的。

通常交换机的端口有两种配置模式:Access和Trunk。Access端口被打上了VLAN的标签,表明该端口属于哪个VLAN,不同的VLAN用VLAN ID来区分,Access端口都是和计算机的网卡直连的,这样从网卡出来的数据包流入Access端口后就能打上VLAN的标签。Trunk端口能够让不同的VLAN进行通信。

(3) KVM是如何实现VLAN的?

eth0是宿主机的物理网卡,宿主机通过软件实现一个虚拟交换机,在其上定义了一个VLAN10,通过VLAN设备eht0.10连接到虚拟网桥brvlan10上,同时连接的还有虚机VM1的虚拟网卡vnet0,这样vnet0,brvlan10,eth0.10相当于都接入了VLAN10的Access端口上,都属于VLAN10了,连接到虚拟网桥brvlan10上的设备都自动加入了VLAN10中,而eth0就是一个Trunk端口。

如果添加新的VLAN20网段到eth0上,那么两个VLAN区域的网络是隔离的,因为当VLAN10中的VM1向VLAN20中的VM2发送请求时,首先要获取VM2的MAC地址,因此在VLAN10中广播arp请求包,该请求包无法穿透VLAN10区域,因此获取不到VM2的MAC地址,也就无法与VM2通信。

(4) 虚拟交换机的实现

交换机包含两种功能,一种是交换,另一种是隔离。Linux的VLAN设备的是隔离功能,将不同的VLAN网段隔离起来;Linux Bridge实现的是交换功能,将同一个VLAN的子设备挂载到一个Bridge上,设备之间就可以交换数据了。

因此,Linux Bridge + Vlan实现了虚拟交换机的功能。

【云计算学习笔记(十六)】之 KVM原理,Libvirt,VLAN,Linux Bridge介绍相关推荐

  1. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  2. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发

    Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...

  3. Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现

    之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...

  4. C语言结构体变量和结构体数组-学习笔记(十六)

    一.结构体变量 1.结构体概念 将不同类型的数据组合成一个有机的整体即为结构体.结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型. 2.结构体类型及结构体变量定义 (1)结构体类型声明 ...

  5. 【theano-windows】学习笔记十六——深度信念网络DBN

    前言 前面学习了受限玻尔兹曼机(RBM)的理论和搭建方法, 如果稍微了解过的人, 肯定知道利用RBM可以堆叠构成深度信念网络(deep belief network, DBN)和深度玻尔兹曼机(dee ...

  6. 云计算学习笔记003---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战

    1.Hadoop简介 1.hadoop的诞生 l  Nutch和Lucene之父Doug Cutting在2006年完成Hadoop项目. l  Hadoop并不是一个单词,它来源于Doug Cutt ...

  7. MonoRail学习笔记十六:AJax在MonoRail中的使用

    AJax几乎成了web2.0的一个代表,Java和Asp.net中都提供了一些AJax操作的控件.在MonoRail中也同样提供了AJax操作的共通类:AJaxHelper AJaxHelper可以指 ...

  8. JavaScript权威设计--CSS(简要学习笔记十六)

    1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domai ...

  9. Jenkins deploy to container部署war到tomcat(学习笔记十六)

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horiz ...

  10. IOS学习笔记十六(NSString和NSMutableString)

    1.NSString和NSMutableString NSString是不变字符串类,有点像java里面的String,NSMutableString是可变字符串类,有点类似java里面的String ...

最新文章

  1. 河北计算机应用技术,[河北科技大学]计算机应用技术
  2. 课后作业:字符串加密
  3. golang goroutine实现_golang技术随笔(二)理解goroutine
  4. Autofac实现有条件的DI
  5. 有一种无耻叫 “我是为你着想”
  6. 的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术
  7. 如何在Java中生成比特币钱包地址
  8. Unity 5.x---00使用重力
  9. 标准音阶及常用乐器频率范围对照表(完全版)
  10. C语言编译.bat为 .exe
  11. Spring动态代理的两种区别
  12. MySQL的字符集和校对规则,你都会了吗?
  13. 我的理想200字计算机工程师,我的理想工程师作文(我的理想是做一名工程师)...
  14. 盘点淘宝、腾讯、百度内部使用的JavaScript库
  15. 如何设置阿里云Web应用攻击防护?
  16. Excel 函数大全之查找和引用函数 01 ADDRESS、AREAS、CHOOSE 、CHOOSECOLS、CHOOSEROWS、COLUMN 、COLUMNS教程含使用方法
  17. 新款 MacBook Pro 评测:更好的性能、免费的刘海和更好的显示器
  18. MapReduce入门(一)—— MapReduce概述 + WordCount案例实操
  19. 【MATLAB基础】MATLAB与Word互联(4)
  20. 墨菲定律、二八法则、马太效应、手表定理、“不值得”定律等左右人生的金科玉律。

热门文章

  1. 找公司 CTO 聊了聊,原来技术总监需要这些能力!
  2. 移动Web开发基础-比例盒子
  3. 来讲讲新生代剪辑工具,人工智能视频剪辑软件王者剪辑
  4. 教培机构、讲师的6大痛点
  5. 上海灵信视觉A4控制板
  6. GNS3 1.3 10 考CCNA,CCNP,思科证必备软件教学和资源(拿高薪,走向人生巅峰)...
  7. 栅格化系统的原理以及实现
  8. 读博读废了是种什么样的体验?
  9. Tomcat 方式部署 Solo 博客系统总结
  10. 远程预付费管理系统在淮安茂业时代广场 项目上的应用