linux云计算--KVM虚拟化技术(cpu内存) 制作lvm镜像 kwm上安装centos7系统

   2023-02-09 学习力0
核心提示:KVM虚拟化技术(cpu内存) 制作lvm镜像 kwm上安装centos7系统1.CPU 虚拟化1.KVM中VCPU与ThreadKVM中每一个Guest OS都是一个标准的Linux进程(qemu-kvm进程)Guest OS中的 vCPU 是 qemu-kvm 进程派生的线程Guest OS中的内存是 qemu-kvm 进程的地址空间的一部分K

KVM虚拟化技术(cpu内存) 制作lvm镜像 kwm上安装centos7系统

1.CPU 虚拟化

1.KVM中VCPU与Thread

KVM中每一个Guest OS都是一个标准的Linux进程(qemu-kvm进程)

Guest OS中的 vCPU 是 qemu-kvm 进程派生的线程

Guest OS中的内存是 qemu-kvm 进程的地址空间的一部分

KVM 虚拟机包括  虚拟内存、虚拟CPU和虚拟机I/O设备,其中内存和 CPU 的虚拟化由 KVM 内核模块负责实现,I/O 设备的虚拟化由 qemu 负责实现。

 

 

2.KVM中VCPU与Thread 查看进程和线程 KVM设备状态

一个 KVM 虚拟机即一个 Linux qemu-kvm 进程,与其他 Linux 进程一样被Linux 进程调度器调度。

如上例:

pstree命令查看,一个计算节点中有2个qemu-kvm进程,即2台虚拟机,

或者

ps aux|grep 虚机名字 查看到qemu-kvm进程

一个虚拟cpu对应一个线程

 

virsh list --all

ps -TP 2951查看线程

ps aux| grep qemu查看进程

ps aux| grep qemu-kvm

 

 

 

 

 

pstree查看进程

 

 

 

 

 

 

3.KVM中VCPU与Thread

虚机中的每一个虚拟 vCPU 则对应 qemu-kvm 进程中的一个线程。

 

 

 

 

 

宿主机有两个物理 CPU,上面起了两个虚机 VM1 和 VM2。

VM1 有两个 vCPU,VM2有 4 个 vCPU。

可以看到 VM1 和 VM2 分别有两个和 4 个线程在两个物理 CPU 上调度。

 

4.资源 over-commit (资源过载)

 

 

 

 

 

 

 

 

 

 

2.内存虚拟化 原理 实现方式 技术 内存过载

1.内存虚拟化基本原理

KVM 为了在一台机器上运行多个虚拟机,需要增加一个新的内存虚拟化层

也就是说,必须虚拟 MMU(内存管理单元 )来支持客户操作系统来实现 VA -> PA -> MA 的翻译。

客户操作系统继续控制虚拟地址到客户内存物理地址的映射 VA -> PA),但是客户操作系统不能直

接访问实际机器内存,因此VMM (KVM)需要负责映射客户物理内存到实际机器内存 (PA -> MA)。

 

 

 

 

 

 

 

2.内存虚拟化实现方式

软件方式:通过软件实现内存地址的翻译,比如 Shadow page table (影子页表)技术。

硬件实现:基于 CPU 的辅助虚拟化功能,比如 AMD 的 NPT (Nested Page Tables)和 Intel 的EPT (Extended Page Tables)技术。

 

KVM 实现客户机内存的方式是,qemu主线程的虚拟地址空间中声明一段连续的大小的空间用于保存客户机与物理内存之间的映射关系。

 

 

 

 

 

 

3.内存虚拟化实现技术

KSM (Kernel Samepage Merging)技术

linux内核2.6.32引入了KSM(内存管理合并相同页)允许这个系统管理程序通过合并内存页面来增加并发虚拟机的数量。

VMware 的 ESX 服务器系统管理程序将这个特性命名为Transparent Page Sharing (TPS),而 XEN 将其称为 MemoryCoW。

不管采用哪种名称和实现,这个特性都提供了更好的内存利用率,从而允许操作系统(KVM 的系统管理程序)过量使用内存,支持更多的应用程序或 VM。

 

Huge Page技术

这是KVM虚拟机的又一个优化技术

Intel 的x86 CPU通常使用4Kb内存页,当是经过配置,也能够使用巨页(huge page):(4MB on x86_32, 2MB on x86_64 and x86_32 PAE)

使用巨页,KVM的虚拟机的页表将使用更少的内存,并且将提高CPU的效率。最高情况下,可以提高20%的效率!

 

 

