KVM虚拟化技术(一)

KVM虚拟化技术(一)

===============================================================================

概述:

===============================================================================

虚拟化技术基础

1.介绍

cpu虚拟化:

模拟:emulation

虚拟:virtulization

  • 完全虚拟化(full-virtulization)

    BT: 二进制翻译 (软件)

    HVM:硬件辅助的虚拟化 (硬件)

  • 半虚拟化(para-virtulization)

Memory虚拟化

I/O虚拟化

2.实现方式

两种实现方式

Type-I:

  • hypervisor --> vm
  • xen, vmware ESX/ESXi

xen:hypervisor, Dom0(实现I/O操作)

Type-II:

  • host(宿主机) --> vmm(虚拟机监控器) --> vm
  • kvm, vmware workstation, virtualbox

3.Inter硬件辅助的虚拟化


QEMU,virtio

1.虚拟化技术的分类

模拟

  • 著名的模拟器,PearPC, Bochs, QEMU

完全虚拟化:也称为native virtulization

两种加速方式:

  • BT
  • HVM

应用的技术:

  • VMware Workstation, VMware Server, Parallels Desktop, KVM, Xen(HVM)

半虚拟化:para-virtualization

  • 解决方案:xen, uml(user-mode linux)

OS级别的虚拟化:

将用户空间分隔为多个,彼此间互相隔离;

容器级虚拟化

  • OpenVZ, lxc
  • Solaris Containers
  • FreeBSD jails

库虚拟化:

  • wine

应用程序虚拟化:

  • jvm

2.虚拟化网络

虚拟化网络:

  • nat mode:NAT模型
  • bridge mode:桥接模型
  • routed mode:路由模型
  • isolation mode:隔离模型

TUN与TAP

在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。

  • TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
  • 操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。

KVM

1.介绍

KVM: Kernel-based Virtual Machine, Qumranet公司

依赖于HVM(要求cpu必须支持硬件虚拟化)

  • Intel:VT-x(表现为vmx)
  • ADM: ADM-V (表现为svm)

内核模块(整体表现为一个内核模块):

  • kvm:核心模块
  • kvm-intel(专用于intel的模块);kvm-amd(专用于amd的模块)

KVM模块载入后的系统的运行模式:

  • 内核模式:GuestOS(虚拟机操作系统)执行I/O类操作,或其它的特殊指令的操作;称作“来宾-内核”模式;
  • 用户模式:代表GuestOS请求I/O类操作;
  • 来宾模式:GuestOS的非I/O类操作;事实上,它被称作“来宾-用户”模式;
  • kvm hypervisor:host上的内核

2.kvm组件

两类组件

/dev/kvm:

  • 工作于hypervisor,在用户空间可通过ioctl()系统调用来完成VM创建、启动等管理功能;它是一个字符设备
  • 功能:创建VM、为VM分配内存、读写VCPU的寄存器、向VCPU注入中断、运行VCPU等等;

qemu进程:

  • 工作于用户空间,主要用于实现模拟PC机的IO设备;

3.kvm特性

特性

内存管理:

  • 将分配给VM的内存交换至SWAP;
  • 支持使用Huge Page(大内存页);
  • 支持使用Intel EPT或AMD RVI技术完成内存地址映射;(GVA-->GPA-->HPA 过渡到 GVA->HPA)
  • 支持KSM (Kernel Same-page Merging) 内核相同页面合并技术

硬件支持:

  • 取决于Linux内核;

存储:

  • 本地存储
  • 网络附加存储:
  • 存储区域网络:
  • 分布式存储:例如GlustFS

实时迁移:

支持的GuestOS(x86系统的服务器):

  • Linux, Windows, OpenBSD, FreeBSD, OpenSolaris;

设备驱动:

  • IO设备的完全虚拟化:模拟硬件
  • IO设备的半虚拟化:在GuestOS中安装驱动;virtio

    virtio-blk, virtio-net, virtio-pci, virtio-console, virtio-ballon

