欢迎您访问潘星教育网资源平台!
潘星教育网>职场动态>实用文档>正文

实用文档之虚拟化的优势_虚拟化技术的应用

更新时间:2021-12-06 20:00:17作者:潘星教育网阅读量:111

1、 虚拟化简介

  1) 系统虚拟化是将底层物理设备与上层操作系统、软件分离的一 种去耦合技术,在一台物理机器上逻辑的划分出多台机器。

  2) 虚拟化的目标是实现IT资源利用效率和灵活性的最大化。在一台物理主机上虚拟出多个虚拟计算机(虚拟机,Virtual Machine,VM),其上能同时运行多个独立的操作系统,这些客户操作系统(Guest OS)通过虚拟机管理器(Virtual Machine Monitor,VMM,也称作Hypervisor)访问实际的物理资源。

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

2、 使用虚拟化的原因

  当公司的服务器越来越多,我们需要充分利用资源,也需要统一运维管理,这时虚拟化能帮助我们做很多事。总结如下:

  1) 打破"一台服务器对应一套应用"的模 式,将物理服务器进行整合,提升利用 率

  2) 服务器和相关IT硬件更少,节省了机房空间,也减少了散热和电力需求

  3) 具备灵活数据备份和应用迁移机制,保障服务永不中断

  4) 资源动态调配和模板化部署,应用系统快速上线,及时响应业务变化。

实用文档之虚拟化的优势

3、 虚拟化的分类

  1) 全虚拟化(使用二进制翻译的虚拟化,hypervisor将操作系统的指令翻译并将结果缓存,供之后使用。而用户级指令无需修改就运行,具有和物理机一样的执行速度。客户系统不知道自己在虚拟环境中)

  2) 半虚拟化(半虚拟化指的是虚拟机系统和hypervisor通过交互来改善性能和效率,但需要修改客户机操作系统。客户系统知道自己在虚拟环境中。如Xen)

  3) 硬件辅助的虚拟化(Intel虚拟化技术(VT-x)和AMD的AMD-V,通过硬件的辅助实现全虚拟化)

4、 三种虚拟化的区别4.1、cpu的ring

  在介绍三种虚拟化的区别前,首先要明白cpu的ring级别。

  Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。

  RING0级别最高,级别依次往下降。

  操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问设备等等。

  应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数)。

  执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。

  那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,那肯定不行啊,没权限啊,玩不转啊。所以这时候虚拟机管理程序(VMM)就要避免这件事情发生。

  (VMM在ring0上,一般以驱动程序的形式体现,驱动程序都是工作在ring0上,否则驱动不了设备)

实用文档之虚拟化的优势

4.2、全虚拟化

  1) 客户操作系统执行特权指令时,会触发异常(CPU机制,没权限的指令,触发异常)

  2) 然后VMM捕获这个异常,在异常里面做翻译,模拟。并且会缓存翻译结果

  3) 最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。

  全虚拟化中,虽然用户级指令具有和物理机一样的执行速度。但系统级指令整个过程下来,性能损耗非常的大。因为一条简单的指令在宿主机上直接执行就行了,现在在gues os上却要通过复杂的异常处理过程。

4.3、半虚拟化

  半虚拟化的思想是:让客户操作系统知道自己是在虚拟机上跑的,工作在非ring0状态,那么它原先在物理机上执行的一些特权指令,就会修改成其他方式,这种方式是可以和VMM约定好的。

  这就相当于,我通过修改代码把操作系统移植到一种新的架构上来,就是定制化。所以像XEN这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、mips、arm这些内核版本等价。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为什么XEN只支持虚拟化Linux,无法虚拟化windows原因,因为微软不改代码。