Ballooning技术

4.内存Ballooning简介

 

通常来说,要改变客户机占用的宿主机内存,是要先关闭客户机,修改启动时的内存配置,然后重启客户机才能实现。而内存的ballooning(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。

 

Ballooning技术形象地在客户机占用的内存中引入气球(Balloon)的概念,气球中的内存是可以供宿主机使用的,

所以,当宿主机内存使用紧张,空余内存不多时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放其空闲的内存,此时若客户机空闲内存不足,可能还会回收部分使用中的内存,可能会换出部分内存到客户机的交换分区(swap)中,从而使得内存气球充气膨胀,从而让宿主机回收气球中的内存可用于其他进程(或其他客户机)。

反之,当客户机中内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。

 

很多现代的虚拟机,如KVM、Xen、VMware等,都对Ballooning技术提供支持。

 

5.内存过载Over Commit

客户机中内存总数>宿主机物理内存总数;

 

如下三种方式实现内存的过载使用

1. 内存交换(swapping):借助交换空间弥补内存的不足(技术成熟,但效率低)

2. 气球(balloonning):根据实际需要自动收缩

3. 页共享(page sharing):通过KSM(Kernel Samepage Merging)合并多个客户机进程使用的相同内存页

 

内存过载使用经验:

若某服务器有32GB物理内存,打算在其上运行64个内存为1GB的客户机。

宿主机中,大约需4GB大小内存满足宿主机自身运行要求,

客户机所需的交换分区为:64*1GB+4GB-32GB=36GB。

根据Redhat建议,对于32GB物理内存的Redhat系统,推荐使用8GB的交换分区。

所以,在宿主机中总共需要44GB36GB+8GB)的交换分区以满足安全的实现客户机内存的过载使用

 

 

3.KVM存储虚拟化概念  类型 目录位置

1.KVM存储虚拟化

KVM 的存储虚拟化是通过  存储池(Storage Pool)和  卷(Volume)来管理的。

 

Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型

Volume是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机

Volume 在虚拟机中看到的就是一块硬盘。

 

2.文件目录最常用的 Storage Pool 类型。目录类型的 Storage Pool

/var/lib/libvirt/images/ KVM 将宿主机目录作为默认的 Storage Pool。

 

 

3.volume 是什么对于 cirros 来说,就是它的启动磁盘了。

一个磁盘镜像文件就是一个 Volume

之前创建虚机 cirros 的时候,是将镜像文件 cirros-0.3.5-x8664- disk.img 放到/root目录下,

文件 cirros-0.3.5-x8664-disk.img 也就是Volume,对于 cirros 来说,就是它的启动磁盘了。

 

 

 

 

1.KVM存储 虚拟化磁盘文件 默认位置 /var/lib/libvirt/images

/var/lib/libvirt/images KVM 把这个目录当做 默认 Storage Pool磁盘文件

/etc/libvirt/storage 定义KVM的磁盘文件

 

实际上 KVM 所有可以使用的 Storage Pool 都定义在宿主机的/etc/libvirt/storage 目录下

每个 Pool 一个 xml 文件,默认有一个 default.xml,

 

 

 

 

 

 

注意:

Storage Pool 的类型 “dir”,目录的路径就是 /var/lib/libvirt/images。

2.KWM虚拟机 增加新的磁盘

为虚机 cirros 添加一个新的磁盘

/var/lib/libvirt/images/ 下多了一个 2G 的文件 generic-2.qcow2

 

 

 

 

 

点开小灯泡 下面添加硬件  添加存储

设置大小 文件格式 即可

 

 

 

 

 

 

3*.raw qcow2 vmdk 镜像格式  优点

使用文件做 Volume 有很多优点:存储方便、移植性好、可复制、可远程访问。

 

远程访问的意思是镜像文件不一定都放置到宿主机本地文件系统中,也可以存储在通过网络连接的远程文件系统,比如 NFS,或者是分布式文件系统中,比如 GlusterFS。

这样镜像文件就可以在多个宿主机之间共享,便于虚机在不同宿主机之间做 Live Migration;

如果是分布式文件系统,多副本的特性还可以保证镜像文件的高可用。

 

常见的镜像格式:

1.raw 默认格式即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。

2.qcow2 是推荐使用的格式,cow 表示 copy on write,能够节省磁盘空间,支持 AES 加密,支持zlib 压缩, 支持多快照,

3.vmdk VMWare 的虚拟磁盘格式,也就是说 VMWare 虚机可以直接在 KVM上 运行。

 

