之前讲了一些虚拟化底层的一些系统知识
主机虚拟化是较为底层的
vwmare 之类的都属于主机虚拟化技术,主机级虚拟话技术有两种类型
1.一型虚拟化,在硬件接触之上,没有直接安装任何操作系统,而是直接安装虚拟机软件,所有的操作系统的都是虚拟机,没有任何操作系统是跑在硬件之上的,硬件上直接装了一个虚拟机软件,一般叫hypervisor;
hypervisor可以当作操作系统,有用户空间,用户空间是用来管理创建虚拟机的,hypervisor控制台
XEN英国剑桥大学发明的
这个虚拟机软件自己有一个控制台,在控制台之上可以创建和管理其他虚拟机
2.二型虚拟化,自己用的,在硬件平台上有一个host宿主机,在宿主机上装软件,vwmare,再去安装虚拟机实例,每一个虚拟机称为guest,虚拟机管理器通常是VMM,虚拟机监视器,
虚拟化技术,kvm
**xen是直接装 在硬件上的,hypervisor要去驱动硬件,需要驱动的一般 是IO设备,XEN是需要自己去驱动所有IO设备的,之所以说是奇葩,是因为它自己几乎不驱动任何IO设备,不驱动如何使用,
以centos为例,有一些硬件设备,在硬件设备上安装 linux,xen可以被当作软件一样安装在用户空间,装用户空间只能运行在宿主机上,所以安装完以后还需要另外一步,xen需要重启系统,一重启,内核就不能跑在硬件上了,接下来xen要取代内核,自己跑在硬件上,原来的内核被组织成第一个虚拟机,原来的用户空间就变成了虚拟机的用户空间,这个主机虽然现在变车了虚拟机,但是拥有特权,除了cpu和内存不能管理之外,所有IO设备都可以管理,
第一个虚拟机用的cpu和内存用的是hypervisor管理的,IO设备可以透传式方式管理的,
其他虚拟机所使用的IO设备都是模拟的,想使用网卡可以用软件做一个,真正自己的进程想要访问网卡,来发报文的时候,自己驱动模拟网卡,模拟网卡再传给前面的特权的虚拟机的内核,由这个内核驱动真正意义上的IO设备来发出去,但是这个虚拟机如果要使用cpu和内存,则是交给hypervisor,xen来处理
**
cpu的5大部件,cpu和内存有虚拟化技术来管理,但IO设备委托给第一个虚拟机来管理,第一个虚拟机称为特权虚拟机,DOM0,再xen虚拟化中,每个虚拟机称为domain,其他虚拟机统称为DOMU,任何一个非特权虚拟机,使用IO设备,是需要先交给DOM0来驱动的,如果想要使用cou和内存,则是交给xen来驱动
xen还有一个功能,允许每一个虚拟机知道自己运行再虚拟化环境中,不光是IO设备
centos6的内核2.6版本是不支持xen的,但是好在centos推出了升级版内核,只要升级一下即可
从3.0内核几,才收入内核
随着kvm的到来而改变,kvm是由以色列公司开发的,由了kvm,xen就不受待见了,红帽就不再支持了,但是红帽不干,centos社区可以做,xen结合centos做了虚拟化技术kvm,把整个内核变成hypervisor,给原来主机作为虚拟机,对于服务器来讲,不要重启系统能立即实虚拟化方案,受欢迎,这叫做主机虚拟化
虚拟化的主要目的是用来,运行程序的,内核不会产生任何生产功能,真正生产功能是应用程序,跑很多应用程序的时候,为了应用程序不互相干扰,做出几个虚拟机,每个虚拟机的生命周期,跟其他程序之间不互相串联,按需创建,
当你需要再多个环境中测试,windows,linux,需要同时 测试 就需要用到虚拟机,更重要 的时候,有些应用程序需要跑在多机上,比如跑一个分布式的hadoop,只有一个操作系统是跑不了的,也需要一个虚拟机
底层是硬件,上面是内核,内核之上就是用户空间,应用程序都是在用户空间的,用户空间隔离一下即可,
一个内核之上多跑几个用户空间,共享同一个内核,
但是如果在一个内核空间中shutdown 关机,因此在内核加以支持,把有些功能隔离开来,创建出有很多功能隔离的空间
比如每一个用户空间都模拟出一个跟来,但是事实上,有一个跟是有特权的,能看到区全局对应的跟,其他用户空间是基于root
这种虚拟化叫容器,虚拟出来的不是内核空间,而只是用户空间,相比较前面的hypervisor,要轻量化的多,是接近于底层原生性能来运行的,性能损失极小,但隔离性每那么好,毕竟大小共享同一个内核,所以安全性不是特别的高,隔离性不是很好,但是性能确实很好,
解决方案有很多LHC,OPENVC,都属于容器级虚拟化,但是就是没有docker,docker可不是容器,docker只是容器管理器而已,docker只是让一个容器易用的补充功能而已,docker类似openstack和虚拟机的关系
在linux装window程序是没有任何问题的,有wine的包,这种称为程序级别虚拟化,重点介绍主机级虚拟化,和程序级虚拟化
**虚拟化技术类型: 和常见的解决方案
主机虚拟化:xen, kvm, virtualbox, …
容器(用户空间隔离): lxc(LinuX Container), openvz, …
系统库虚拟化:wine, …
应用程序级虚拟化:jvm, pvm,…
**
主机虚拟化:
CPU:
模拟:emulation, 虚拟机的arch与物理平台的arch架构可以不相同,叫模拟,相同叫虚拟;qemu;
虚拟:virtualization
完全虚拟化(full-virt)(环0)
BT: 二进制转换 (软件)
HVM:硬件辅助的虚拟化(硬件)
半(准)虚拟化 (para-virt)
GuestOS得明确知道自己运行于虚拟化技术
内存:
MMU virtualization:
Intel: EPT, Extended Page Table
AMD: NPT, Nested Page Table
TLB virtualization:
tagged TLB
**IO:
Emulation 模拟 (软件)
Para-virtualization 半虚拟化(软件实现,但是让虚拟机知道运行在半虚拟化中)
IO-through:IO透传(不利于迁移) **
主机虚拟化的类型:
TYPE-I:
于硬件级别直接运行hypervisor;
xen, vmware ESX/ESXI
TYPE-II:
于硬件级别运行一个OS(Host OS)宿主机,在宿主机上运行虚拟机管理器,而此OS上运行一个VMM;
vmware workstation, virtualbox, kvm
Linux目前流行的开源虚拟化技术解决方案:
主机虚拟化:xen, kvm, virtualbox
容器级:lxc, libcontainer(docker自己研发出的更轻量级虚拟化技术,弃用了LXC), runC(工业级标准的容器级,虚拟化), openvz,google的k8s就是容器编排框架最主流的
4种流行的容器技术,docker只是之一,
模拟器:qemu
kvm其实是由红帽扶持的,kvm核心只是一个内核模块,这个模块一旦在内核编译时编译了,被装入以后,输出一个伪设备文件,就能在用户空间使用管理工具,qemu-KVM
整个kvm’由两部分组成
KVM的组件:
kvm.ko:模块(负责内核空间的hypervis的实现)
API
qemu-kvm:用户空间的工具程序;(法国天才程序员,用1,2M代码实现模拟cpu和内存)
qemu-kvm is an open source virtualizer that provides hardware emulation for the KVM hypervisor.
1
(红帽联合另外一家公司研发了虚拟机管理程序) libvirt:Libvirt is a C toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes). The main package includes the libvirtd server exporting the virtualization support.
这个命令行工具程序是C/S架构的
**C/S:
Client:
libvirt-client
virt-manager 图形化控制台
Daemon:(支持不同的虚拟化技术)
libvirt-daemon **
有一个图形化的工具
快速使用kvm技术:
# yum install libvirt-daemon-kvm qemu-kvm virt-manager
# modprobe kvm
# systemctl start libvirtd.service
# virsh iface-bridge INTERFACE BRIDGE_NAME
# virt-managerkvm依赖于你的cpu硬件支持虚拟化才可以,如果能看到svm和vmx 就能判断cpu是支持硬件虚拟化的
**确保vwmare是勾上的,默认没勾,笔记本支持的话,但有可能bios是锁定的。勾选启动虚拟机,就可以使用kvm了
直接装入kvm,装完以后lsmod
kvm核心模块
kvm_intel硬件相关的模块
表示现在的主机已经支持kvm了,内核已经成为hypervis
**
验证方式很简单。/dev/kvm,会出现一个文件,如果是字符文件,就表示内核已经开始支持虚拟化了,内核已经成为hypervisor了
qemu-kvm,最底层的管理程序
qemu-kvm:用户空间的工具程序;实现辅助功能的用户空间管理工具
qemu-kvm is an open source virtualizer that provides hardware emulation for the KVM hypervisor.
先用图形化的方式看下
**快速使用kvm技术:
# yum install libvirt-daemon-kvm qemu-kvm virt-manager
# modprobe kvm
# systemctl start libvirtd.service
# virsh iface-bridge INTERFACE BRIDGE_NAME
# virt-manager**
主配置文件
一个独立守护进程,一个非独立
可以直接启动,可以基于服务来输出API,所以可以用远程来实现所有的功能的,并不监听端口
监听在virbr0:67
使用ifconfig应该能看到,多了 virbro0的桥,这是一个nat桥
凡是来自192.168.122.0网段的,目标地址不是本地的,都做地址伪装
也可以使用物理桥
有非常多的子命令
能创建桥接口,指明接口,指明桥叫什么名字才可以
启动失败了,但是实际上已经成功
这个接口就当做主机的接口了,物理网卡就变成交换机了,
这样就可以理解为桥创建好了,基于桥设备,就可以创建虚拟机
还可以在安装之前设置
如果能连接到pxe就可以进行安装了
还可以导入现有磁盘镜像
服务器上有磁盘镜像,很小的操作系统cirros互联网上有
用于测试云环境常用的工具程序,cirrors
名字太长可以进行修改
’
这里的选择只是做资源分配时的评判,借鉴标准
磁盘有镜像文件,,可以不用安装直接进行启动
sudo su - 可以切换拿到管理员账号