4.4、硬件辅助的虚拟化

  由于CPU厂商开始支持虚拟化了,所以出现了硬件辅助的虚拟化。拿X86 CPU来说,引入了Intel-VT 技术,支持Intel-VT 的CPU,有VMX root operation 和 VMX non-root operation两种模式,两种模式都支持Ring 0 ~ Ring 3 这 4 个运行级别。这下好了,VMM可以运行在VMX root operation模式下,客户OS运行在VMX non-root operation模式下。即是宿主机和虚机是运行在同样硬件上的不同模式,也就说,在硬件这层做了些区分,这样全虚拟化下,有些靠"捕获异常-翻译-模拟"的实现就不需要了。

4.5、参考文档

  全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念? ()

  cpu的ring0、ring1、ring2、ring3 ()

5、 宿主机和虚机对虚拟化的理解

  1) 开启了硬件辅助虚拟化后,虚拟化是通过在Guest机器和Host机器中间加一层Hypervisor实现的。

  2) Host机器看虚机像跑在自己上面的程序

  3) 由于Hypervisor帮助Guest访问物理资源,Guest机器感觉自己运行在真机上

  4) 如果Host机器和Guest机器都跑相同的Linux,它们的Kernel都想运行在Ring 0。

6、 虚拟化技术

  虚拟化技术很常见的有VMWare、VirtualBox、Citrix Xen、kvm等

6.1、桌面虚拟化

  将原本在本地电脑安装的桌面系统,统一在后端数据中心进行部署和管理; 用户可以通过任何设备,在任何地点,任何时间访问属于自己的桌面系统环境。

6.2、服务器虚拟化

  1) 全虚拟化(Full-Virtulization):

  无需修改操作系统,VM ESXi、Linux KVM

  2) 半虚拟化(Para-Virtulization):

  集成半虚拟化代码,直接运行特权指令,性能接近物理机,需要修改操作系统, MS Hyper-V、 Ctrix Xen、IBM PowerVM

  3) 操作系统层虚拟化

  开发、测试环境,VM Workstation、VM Server

7、 kvm,Qemu,Libvirt的关系7.1、Hypervisor的分类

  首先,hypervisor 可以划分为两大类:

  1) 类型 1,这种 hypervisor 是直接运行在物理硬件之上的。例子是基于内核的虚拟机(KVM —— 它本身是一个基于操作系统的 hypervisor)。

  2) 类型 2,这种 hypervisor 运行在另一个操作系统中。类型 2 hypervisor 包括 QEMU 和 WINE。

7.2、kvm,Qemu,Libvirt

先总结:

  我们平时在linux上用到的kvm,实际是Qemu-Kvm组成的Hypervisor。Hypervisor是虚拟机管理器。虚机跑在Hypervisor虚拟出来的环境上。

  而Libvirt是个工具包。它可以管理Hypervisor。它的virsh命令,调用了它的libvirtd进程。它的libvirtd进程又回去调用Hypervisor。最后由Hypervisor实现对虚机的调控

QEMU

  Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。

  正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低。

KVM

  KVM是linux内核的模块。它采用硬件辅助虚拟化技术Intel-VT,AMD-V以获得CPU的支持。采用如Intel的EPT和AMD的RVI技术以获得内存的支持。Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口。见如下伪代码:

  KVM内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完成的虚拟化技术,这就是下面要说的qemu-kvm。

Qemu-kvm

  Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。

  Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。

实用文档之虚拟化的优势

Libvirt

  Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。

  libvirt包括一个API库,一个守护进程(Libvirtd),和一个命令行实用程序(virsh)。

  Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机

实用文档之虚拟化的优势

7.3、参考文档

  qemu支持的硬盘格式

  ()

  深入浅出 kvm qemu libvirt

  ()

8、 kvm配置8.1、安装软件包

  复杂版:yum install qemu-kvm qemu-img virt-manager libvirt libvirt- ibvirt-client virt-install virt-viewer bridge-utils

  简介版:yum install qemu-kvm qemu-kvm-tools libvirt

  qemu-kvm:qemu模拟器

  qemu-img:qemu的磁盘管理器

  virt-install:用来创建虚拟机的命令行工具

  virt-manager:GUI虚拟机管理工具

  libvirt:提供libvirtd daemon来管理虚拟机和控制hypervisor

  libvirt-Python:基于libvirt API的python语言绑定工具包,通过该包可以实现对KVM日常管理和监控数据的获取

  libvirt-client:提供客户端API用来访问server和提供管理虚拟机命令行工具的virsh实体

  virt-install:是一个命令行工具,它能够为KVM、Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装

  virt-viewer:图形控制台

  bridge-utils:创建和管理桥接设备的工具