4.虚拟机镜像格式 raw优点,缺点

raw

(default) the raw format is a plain binary image of the disc image, and is very portable. On file systems that support sparse files, images in this format only use the space

actually used by the data recorded in them.

 

优点:简单、性能好、支持稀疏文件、可以追加磁盘空间

缺点:无法做快照、无法压缩

 

 

1.COW 写时复制 优点

写入时复制(Copy-on-write)是一个  被使用 在程序设计领域 的最佳化策略。

如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,

直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制一个副本(private copy)给该呼叫者,

以避免被修改的资源被直接察觉到,这过程对其他的呼叫者都是通透的(transparently)。

 

优点 :如果呼叫者并没有修改该资源,就不会有副本(private copy)被建立。

 

 

 

 

 

 

 

 

2.虚拟机镜像格式 四代 英文

cow

copy-on-write format, supported for historical reasons only and not available to QEMU onWindows.

 

qcow

the old QEMU copy-on-write format, supported for historical reasons and superseded by

qcow2.(一代的qemu的cow格式,性能不如raw格式,目前已经被qcow2取代)

 

qcow2

QEMU copy-on-write format with a range of special features, including the ability to take multiplesnapshots, smaller images on filesystems that don’t support sparse files, optional AES encryption,and optional zlib compression.

 

qcow3

The proposal for qcow3 is different: It includes a version number increase in order to introducesome incompatible features, however it\'s strictly an extension of qcow2 and keeps thefundamental structure unchanged, so that a single codebase will be enough for working with bothqcow2 and qcow3 images. Internally, qcow will have a single driver for both qcow2 and qcow3images, so it\'s an option to continue letting users know the format as "qcow2", just with anadditional flag that can be set on image creation andspecifies which version number should beused (and therefore, which features should be available).

 

 

 

 

 

 

 

3.虚拟机镜像格式 vmdk vdi 介绍

vmdk

VMware 3 & 4, or 6 image format, for exchanging images with that product

VMware的格式,从性能和功能上来说,vmdk应该算最出色的,

由于vmdk结合了VMware的很多能力,目前来看,KVM和XEN使用这种格式的情况不多。

 

vdi

VirtualBox 1.1 compatible image format, for exchanging images with VirtualBox. 单纯从能力上看vdi在VirtualBox上的表现出色。适合workstation级别的产品。

 

 

4.虚拟机镜像格式 raw 和qcow2 对比  转换

 

 

 

 

 

 

5.采用文件制作镜像 6条优点

1)存储方便,在一个物理存储设备上可以存放多个镜像文件

2)使用方便管理多个文件比管理多个磁盘、分区、逻辑分区等都要方便

3)移动方便,可以方便地将镜像文件移动到另一个本地或远程的物理存储系统中

4)复制方便,直接拷贝,供其他客户机使用

5)稀疏文件可以节约磁盘空间仅当实际写入时分配空间

6)网络远程访问,镜像文件可以方便地存储在通过网络连接的远程文件系统中(NFS)

 

不仅一个文件可以分配给客户机作为镜像文件系统,一个完整的磁盘或者LVM分区也可以作为镜像分配给客户机使用。

磁盘分区、LVM分区由于没有磁盘的MBR引导记录,不能作为客户机的启动镜像,只能作为客户机附属的非启动块设备。

 

 

5.LVM作为storage pool 创建PV VG LV 案例

宿主机上的 VG 就是一个 Storage Pool,VG 中的 LV 就是 Volume。

 

步骤思路

1.加一块磁盘 作为新vg

2.创建了一个 Storage Pool 的定义文件 /etc/libvirt/storage/vg1.xml,

3.通过 virsh 命令创建新的 Storage Pool “vg1”

4.启用这个 vg1

 

1.宿主机VMware添加一块硬盘/dev/sdb硬盘

 

 

 

 

 

 

lsblk查看所有磁盘

 

 

 

 

 

注意 :运行时添加后无法识别,

执行命令echo \'- - -\' > /sys/class/scsi_host/host0/scan后,在fdisk -l查看即可。

 

 

 

 

 

 

 

 

 

2.给/dev/sdb分区创建pv vg lv

pvcreate /dev/sdbsbd全给pv使用

注意 sdb可以分区fdisk /dev/sdb --- n --- l --- w

 

vgcreate vg1 /dev/sdb创建vg

vgs查看vg

 

lvcreate -L 10G -n lv1 /dev/vg1创建lv

lvs查看lv

 

 

 

 

 

 

