linux云计算--KVM虚拟化技术(cpu内存) 制作lvm镜像 kwm上安装centos7系统
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的交换分区。
所以,在宿主机中总共需要44GB(36GB+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/sdb把sbd全给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命令常用命令 参考