8.2、检查内核模块嵌入

  # 检查嵌入

  lsmod | grep kvm

  kvm_intel 55496 0

  kvm 337900 1 kvm_intel

  # 嵌入命令

  modprobe kvm

  modprobe kvm-intel

8.3、创建安装盘

  qemu-img create –f qcow2 /xx/xx/name 10G

8.4、创建虚拟机

  virt-install --virt-type kvm \

  --name CentOS-7 \

  --ram 1024 \

  --vcpus 1 \

  --cdrom=/data/kvmtest/CentOS-7-x86_64-Minimal-1804.iso \

  --disk path=/data/kvmtest/CentOS-7.qcow2 \

  --network network=default \

  --graphics vnc,listen=0.0.0.0 --noautoconsole \

  --os-type=linux \

  --os-variant=rhel7

virt-install参数详解

  --virt-type:使用的hypervisor,如kvm、qemu、xen等

  -n NAME, --name=NAME:虚拟机名称,需全局惟一;

  -r MEMORY, --ram=MEMORY:虚拟机内在大小,单位为MB;

  --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU个数及相关配置;

  -c CDROM, --cdrom=CDROM:光盘安装介质;

  --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模式中常用;

  --network=NETWORK:将虚拟机连入宿主机的网络中,其中NETWORK可以为:

  · bridge=BRIDGE:连接至名为"BRIDEG"的桥设备;

  · network=NAME:连接至名为"NAME"的网络;

  --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;

  TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc; 如果选择spice,则需要linux图形界面的支持

  port: TYPE为vnc或spice时其监听的端口;

  listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值;

  password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;

  --noautoconsole:禁止自动连接至虚拟机的控制台;

  --os-type=DISTRO_TYPE:操作系统类型,如Linux、unix或windows等;

  --os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等

# 不常用的,了解

  --cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;

  -l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;

  --pxe:基于PXE完成安装; --livecd: 把光盘当作LiveCD;

  -x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,

  --extra-args "ks=https://172.16.0.1/class.cfg"

  --boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如: --boot cdrom,hd,network:指定引导次序;

  --boot kernel=KERNEL,initrd=INITRD,kernel_args="console=/dev/ttyS0":指定启动系统的内核及initrd文件;

8.5、VNC安装

  因为上面指定的是用VNC显示图形界面。所以下载一个VNC viewer,连上IP:5900,进行图形化安装。安装完成后就可以正常操作了

8.6、安装电源模块

  yum install acpid

  ACPI是Advanced Configuration and PowerInterface缩写,高级配置和电源管理接口。

  acpid中的d则代表daemon。Acpid是一个的服务进程,它充当linux与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。

  如果没有这个服务,是不能virsh shutdown 掉虚机的