3.配置文件vg1 .xml  再去定义 启动  查看所有virsh虚拟机和状态

cd /etc/libvirt/storage/

ls

cp default.xml  vg1.xml复制xml 修改即可

vim vg1.xml

 

 

 

 

 

<pool type=\'logical\'>

<name>vg1</name>

<uuid>21cdb1d6-9d11-49d2-8ac3-62712abb6954</uuid>

<capacity unit=\'bytes\'>0</capacity>

<allocation unit=\'bytes\'>0</allocation>

<available unit=\'bytes\'>0</available>

<source>

<name>vg1</name>

<format type=\'lvm2\'/>

</source>

<target>

<path>/dev/vg1/lv1</path>

</target>

</pool>

 

 

 

virsh pool-define vg1.xml定义VG1

 

 

 

 

 

virsh pool-start vg1启动

virsh pool-list --all查看所有

virsh pool-autostart vg1或者设置自启

 

4.在 virt-manager 中为虚机 centos7.0 添加 lv1的虚拟磁盘了

提示:

虚机得是关机的状态才能使用。添加完成后,进入虚拟机验证。

 

 

 

 

 

6.qemu-img基本用法  存储虚拟化实战-镜像制作、格式转换 案例

qemu-img是QEMU的磁盘管理工具,也是QEMU/KVM使用过程中一个比较重要的工具。

 

1.创建虚拟机镜像   创建磁盘镜像

mkdir test 创建目录

cd test

create(创建磁盘)qemu-img create -f raw test.raw 1G k/K、M、G、T)

 

qemu-img create -f raw test.raw 1G     创建虚拟机镜像

qemu-img info test.raw   查看虚拟机镜像文件

 

 

 

 

2.指定后端文件

qcow2为后端文件,tmp只记录操作过程,即与后端文件的差异,采用commit  tmp可以将修改提交至后端文件

 

qemu-img create -f qcow2 -o backing_file=test.raw test_tmp  指定后端文件

qemu-img info test_tmp  查看虚拟机镜像文件

 

 

 

 

 

改变后端文件

ll -lh       查看大小

qemu-img create -f qcow2 test_2.qcow2 2G      创建test_2.qcow2镜像文件作为后端文件

qemu-img info test_tmp查看镜像文件

qemu-img rebase test_tmp -b test_2.qcow2     改变 镜像文件 test_tmp后端文件为test_2.qcow2

qemu-img info test_tmp           查看镜像文件

 

 

3.转化镜像格式convert(磁盘格式转换)

支持不同格式的镜像文件之间的转换,可以将vmdk格式的文件转换为qcow2文件,这对从其他虚拟化方案转移到KVM上的用户非常有用。

一般来说,输入文件格式fmt由qemu-img工具自动检测到,而输出文件格式output_fmt根据自己需要来指定,默认会被转换为与raw文件格式(且默认使用稀疏文件的方式存储以节省存储空间)。如果使用qcow2、qcow、cow等作为输出文件格式来转换raw格式的镜像文件(非稀疏文件格式),镜像转换还可以起到将镜像文件转化为更小的镜像,因为它可以将空的扇区删除使之在生成的输出文件中并不存在。

 

qemu-img create -f raw c.raw 10G

qemu-img create -f qcow2 c.qcow2 10G

ls

ll -lh

 

 

 

 

qemu-img convert -O qcow2 c.raw c-1.qcow2

ll -lh

qemu-img convert -c -O qcow2 c.raw c-2.qcow2

ll -lh

 

 

 

 

 

4.改变磁盘镜像文件大小resize

qemu-img info test.raw

qemu-img resize test.raw +1G

qemu-img info test.raw

 

 

 

 

 

qemu-img resize test.raw -500M

qemu-img info test.raw

 

 

 

 

 

qemu-img resize c.qcow2 -1G

qemu-img info c.qcow2会报错qcow2格式文件不支持缩小镜像的操作。

注意:raw和qcow2格式都支持改变大小,   qcow2只能大,不能缩小。

 

 

 

 

 

 

改变镜像文件的大小使其不同于创建之时的大小。“+”和“-”分别表示增加和减少镜像文件的大小,而size也是支持K、M、G、T等单位的使用。

缩小镜像的大小之前,需要在客户机中保证里面的文件系统有空余空间,否则会数据丢失。

 

注意保存

在增加了镜像文件大小后,需启动客户机到里面去应用“fdisk”、“parted”等分区工具进行相应的操作才能真正让客户机使用到增加后的镜像空间。

