1、常见虚拟化技术
主机级虚拟化
- 主机级虚拟化 虚拟出完整的主机
Type-I 一型虚拟化
hypervisor:在硬件之上没有运行宿主机,而是直接运行虚拟化软件创建虚拟机
其中,第一个虚拟机称为Dom0,为特权虚拟机;后续虚拟机为普通虚拟机称为DomU,为非特权虚拟机
名词解析:
百度百科:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”型。
裸机型在虚拟化中Hypervisor直接管理调用硬件资源,不需要底层操作系统,也可以将Hypervisor看作一个很薄的操作系统。这种方案的性能处于主机虚拟化与操作系统虚拟化之间。
如:xen, vmware ESX/ESXI
Type-II 二型虚拟化
VMM:Virtual Machine Manager 虚拟机管理器,虚拟化软件的统称,如:VMware workstation
在物理硬件之上安装宿主机操作系统,宿主机操作系统有自己的内核空间和用户空间,在用户空间内安装VMM(即虚拟化软件),在VMM之上再安装虚拟机,每个虚拟机都有自己的内核空间和用户空间
名词解析:
百度百科:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管(宿主)”型。
托管型/主机型 Hypervisor运行在基础操作系统上,构建出一整套虚拟硬件平台(CPU/Memory/Storage/Adapter),使用者根据需要安装新的操作系统和应用软件,底层和上层的操作系统可以完全无关化,如Windows运行Linux操作系统。主机虚拟化中VM的应用程序调用硬件资源时需要经过:VM内核->Hypervisor->主机内核,因此相对来说,性能是三种虚拟化技术中最差的.如:vmware workstation, virtualbox, kvm
知识扩展:
Xen 安装时属于Type-II类型虚拟化,一旦安装以后生效,就变成了Type-I类型虚拟化
kvm 完全基于linux操作系统,是linux系统中的一个内核模块,一旦装入该内核模块,则linux内核称为了hypervisor
用户空间级虚拟化
- 用户空间虚拟化
Type-III 三型虚拟化
使用虚拟机的目的:一个操作系统能够运行多个应用程序(如一台设备运行多个httpd服务),达到应用程序程序运行环境隔离的目的
容器级虚拟化 把用户空间级虚拟化,即把宿主机操作系统的一个用户空间分割为多个用户空间,每个用户空间模拟出运行特定应用程序的空间,这就是容器
名词解析:
百度百科:虚拟机运行在传统操作系统上,创建一个独立的虚拟化实例(容器),指向底层托管操作系统,被称为“操作系统虚拟化”。
操作系统虚拟化是在操作系统中模拟出运行应用程序的容器,所有虚拟机共享内核空间,性能最好,耗费资源最少。但是缺点是底层和上层必须使用同一种操作系统,如底层操作系统运行的是Windows系统,则VPS/VE就必须运行Windows。
如:docker容器技术 使得容器运行起来更为便捷的管理工具
2、KVM
- KVM
Kernel-based VM 基于内核的虚拟机 - Quamranet公司研发,强依赖硬件辅助虚拟化hvm
- kvm属于linux系统中的一个内核模块,linux系统一旦载入kvm模块,会在/dev目录下自动创建一个虚拟设备文件/dev/kvm,在用户空间使用命令行工具,调用该字符设备提供的接口,借助于内核的kvm模块能够创建虚拟机,每个虚拟机表现为用户空间的一个进程。
qemu
- qemu:虚拟机操作系统模拟器,虚拟化软件
- qemu+kvm
kvm:cpu,ram 对cpu和内存虚拟化
qemu:io,cli 对IO设备虚拟化并提供一个管理接口client
qemu-kvm 基于kvm研发的qemu,仅支持kvm
qemu-kvm+kvm为基本架构
说明:
KVM内核模块只负责CPU和内存的虚拟化,加载了它以后,用户就可以进一步通过工具创建虚拟机(KVM提供接口),
但仅有KVM还是不够的,用户无法直接控制内核去做事情(KVM只提供接口,怎么创建虚拟机,分配vCPU等并不在它上面进行),
还必须有个运行在用户空间的工具才行,KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,并对其进行了修改,最后形成了QEMU-KVM。
在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,实际模拟创建,管理各种虚拟硬件,QEMU将KVM整合了进来,
通过/ioctl 调用 /dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但kvm不能虚拟其他硬件设备,
因此qemu还有模拟IO设备(磁盘,网卡,显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化。
当然,由于qemu模拟io设备效率不高的原因,现在常常采用半虚拟化的virtio方式来虚拟IO设备
以上内容转载:https://blog.csdn.net/u013946404/article/details/78739830
libvirt安装和使用
-
判断CPU是否支持硬件虚拟化
grep -i -E "lm|svm|vmx" /proc/cpuinfo -
标签flags:
svm:ADM cpu
vmx:Internet cpu
lm 表示运行在64位
注意:如果只能搜索到lm,没有搜索到svm或vmx,则说明不支持虚拟化,如果在vmware workstation虚拟机中则需要在虚拟机编辑设置中,点击处理器选项,右边虚拟化引擎选项框中勾选"虚拟化Intel VT-x/EPT或AMD-V/RVI(V)"选项才能显示。
只有关闭虚拟机以后勾选此选项再次开启虚拟机才能生效
如图所示:
-
modprobe kvm 加载kvm模块
-
lsmod |grep kvm 查看是否加载成功
-
安装相关软件:
安装软件
yum install libvirt-daemon-kvm qemu-kvm virt-manager libvirt
启动libvirtd服务
systemctl start libvirtd.service
注意:如果启动失败,提示"Failed to start Virtualization daemon",可以尝试以下操作:
yum update librbd1
更新后,重启libvirtd服务。
libvirt
- libvirt C/S架构
- libvirtd 守护进程,可看做是对qume-kvm的二次封装
- VMM KVM管理工具
提供常用的虚拟机管理工具如virsh(类似vim编辑器),virt-install,virt-manager等 - libvirt网络通信
实现虚拟机与外部通信有两种方式:桥接模式和nat模式
安装libvirt以后,libvirtd守护进程会自动创建一个nat桥:virbr0,默认ip地址为:192.168.122.1
该nat桥就相当于一个交换机,只要虚拟机里的主机和物理机连接到该交换机,相互之间就可以相互通信,如果宿主机开启转发功能并进行源地址转发,则可以实现虚拟机内部主机与外部网络通信。 - 开启图形管理界面
说明:
打开核心转发功能:(临时生效,永久生效需要更改配置文件)
sysctl -w net.ipv4.ip_forward=1
或者echo 1 > /proc/sys/net/ipv4/ip_forward
关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
重启libvirtd服务
systemctl restart libvirtd
该服务会自动生成防火墙规则,实现源地址转换SNAT,从而虚拟机内网主机能与外部网络通信
启动图形管理界面
virt-manager (建议使用xmanager连接)
虚拟化技术
- 虚拟化技术的分类:
主机级别虚拟化
模拟器:模拟成异构的架构
Qemu,PowerPC
完全虚拟化:cpu的环0用软件模拟,环3在硬件物理cpu上
依赖于hvm,BT技术
半虚拟化:环0没有使用软件模拟,而是让虚拟机内核明确知道自己运行在虚拟机之上
容器级虚拟化:
LXC,OpenVZ
库级别虚拟化
wine
程序级虚拟化
jvm,pvm
kvm管理工具
- kvm管理工具:
图形GUI:virt-manager,virt-viewer
命令行CLI:virsh,virt-install - libvirt相关命令
brctl
rpm -qf \which brctl
查看brctl命令由哪个软件包生成
bridge-utils
内核模块bridge,能够以软件方式在网络协议栈上模拟出硬件交换机设备
使用brctl命令对模拟出的交换机设备其进行管理
所谓的"桥",可以理解为交换机设备
brctl子命令
addbr 创建交换机
delbr 删除交换机
addif 添加带有网卡的网线,把网线插入设备
delif 删除带有网卡的网线,把网线拔出设备
show 查看交换机设备
stp 开启或关闭指定设备上的stp协议,默认启用该协议
示例:
brctl addbr mybr0 创建交换机
brctl stp mybr0 on mybr0交换机开启stp协议
- ip命令 能够创建虚拟以太网设备
ip link子命令:
add 添加二层设备
可添加设备类型:虚拟以太网设备veth
del 删除二层设备
set 设置设备属性
name 为网卡重命名
示例:
添加一条两头带有网卡的网线,一头网卡为veth0.0,另一头网卡为veth0.1
ip link add veth0.0 type veth peer name veth0.1
激活网卡
ip link set dev veth0.0 up
ip link set dev veth0.1 up
把veth0.1网卡关联到mybro交换机
brctl addif mybr0 veth0.1
激活交换机mybr0
ip link set mybr0 up
ip netns 子命令
add 创建一个名称空间(虚拟机)
exec 在创建的虚拟机内执行命令
示例:
创建一个名称空间(虚拟机)
ip netns add myns
把veth0.0网卡关联到myns虚拟机
ip link set veth0.0 netns myns
查看名称空间(虚拟机)myns中的网卡
ip netns exec myns ifconfig -a
把名称空间(虚拟机)内的网卡veth0.0重命名为eth0
ip netns exec myns ip link set veth0.0 name eth0
把名称空间(虚拟机)内的网卡veth0.0配置ip地址
ip netns exec myns ifconfig eth0 10.10.0.1/24
测试:
在名称空间(虚拟机)内ping桥(交换机)的ip地址
ip netns exec myns ping 10.10.0.254
文章评论