8.7、KVM的xml文件

  xml文件是虚机的配置文件。里面有虚机名,磁盘大小,vcpu,ram,networ等等的信息。我们通过xml文件可以了解到虚机的整个基础配置。还可以通过复制xml文件,用define命令生成新的虚机

  <domain type = 'kvm'> //虚拟机类型,kvm

   <name>demo</name> //虚拟机名称

   <memory>1048576</memory> //分配内存,单位kb

   <vcpu>1</vcpu> //分配vcpu,单位个数

   <os>

   <type arch = 'x86_64'machine = 'pc'>hvm</type>

   <bootdev = 'cdrom'/> //cd 启动

   <bootdev = 'hd'/> //硬盘启动

   </os>

   <features>

   <acpi/>

   <apic/>

   <pae/>

   </features>

   <clock offset = 'localtime'/>

   <on_poweroff>destroy</on_poweroff>

   <on_reboot>restart</on_reboot>

   <on_crash>destroy</on_crash>

   <devices>

   <emulator>/usr/bin/kvm</emulator>

   <disk type = 'file'device = 'disk'> //对应的镜像,就是之前使用qemu-img命令新建的img文件,注意路径要正确

   <driver name = 'qemu'type = 'raw'/>

   <sourcefile = '/var/lib/lynn/img/template.img'/>

   <target dev = 'hda'bus = 'ide'/>

   </disk>

   <disk type = 'file'device = 'cdrom'> //可选项,iso通常是操作系统的安装光盘

   <source file = '/var/lib/lynn/img/template.iso'/>

   <target dev = 'hdb'bus = 'ide'/>

   </disk>

   <interface type = 'bridge'> //libvirt默认虚拟机的网络配置是NAT模式,就是虚拟机与宿主机的网络拓扑是NAT形式。实际中,许多开发者更希望使用网桥模式。

   <source bridge = 'br0'/>

   </interface>

   <input type ='tablet'bus='usb'/>

   <input type = 'mouse'bus = 'ps2'/>

   <graphics type = 'vnc'port = '-1'listen = '0.0.0.0'keymap = 'en-us'/> //vnc端口系统自动配置

   </devices>

  </domain>

8.8、网络配置1、将网络由vibr0桥接,变为br0桥接

  在最初创建虚机时,设置虚机的网络是"network=default"。让虚机连入名为default的网络。当时我们也可设置"network=bridge_name",让虚机连入桥设备。但我们没有这样做,所以现在虚机是连在virbr0桥设备上的。

  1) vibr0是什么

  vibr0是KVM默认创建的一个Bridge,它为连接其上的虚机网卡提供NAT访问外网的功能。virbr0默认会被分配一个IP地址,并为连接其上的其他KVM虚拟网卡提供DHCP服务(dnsmasq服务)。此时,虚机网络为NAT模式,访问外部网络简单,但外部网络不能访问进来

  2) br0桥接

  这里的br0桥接,就是将虚机的网络模式变为桥接模式。这样虚机与宿主机处于同一网络环境,类似于一台真实的宿主机。操作如下:

  (1) 宿主机操作

  brctl show #查看桥接连接

  brctl addbr br0 #新建桥接连接

  brctl addif br0 eth0 #将eth0网卡,绑到br0桥设备上

  ip addr del dev eth0 192.168.56.11/24 #删除eth0网卡的IP地址

  ifconfig br0 192.168.56.11/24 up #将eth0网卡的IP,配到br0上

  route add default gw 192.168.56.2 #配置默认网关

  修改KVM的xml文件(把端口类型改为bridge,源端口改为br0)

实用文档之虚拟化的优势

  (2) 进入KVM虚机,为其配置网卡IP

  BOOTPROTO=staic

  IPADDR=192.168.56.111 (与宿主机同网段)

  NETMASK=255.255.255.0

  GATEWAY=192.168.56.2

2、创建VLAN

  vconfig add eth0 10 # 创建VLAN (/proc/net/vlan/config)10,并将eth0加入VLAN

  brctl addbr br10 # 创建网桥

  brctl addif br10 eth0.10 # 将eth0绑到网桥

  brctl addif br10 vnet0 # 将KVM虚机的网卡 加入网桥br10

3、参考文档

  Linux系统配置kvm+vlan

  ()

  KVM虚拟机网络配置 Bridge方式,NAT方式

  ()

  KVM 虚拟机的网络模式学习及配置

  ()

8.7、KVM与宿主机的关系

  KVM在Linux中是一个进程的表现形式,它受的到CPU的调度

  Libvirt是管理kvm的工具,关掉Libvird服务,不影响KVM虚机的正常运行,只是无法用libvirt管理而已