使用resize命令时需要小心(最好做好备份),如果失败的话,可能会导致镜像文件无法正常使用而造成数据丢失。

 

 

5.磁盘镜像快照

快照这个功能只支持qcow2格式,raw不支持。  注意,创建磁盘快照时虚拟机需要处理关闭的状态。

 

格式:

snapshot(磁盘快照)snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filenam

其中-c是创建快照,-l是查看快照,-a是恢复快照,-d是删除快照。

“-l” 选项是查询并列出镜像文件中的所有快照,

“-a snapshot”是让镜像文件使用某个快照,

“-c snapshot”是创建一个快照,

“-d”是删除一个快照。快照只支持qcow2格式,raw不支持。

 

 

qemu-img snapshot -l test.raw   查看快照

qemu-img snapshot -c base_snap1 test.rawraw格式不支持快照

 

 

 

 

qemu-img snapshot -c base_snap1 c.qcow2创建快照

qemu-img snapshot -c base_snap2 c.qcow2

qemu-img snapshot -l c.qcow2查看快照

 

 

 

 

 

 

 

 

qemu-img snapshot -a base_snap1 c.qcow2

qemu-img snapshot -d base_snap2 c.qcow2

qemu-img snapshot -l c.qcow2

 

 

 

 

 

 

6.使用派生镜像>??

刚刚我们创建了test.raw镜像,比如使用这个镜像的虚拟机安装了一个系统。然后我们可以通过创派生镜像来使用这个系统,避免每创建一个虚拟机就安一个系统的情况。

指定后端文件(如例,test.raw为后端文件,test.qcow2只记录操作过程,即与后端文件的差异,采用commit test.qcow2可以将修改提交至后端文件。

 

 

 

 

 

 

7.KVM虚拟机的 基本镜像和增量镜像 案例

 

KVM虚拟机的基本镜像和增量镜像

实验目的:

通过一个基础镜像(node.img),里面把各个虚拟机都需要的环境都搭建好,然后基于个镜像建立起一个个增量镜像,每个增量镜像对应一个虚拟机,虚拟机对镜像中所有的改变都记录在增量镜像里面,基础镜像始终保持不变。

 

功能:节省磁盘空间,快速复制虚拟机。

 

1、概述 和 环境

环境:

基本镜像文件:cirros-0.3.5-x86_64-disk.img  虚拟机名字:cirros

增量镜像文件:cirros_add.img   虚拟机名字:cirros_add

要求:

以基本镜像文件cirros-0.3.5-x86_64-disk.img为基础,创建一个镜像文件cirros_add.img,

以此创建一个虚拟机cirros_add,虚拟机cirros_add的改变将存储于cirros_add.img中。

 

 

 

 

2、创建增量镜像文件

qemu-img create -b cirros-0.3.5-x86_64-disk.img -f qcow2 cirros_add.img

qemu-img info cirros_add.img

 

 

 

 

3、创建虚拟机cirros_add的XML配置文件

cd /etc/libvirt/qemu/

ls

cp generic-2.xml cirros_add.xml

vim cirros_add.xml

 

 

 

 

 

需改三处

 

 

 

 

 

 

 

4、根据xml配置定义 虚拟机cirros_add

virsh define cirros_add.xml

virsh start cirros_add

virsh list

 

 

 

 

 

 

 

 

5.测试

du -sh cirros-0.3.5-x86_64-disk.img

du -sh cirros_add.img

 

 

 

宿主机上ssh连接cirros_add虚机

 

 

ssh cirros@192.168.122.40

 

 

 

 

$ ip a

$ dd if=/dev/zero of=test bs=1M count=3   #在虚拟机cirros_add上增量1M大小文件

 

du -sh cirros-0.3.5-x86_64-disk.img     #基本镜像文件cirros-0.3.5-x86_64-disk.img大小未变

du -sh cirros_add.img #增量镜像文件cirros_add.img增加3M了

 

 

 

 

结论:增量镜像对应一个虚拟机,虚拟机对镜像中所有的改变都记录在增量镜像里面,基础镜像始终保持不变。

 

 

8.I/O虚拟化

KVM 在 IO 虚拟化方面,传统或者默认的方式是使用 QEMU 纯软件的方式来模拟 I/O 设备,包括键盘、鼠标、显示器,硬盘和网卡等。模拟设备可能会使用物理的设备,或者使用纯软件来模拟。模拟设备只存在于软件中。

 

1.过程:

1.客户机的  设备驱动程序  发起 I/O 请求操作   请求;

2.KVM 模块中的 I/O 操作  捕获代码  拦截该次 I/O 请求;

3.经处理后  将本次 I/O 请求的信息   I/O 共享页 (sharing page),并通知用户空间的 QEMU 程序;

4.QEMU 程序获得 I/O 操作的具体信息后,交由硬件模拟代码来模拟本次 I/O 操作。

5.完成后,QEMU 将结果放回 I/O 共享页,并通知 KMV 模块中的 I/O 操作捕获代码。

6.KVM 模块的捕获代码读取 I/O 共享页中的操作结果,并把结果放回客户机。

 

注意:

当客户机通过DMA (Direct Memory Access)访问大块I/O时,QEMU 模拟程序将不会把结果放进共享页中,而是通过内存映射的方式将结果直接写到客户机的内存中,然后通知KVM模块告诉客户机DMA操作已经完成。

 

优点可以模拟出各种各样的硬件设备;

缺点每次 I/O 操作的路径比较长,需要多次上下文切换,也需要多次数据复制,所以性能较差。

 

I/O虚拟化

 

 

 

 

 

 

9.网络虚拟化

网络虚拟化

qemu 纯软件的方式来模拟I/O设备,其中包括经常使用的网卡设备。

qemu-kvm主要向客户机提供4种不同的网络模式

 

4个网络模式:

1)基于网桥的虚拟网卡

