如何实现虚拟化技术?
三种类型的虚拟机管理软件Hypervisor
KVM(kernrl -bsed v m)
环境检查和部署
一、虚拟化技术概述
虚拟化技术就是对资源的抽象
1.1、从资源提供角度分类
平台虚拟化即硬件平台虚拟化,可以把物理机的CPU和MEM提供给来宾主机做资源。
操作系统虚拟化就是把物理机的操作系统和接口功能提供给虚拟机使用。(容器)
1.2、虚拟化实现的方式基于hypervisor分类主要有三类架构
a、虚拟机直接运行在物理硬件之上,不需要底层操作系统,hypervisor充当了操作系统,需要修改客户机操作系统(直接在硬件上安装hypervisor,没有操作系统,相当于安装硬件驱动而已) 半虚拟化
b、虚拟机运行在传统操作系统之上,硬件全仿真,称为“宿主型”,hypervisor提供硬件模拟,虚拟机操作系统与主机操作系统无关化。应用程序向虚拟机内核发起请求;虚拟机内核向hypervisor发起请求;hypervisor向主机操作系统内核发起请求 硬件辅助全虚拟化
c、虚拟机运行在传统主机操作系统之上,运行一个实例,把系统调用指向传统主机操作系统。
操作系统虚拟化
虚拟化的目的:能够在一台物理机中隔离出更多独立的空间运行应用程序
hypervisor管理工具:
1.3、qemu
软件模拟虚拟化、可以模拟多种硬件,包括X86架构处理器、AMD64架构处理器、ARM、SPARC与PowerP.C架构等。效率低,一般用于研究测试场景。
1.4、kvm
1.5、QEMU-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设备。
1.6、libvirt
libvirt是一套免费、开源的支持Linux下主流虚拟化管理程序的C函数库,其旨在为包括KVM在内的各种虚拟化管理程序提供一套方便、可靠的编程接口。
当前主流Linux平台上默认的虚拟化管理工具virt-manager,virsh等都是基于libvirt开发。
相当于接口(sdk)
一个针对各种虚拟化平台的虚拟机管理的APl库,一些常用的虚拟机管理工具virsh(类似vim编辑器),virt-install , virt-manager等和云计算框架平台(如OpenStack ,OpenNebula , Eucalyptus等)都在底层使用libvirt提供的应用程序接口。libvirt主要由三个部分组成︰API库,一个守护进程libvirtd和一个默认命令行管理工具virsh。
为用户管理虚拟机提供了访问hypervisor接口
libvirt包含三部分︰库,libvirtd(守护进程),virsh
virt-manager,libvirt,qemu-kvm三者之间的关系
virt-manageri通i过libvirt管理qemu-kvm虚拟机
二、kvm虚拟机管理工具部署
2.1、环境准备
第一步:使用lscpu命令查看系统架构是否支持虚拟化VT-x(intel虚拟机技术)
第二步:egrep 'svm|vmx' /proc/cpuinfo命令查看vmx(硬件辅助虚拟化)
必须输出红色的vmx才OK
[vm1@www ~]$ egrep --color -i "svm|vmx" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat spec_ctrl intel_stibp flush_l1d arch_capabilities
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat spec_ctrl intel_stibp flush_l1d arch_capabilities
第三步:lsmod查看kvm模块
2.2、虚拟化主机部署
第一步查看是否安装了虚拟化环境分组组件
yum grouplist命令输出
There is no installed groups file. 这里没有安装组件
Maybe run: yum groups mark convert (see man yum)
Determining fastest mirrors
Available Environment Groups:
Minimal Install
Compute Node
Infrastructure Server
File and Print Server
Basic Web Server
Virtualization Host 虚拟主机在可安装的环境组件中所以需要安装
Server with GUI
[root@localhost ~]# yum grouplist
[root@localhost ~]# yum -y groupinstall "虚拟化*"
第二步安装虚拟化环境分组
中文的系统就可以使用虚拟化,否则使用英文
yum -y groupinstall "Virtualization Host"
第三步:检查libvirt是否启动,kvm模块是否加载
systemctl status libvitrd
如果lsmod 查看kvm没有加载可以使用modprobe加载kvm模块
第四步:开启防火墙的活跃域,添加masquerade
如果使用iptables
如果不设置防火墙,虚拟机无法上网
设置完成之后检查网络
ip 是由虚拟交换机分配的 ip a s 是ip adress show的缩写