9、 virsh命令

  virsh命令,调用libvid,Libvirtd调用qemu-kvm操作虚拟机。通过virsh命令,我们可以实现在CLI对虚拟机的管理

  virsh有命令模式和交互模式。

  · 命令模式:直接在virsh后面接参数

  · 交互模式:直接写virsh。

  · 事实上交互模式和命令的参数都是一样的

9.1、常用命令

  list

  显示显示本地活动虚拟机

  -all:显示本地所有的虚拟机

  creat KVM_name.xml

  创建虚机(创建后,虚机立即执行。虚机关机后自动消失)

  define KVM_name.xml

  通过配置文件定义一个虚机。(定以后虚机不是活动的)

  start KVM_name

  启动虚机

  console KVM_name

  连接虚机 【KVM 通过virsh console连入虚拟机】

  suspend KVM_name

  暂停虚机,虚拟机处于paused暂停状态

  但是仍然消耗资源,只不过不被超级管理程序调度而已。

  resume KVM_name

  唤醒虚机

  shutdown KVM_name

  正常关闭虚机

  destroy KVM_name

  强制关闭虚机,并删除

  libvirt直接销毁demo,取消demo的定义

  undefine KVM_name

  移除虚拟机

  在虚拟机处于Running状态时,调用该指令,该指令暂时不生效

  但是当虚拟机被关闭后,该指令生效移除该虚拟机,也可以在该指令生效之前调用define+TestKVM.xml取消该指令

9.2、显示虚机信息命令

  dominfo KVM_name

  显示虚机的基本信息

  dumpxml KVM_name

  显示虚机的当前配置文件

  dump KVM_name file

  将虚机的配置文件重定向到file

  domiflist KVM_name

  列出虚机网卡接口

  domifstat KVM_name vnet0

  显示网卡信息

  domuuid KVM_name

  显示虚机UUID

  domid KVM_name/UUID

  显示虚机ID

  cpu-stats KVM_name

  显示虚机CPU状态

  vncdisplay

  显示虚机的IP

9.3、更改虚机

  exit KVM_name

  编辑虚机的配置文件

  setmen KVM_name size

  设置虚机内存。要求虚机不活动

  setvcpus KVM_name num

  设置虚机的虚拟CPU个数。要求虚机不活动

  autostart KVM_name

  虚机将随宿主机一起启动

  --disable KVM_name:取消自动启动

9.4、参考文档

  virsh的详细命令解析 (https://blog.csdn.net/xxoo00xx00/article/details/49802367)

版权声明:部分内容为互联网整合,文中观点不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件举报,一经查实,本站将立刻删除。

为您推荐

职场忠诚技能_职场忠诚度

一个人在职场上能够取得什么样的成绩,能够走多远,决定因素很多。无论是什么样的环境,以适当的方式表达忠诚、勇于承担责任和能够进行

04-06

职场特殊技能_职场特殊技能有哪些

情绪会传染,你相信吗?情绪是人对客观事物的一种反应,承载着人的喜怒哀乐。人们总是受到情绪的影响,或是自己的或是别人的,总之,不可否认

04-06

上强国解锁职场必备技能

俗话说:活到老,学到老,那我们走出学校进入职场该如何提升自己呢?上学习强国,帮职场的你学文化、学技能、搞定资格考试。1打开学习强国

04-06

职场必备22种技能_职场必备的十种能力

对于刚入职场的人来说,职场规则,职场误区是最需要知道的,对于有一定经验的职场人士来说,就应该学会一些基础的职场技能,对于一些有经验

04-06

职场总结技能_提高职场适应能力的总结

点击右上角【关注】霸王课头条号,收获更多加薪秘籍。本文共2087字,阅读全文约4分钟一进入11月,感觉周围的朋友都忙了起来。有的项目

04-06

对于初入职场的你要学会这些技能_职场新人应该把什么列为绝对必要的工作技能

当你初入职场,你的同事问你,你们家里有多少人?你房子买在哪里有多大呀?你父母有没有退休金?你的对象是干什么的?有没有兄弟姐妹?家里有没

04-06