2)基于NAT(Network Address Translation)的虚拟网络

3)qemu内置的用户模式网络(user mode networking)

4)直接分配网络设备的网络(包括VT-d和SR-IOV)

 

1.网桥模式

 

 

 

 

网桥模式可以使客户机与宿主机共享一个物理网络设备连接网络,客户机有自己的独立IP地址,可以直接连接与宿主机一模一样的网络,客户机可以访问外部网络,外部网络也可以直接访问客户机(就像访问普通物理机一样),即使宿主机只有一个网卡设备,使用bridge模式也可以使客户机与宿主机共享网络设备

 

 

 

 

 

 

 

2.网桥模式 tap/tun:

Linux中虚拟网络设备, tap仿真了一个数据链路层 设备(ISO/OSI中第2层), 它像以太网的数据帧一样 处理第2层数据。Tun与 tap类似,它是对网络层设 备的仿真。tap用于创建一 个网桥,tun与路由相关

 

 

 

 

 

3.NAT网络模式

隔离;路由&NAT

 

 

 

4.用户模式网络

用户模式网络完全由qemu自身实现,不依赖于其他工具(如:bridge-utils)且不需要root用户权限。

 

缺点:

1)qemu内部实现所有网络协议栈,性能较差

2)不支持部分网络功能,如ICMP

3)不能直接从宿主机或外部网络直接访问虚拟机(类似 Host Only)

 

 

10.KVM高级特性:virtio & 设备直接分配

KVM必须使用硬件虚拟化辅助技术(如:Intel VT-x、AMD-V)的Hypervisor,所以在CPU运行效率方面效率较高。

在有Intel EPT特性支持的平台上,内存虚拟化的效率也较高。

但是在I/O虚拟化方面,传统的使用qemu纯软件模拟I/O设备的方式效率不高。

在客户机中可以使用半虚拟化(Para-virtualizaiton)IO设备驱动,提高客户机的性能(特别是I/O性能)。

目前KVM中实现半虚拟化驱动的方式是采用Linux设备驱动标准框架virtio。

 

 

1.virtio技术 半虚拟化(Para-virtualizaiton)IO设备驱动

 

 

 

 

 

 

2.virtio & 设备直接分配

qemu/kvm客户机可以使用的设备大致分为如下3种类型:

 

1. Emulated device:qemu纯软件模拟的设备对硬件平台依赖性低,

可以模拟各种新旧设备不需要宿主机、客户机额外支持,具备较高的兼容性.

缺点是I/O路径较长,性能较差

 

2. Virtio device:实现virtio 接口的半虚拟化驱动设备

减少I/O路径,提高了客户机I/O执行效率

需要客户机安装virtio相关驱动,因此兼容性较差;

I/O频繁时CPU使用率较高

 

3.PCI device assignment(PCI pass-through):PCI设备直接分配

可以将宿主机中物理PCI或PCI-E设备直接分配给客户机完全使用

Intel VT-d, AMD-Vi或IOMMU

增加大量硬件设备导致成本增加

 

 

 

3.SR-IOV(针对网卡)

SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。

SR?IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral ComponentInterconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。实现绕过内核,直连物理网卡。(pass?through)

 

 

 

 