4.kvm局限性

一般局限性

  • CPU overcommit
  • 时间记录难以精确,依赖于时间同步机制

MAC地址:

  • VM量特别大时,存在冲突的可能性;
  • 实时迁移:
  • 性能局限性:

5.kvm工具栈

qemu:

  • qemu-kvm:主要作用是实现进程管理
  • qemu-img:用来管理磁盘映像文件

libvirt(cs架构)

kvm hypervisor:

  • 运行libvirtd守护进程

客户端工具管理接口

  • GUI:virt-manager, virt-viewer
  • CLI:virt-install, virsh

QEMU主要提供了以下几个部分:

  • 处理器模拟器
  • 仿真IO设备
  • 关联模拟的设备至真实设备;
  • 调试器
  • 与模拟器交互的用户接口

KVM安装及使用

1.安装前提

(1)确保CPU支持HVM

  • # grep -E --color=auto "(vmx|svm)" /proc/cpuinfo

(2)查看内核编译是否提供了kvm模块

  • # modinfo kvm

(3)装载模块

  • # modprobe kvm
  • # modprobe kvm-intel

(4)验正:

  • /dev/kvm 或者 lsmod |grep kvm

演示:

[[email protected] ~]# grep -E --color=auto "(vmx|svm)" /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust

[[email protected] ~]# modinfo kvm
filename:       /lib/modules/3.18.41-1.0-Taolinux/kernel/arch/x86/kvm/kvm.ko
license:        GPL
author:         Qumranet
srcversion:     2C2D9EC3889CB033C504EAE
depends:        
intree:         Y
vermagic:       3.18.41-1.0-Taolinux SMP mod_unload modversions 
signer:         Magrathea: Glacier signing key
sig_key:        13:F4:F1:CE:0F:1F:64:52:F0:D6:39:73:5A:ED:94:84:A4:DB:4B:20
sig_hashalgo:   sha256
parm:           ignore_msrs:bool
parm:           min_timer_period_us:uint
parm:           tsc_tolerance_ppm:uint
[[email protected] ~]# 
[[email protected] ~]# modprobe kvm
[[email protected] ~]# lsmod |grep kvm
kvm_intel             148404  0 
kvm                   466442  1 kvm_intel

[[email protected] ~]# ll /dev |grep kvm
crw------- 1 root root     10, 232 Mar 21 21:53 kvm


2.为KVM虚拟机配置桥接网络

方法一:

  • 直接在/etc/sysconfig/network-scripts 目录中创建桥接接口 ifcfg-br0

方法二:

  • 通过 virsh iface-bridge  命令创建桥接接口

virsh:

注意:

创建物理桥需要关闭NetworkManager服务,使用network服务来管理网络;

  • systemctl stop NatworkManager
  • systemctl disable NatworkManager

演示一:

1.编辑/etc/sysconfig/network-scripts 创建ifcfg-br0,然后修改相关配置如下:

[[email protected] network-scripts]# cp ifcfg-eno16777736 ifcfg-br0

#修改原来的网卡 eno16777736 作为交换机使用
# Generated by parse-kickstart
IPV6INIT=yes
IPV6_AUTOCONF=yes
BOOTPROTO=none
DEVICE=eno16777736
ONBOOT=yes
UUID=71d191d3-7396-4336-879d-a5c3deab705f
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="System eno16777736"
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
BRIDGE=br0  # 添加项

# 修改ifcfg-br0作为网卡使用
# Generated by parse-kickstart
IPV6INIT=yes
IPV6_AUTOCONF=yes
BOOTPROTO=none
DEVICE=br0   # 设备为br0
ONBOOT=yes
TYPE=Bridge  # 网卡类型为 Bridge
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
DNS1=192.168.1.1
DNS2=114.114.114.114
IPADDR=192.168.1.112
PREFIX=24
GATEWAY=192.168.1.1
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

2.重启网络,ifconfig查看如下