11.虚拟化管理工具-libvirt

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口

常用虚拟机管理工具均使用libvirt提供的接口(如,virsh、virt-install、virt- manager)

主流云计算管理平台(Openstack)在底层使用libvirt提供的接口

 

libvirt包括:API、守护进程、管理工具

libvirt支持多种虚拟化方案kvm、qemu、xen、VMWare、VirtualBox)同时支持OpenVZ、LXC等Linux容器虚拟化方案

Python、Java、Perl等语言中已经包含有libvirt库可以直接使用

libvirt作为中间适配层屏蔽了底层各种Hypervisor的细节,为上层管理工具提供了一个统一的、稳定的接口(API)

 

 

Libvirt

 

 

 

 

 

 

 

1.libvirt 重要概念 Hypervisor  Hyper-V  Node(节点)Domain(域)

Hypervisor:也称为虚拟机监控器(Virtual Machine Monitor),如KVM、Xen、VMWare ESXi、

Hyper-V:它可以对一个物理机进行虚拟化,使其能够运行多个虚拟机。

Node(节点):物理机,Hypervisor和虚拟机实例均运行在其上

Domain(域):虚拟机实例,或者Guset OS。

 

 

 

什么是Libvirt?

为了高效安全地管理节点上的各个域,而提供的一个公共的、稳定的软件层。

管理:(本地或者远程)

 

2.libvirt 五大功能

1.域管理:包括对节点上的域的生命周期管理,如:启动、停止、暂停、保存、恢复、动态迁移, 也包括对各种设备的热插拔操作,包括磁盘、网卡、内存和CPU.

2.远程节点管理: 只要物理节点上运行了libvirtd这个守护进程,远程的管理程序就可以连接到该节点 进行管理操作

 

3.存储管理:创建不同格式的镜像(qcow2/raw/vmdk);查看、创建LVM、逻辑分区等

 

4.网络管理:查看、配置物理或逻辑网络接口,VLAN,NAT管理,为客户机分配虚拟网络接口等

 

5.提供稳定、高效、可靠的应用程序接口(以便完成上述4个功能)

 

3.Libvirt 主要由三个部分构成:

1. 应用程序编程接口(为其他虚拟机管理工具如virsh/virt-manager提供程序库支持)

2. 守护进程libvirtd

3. 默认命令行管理工具virsh

 

12.Kvm创建centos7虚拟机 案例一

我们在解读完配置文件之后,只需简单复制&修改即可生成一个新的虚拟机出来

#cd /etc/libvirt/qemu

#cp cirros.xml cirros_ test.xml

#vim cirros_ test.xml

#virsh define cirros_ test.xml ---加载配置文件给qemu

#virsh start cirros_ test

#virsh list --all

#virsh destory cirros_ test

#virsh edit cirros_ test ( name )

编辑某个虚拟机的配置文件

 

 

13.Kvm创建centos7虚拟机 案例二

ping www.baidu.com

联网下载先检测网络 yum使用os下载地址

yum  -y  install virt-install

 

 

 

 

 

virt-install

命令行下创建虚拟机的命令,在它后面需要跟上很多的参数

-- name:虚拟机的名字。

--disk path:磁盘映像的位置。

--graphics:怎样连接VM通常是SPICE。

--Vcpu:虚拟CPU的数量。

--ram:以兆字节计算的已分配内存大小。

--location :指定安装源路径。

--network :指定虚拟网络,通常是virbrO或者自己设定的br0

 

 

 

 

 

 

 

 

 

virt-install --name centos7.4 --vcpu 1 --ram 512 --disk path=/root/test/test_2.qcow2 --location=/root/CentOS-7-x86_64-Everything-1708.iso --network=default

 

 

 

 

14.命令行下管理虚拟机 list 查看所有虚拟机

virsh既有命令行模式,也有交互模式,在命令行

直接输入virsh就进入交互模式,virsh 后面跟命令参数,则是命令行模式

语法结构:

virsh < command> <domain-id> [OPTIONS]

 

virsh  list列出当前宿主机上处于运行状态的虚拟机

virsh list --all 列出当前宿主机上所有的虚拟机

 

 

 

 

 

 

 

1.命令行下 管理虚拟机virsh命令 开启关闭虚拟机

virsh  start  ( name )开启某一台虚拟机

virsh  shutdown  ( name )正常关闭某一台虚拟机

virsh  destory  ( name )强制关闭某一台虚拟机

virsh  autostart  ( name )开机自启动虚拟机cirros

virsh  autostart --disable  ( name )关闭开机自启动

 

virsh list --all

 

 

 

 

 

 

 

 

2.虚拟机xml配置文件

1.虚拟机配置文件的位置/etc/libvirt/qemu下

2.配置文件的名字必须为* .xml (以.xml结尾)

3.我们可以利用某个文件作为模板,改动后我们又可以利用该模板生成一个新的满足我们需求的虚拟机

4.配置文件解读

 

cd /etc/libvirt/qemu

 

 

 

 

3.Virsh命令常用命令 参考

 

 

 

 

 

 

 

 

 

 

 

 

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 云计算中的OpenStack和KVM到底是什么
    云计算中的OpenStack和KVM到底是什么
    OpenStack是一个开放源代码云计算平台 openstack是云管理平台,其本身并不提供虚拟化功能,真正的虚拟化能力是由底层的hypervisor(如KVM、Qemu、Xen等)提供。 以下内容真的的背了一遍又一遍的内容,openstart组件介绍Nova:Nova是OpenStack的主要计算引擎,
    03-08
  • KVM 虚拟机联网方式:NAT 和 Bridge
    KVM 客户机网络连接有两种方式:用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。NAT方式。虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些
    03-08
  • 如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM
    如何在 CentOS 7 / RHEL 7 终端服务器上安装 KV
    如何在 CnetOS 7 或 RHEL 7(Red Hat 企业版 Linux)服务器上安装和配置 KVM(基于内核的虚拟机)?如何在 CentOS 7 上设置 KVM 并使用云镜像 / cloud-init 来安装客户虚拟机?基于内核的虚拟机(KVM)是 CentOS 或 RHEL 7 的虚拟化软件。KVM 可以将你的服务
    03-08
  • kvm虚拟机扩容系统盘 虚拟机扩容c盘
    kvm虚拟机扩容系统盘 虚拟机扩容c盘
     一,宿主机扩容虚拟机系统盘环境文件系统CentOS 7XFS1.1查看虚拟机(以下操作在宿主机上)[root@office-prd-kvm-01 ~]# virsh list 4 office-com-ldap-01 running1.2查看虚拟机系统盘[root@office-prd-kvm-01 ~]# virsh domblklist office-com-ldap-01 目标 源
    03-08
  • kvm虚拟化介绍 kvm开源虚拟化系统
  • Linux中KVM桥接的配置
    Linux中KVM桥接的配置
    1. 原理1.1 说明在安装一个拥有虚拟化功能的Linux操作系统(此处以CentOS为例),一般我们有两种方法:1.在光盘安装的时候安装好虚拟化包或者PXE服务器上配置好虚拟化包2.手动在没有安装虚拟化组件的系统中安装虚拟化组件1.2 目的 如果我们搭建的环境是必须使
    02-10
  • kvm学习笔记(一,基础概念) kvm 原理
    kvm学习笔记(一,基础概念) kvm 原理
    前言   阿里云的云主机,采用的kvm,今天就花了点时间研究了下。一、安装官方文档参考:http://www.linux-kvm.org/page/HOWTO二、快速建立一个基于vnc的虚拟机安装 桥接网卡命令创建虚拟机 virt-install \#--network bridge:br0如果主机网卡不是桥接模式
    02-10
  • KVM 内存虚拟化
    KVM 内存虚拟化
    内存虚拟化的概念    除了 CPU 虚拟化,另一个关键是内存虚拟化,通过内存虚拟化共享物理系统内存,动态分配给虚拟机。虚拟机的内存虚拟化很象现在的操作系统支持的虚拟内存方式,应用程序看到邻近的内存地址空间,这个地址空间无需和下面的物理机器内存直
    02-10
  • 在Ubuntu1804中通过KVM创建bridge型的网络虚拟机
    在Ubuntu1804中通过KVM创建bridge型的网络虚拟
    桥接网络可以运行在宿主机上的虚拟机使用和宿主机同网段的IP,并且可以从外部直接访问到虚拟机。目前企业中大部分场景都是使用桥接网络第一步:首先在宿主机上创建桥接网卡,如下:Ubuntu1804创建桥接网卡 1 # cat/etc/netplan/01-netcfg.yaml 23 # This file
    02-10
  • 通过python-libvirt管理KVM虚拟机 代码实现
    初步代码 [python] view plain copy span style="font-size:18px;"''''' Work with virtual machines managed by libvirt     :depends: libvirt Python module '''  # Special Thanks to Michael Dehann, many of the conce
    02-10
点击排行