[[email protected] ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.112  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe21:c943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:c9:43  txqueuelen 0  (Ethernet)
        RX packets 31  bytes 3591 (3.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39  bytes 6221 (6.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:21:c9:43  txqueuelen 1000  (Ethernet)
        RX packets 1816  bytes 143756 (140.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 799  bytes 109966 (107.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

演示2:使用virsh 配置网络

[[email protected] network-scripts]# virsh iface-list   # 查看当前网卡
 Name                 State      MAC Address
---------------------------------------------------
 eno16777736          active     00:0c:29:21:c9:43
 lo                   active     00:00:00:00:00:00

[[email protected] network-scripts]# virsh iface-bridge eno16777736 br0 #创建物理桥eno16777736为br0
Created bridge br0 with attached device eno16777736

[[email protected] ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.112  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe21:c943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:c9:43  txqueuelen 0  (Ethernet)
        RX packets 66  bytes 7319 (7.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 66  bytes 11370 (11.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe21:c943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:c9:43  txqueuelen 1000  (Ethernet)
        RX packets 3954  bytes 335609 (327.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2648  bytes 417462 (407.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
[[email protected] ~]# virsh iface-list
 Name                 State      MAC Address
---------------------------------------------------
 br0                  active     00:0c:29:21:c9:43
 lo                   active     00:00:00:00:00:00


3.管理工具栈

# yum grouplist | grep -i "virtualization"

Virtualization:

  • qemu-kvm

Virtualization Client:

  • python-virtinst, virt-manager, virt-viewer

Virtualization Platform:

  • libvirt, libvirt-client

Virtualization Tools

  • libguestfs

libvirt工具栈

libvirt

  • 支持的虚拟化技术:KVM, XEN, VMWARE, Qemu,LXC, OpenVZ;

libvirt中的术语:

  • node: 指物理节点
  • hypervisor:支持虚拟机的运行环境
  • domain: 虚拟机

    dom0:特权域

    domU:非特权域

如下图:

安装并启动 libvirtd.service

  • # yum install libvirt libvirt-client python-virtinst virt-manager
  • centos 7: # yum install libvirt libvirt-client virt-install virt-manager virt-viewer

启动守护进程:

  • ~]# systemctl start libvirtd.service

libvirt和libvirtd的配置文件:

  • libvirt配置文件:/etc/libvirt/libvirt.conf
  • 守护进程配置文件:/etc/libvirt/libvirtd.conf

Hypervisor的访问路径:

本地URL:

  • driver[+transport]:///[path][?extral-param]

    driver: 驱动名称,例如 qemu, xen, lxc

    transport:传输方式

  • kvm使用qemu驱动,使用格式qemu:///system, 例如qemu:///system

远程URL:

  • driver[+transport]://[[email protected]][host][:port]/[path][?extral-param]

例如:

  • qemu://172.16.100.6/system
  • qemu+ssh://[email protected]/system
  • qemu+tcp://172.16.100.6/system

演示:virt-manager创建虚拟机

1.安装及启动守护进程 libvirtd.service

#安装
[[email protected] ~]# yum install libvirt libvirt-client virt-install virt-manager virt-viewer

#启动守护进程libvirtd.service
[[email protected] ~]# systemctl start libvirtd.service

2.执行 virt-manager启动图形化管理界面,此操作可以通过vnc或者xhell的xmanager实现,如下:

安装qemu-kvm(yum install qemu-kvm -y)并重启libvirtd.service(systemctl restart libvirtd.service)服务,再次执行virt-manager可以看到如下界面:






















原文地址:http://blog.51cto.com/1992tao/2091408

时间: 2024-07-29 22:40:29

KVM虚拟化技术(一)的相关文章

KVM虚拟化技术

KVM虚拟化技术 Qemu-kvm kvm Qemu-kvm创建和管理虚拟机 1.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor.KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上. KVM在具备Intel VT或AMD-V功能的x86平台上运行.它也被移植到S

深入浅出KVM虚拟化技术

深入浅出KVM虚拟化技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实虚拟化技术已经不是一个新技术了,上个世纪六十年代IBM公司已经在使用,只不过后来随着PC机的出现,虚拟化为最初的应用目的已经可用武之地了,但是随着X86系统的增多以及PC机性能的提升以及现在业务模式的需要,所以使得虚拟化技术再一次蓬勃发展起来.在上个世纪的1974年有2位很著名的教授Popek和Glodberg在一篇论文中定义了经典虚拟化应该至少满足三个需求: 1>.等价执行(除了资源可用性以及时间上

Linux下kvm虚拟化技术的安装与使用

Linux下kvm虚拟化技术的安装与使用 云时代的到来,虚拟化的广泛应用.让我们重新的科技进行了定义.而当下知名的虚拟化产品有 vmware vsphere ,Hyper-v,xen,kvm.vmware的虚拟化所占的市场有目共睹,Hyper-V是windows平台下的虚拟化,而Xen就属于一个半虚拟化产品.kvm就是我们今天所介绍的对象. (kvm是kernel virtual module的简写)kvm是红帽公司5.4版本后所推出的最新虚拟化技术产品.它和vpc,virtual  box都属

[转] KVM虚拟化技术生态环境介绍

KVM虚拟化技术生态环境介绍 http://xanpeng.github.io/wiki/virt/kvm-virtulization-echosystem-intro.html kvm和qemu/qemu-kvm的关系 qemu vs. qemu-kvm: 从qemu 1.3开始,kvm userspace code就维护在qemu mainline中(git clone https://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git, ref) qe

KVM虚拟化技术(二)KVM介绍

KVM:Kernel Virtual Machine KVM是基于虚拟化扩展的x86硬件,是Linux完全原生的全虚拟化解决方案.部分半虚拟化支持,主要是通过半虚拟网络驱动程序的形式用于Linux和Windows客户机系统的. KVM被设计为是一个内核模块,支持广泛的客户机操作系统:在KVM架构中,虚拟机实现为常规的Linux进程.这使KVM能够享受Linux内核的所有功能. KVM模块是KVM虚拟机的核心部分.其主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟机客户机运行在虚拟机模式下,

kvm虚拟化技术应用实战

本文根据上课笔记整理,大家都知道云计算的基础就是虚拟化,而开源的虚拟化基本以kvm技术为主导,因此kvm技术已成为运维工程师必备的技术,也是云时代必不可少的技术 在介绍kvm之前 我们先来了解一下vnc这个软件,后面安装kvm需要vnc来支持 1.vnc的安装及使用 # yum -y install tigervnc-server 首次启动 # vncserver :1 会提示输入两次密码 然后编辑/root/.vnc/xstartup,将最后一行twm替换为gnome-session或者sta

KVM虚拟化技术(一)虚拟化简介

一 .虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率. 虚拟化的类型: 全虚拟化 半虚拟化(涉及修改guestos内核,因此仅支持开源kernel的系统) 硬件辅助虚拟化(主板上开启虚拟化支持) 几种虚拟化软件简介 KVM 完全虚拟化 架构:寄居架构(linux

KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机

一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor.KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上. KVM在具备Intel VT或AMD-V功能的x86平台上运行.它也被移植到S/390,PowerPC与IA-64平台上.在Linux内核3.9版中,加入A

KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

接上篇博文继续 一.使用virt-manager创建和管理虚拟机 1.使用VNC Viewer连接进入虚拟化平台主机 2.打开终端输入virt-manager命令启动virt-manager虚拟机管理界面 #virt-manager 3.通过virt-manager安装CentOS 6.6的虚拟机 点击如图所示图标新建虚拟机: 选择PXE引导,我的网络内存在一个系统自动化部署服务器: 选择操作系统类型和版本: 设置内存和CPU个数: 设置硬盘大小,这里采用动态扩展磁盘空间方式: 忽略这个错误,由