一、虚拟化基础
1.传统物理机部署方案
IDC机房优点:
IDC机房是分布式的,是全国连锁的。我们将物理服务器部署到IDC机房,由IDC机房帮我们上架服务,管理其内部的网络以及路由转发、服务器资源的分发;而且IDC机房带宽接入量到服务器中心是很高的,转发规则也很合理。IDC机房管理员会联动全世界以及全国各个节点的机房对应的数据访问资源,这样全国各地以及全世界各地就可以进行访问
但IDC机房对温度和湿度有极其高的要求。
①:IDC选择
如:联通,电信,世纪互联,鹏博士等
网络和存储规划
服务器选型及采购
服务器系统选择、系统安装、上架、配置网络
应用规划及部署
域名选择及注册,DNS配置名称解析
测试外网访问
②:传统数据中心面临的问题:
服务器和网络设备资源利用率过低,并且无法共享,导致资源浪费
据统计大部分数据中心中的服务器和网络设备的利用率仅在24%~30%之间,有的CPU利用率、硬盘利用率都在10%以下
资源分配后进行调整困难
资源分配不合理也是传统网络架构存在的问题,因为资源不能动态调配,分配出去的资源是固定的,不能随意添加或删除。
难以实现自动化
初始化成本高,服务器迁移和升级很繁琐,无法实现自动化
成本高昂 集群环境需要大量的服务器主机,硬件投入和后期维护管理成本巨大
2.虚拟化技术介绍
①:定义
虚拟化(Virtualization)是一种资源分配和管理技术,是将计算机的各种实体资源,比如CPU、内存、磁盘空间、网络适配器等,进行抽象转换后虚拟的设备,可以实现灵活地分割、组合为一个或多个计算机配置环境,并还支持重新分割、重新组合,以达到最大化合理利用物理资源的目的。
②:虚拟化优势
虚拟化可以提高 IT 敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更高的性能和资源可用性、自动化运维 - 这些都是虚拟化的优势,虚拟化技术可以使 IT 部门更轻松地进行管理以及降低拥有成本和运维成本。其优势包括:
1.资源超分,如实际的物理内存只有128G,可以给虚拟机分配200G内存
2.降低资金成本和运维成本
3.最大限度减少或消除停机
4.提高 IT 部门的工作效率和响应能力
5.加快应用和资源的调配速度,如:容器
6.提高业务连续性和灾难恢复能力
7.简化数据中心管理 如:机房断电,自己处理
8.减少资源,比如IP和端口的冲突
操作系统功能:内存管理、进程管理、 文件系统管理、I/O管理(驱动管理)、网络管理、安全机制,目的是为了隔离应用到底层的一个媒介一种通用软件
hypervisor:虚拟资源管理程序,将底层硬件资源进行拆分,抽象成不同逻辑层面的资源;目的为了实现硬件的虚拟化技术
软件hypervisor:是需要先安装软件,在软件基础之上去做虚拟化。
实例不同场景名称:
在open stack管理的KVM云平台,云平台对应的资源池,每一个特定的资源被称为实例;如果资源池不是KVM,是容器,是K8s管理的云平台,那么此时资源被称为pod。
vcenter是管理esxi的一种平台,MSTSC远程连接
Vcenter、exsi、vsphere的对比:
什么是VMware ESXi?
VMware ESXi(以前叫ESX)是一种企业级1型虚拟机监控程序,用于部署和管理虚拟机。它是一种直接安装在裸机上的特殊软件,提供插入裸机和操作系统之间的虚拟层。
如果没有ESXi,您就无法虚拟化任何东西,但如果没有vCenter Server,您仍然可以获得VMware ESXi免费版,它允许基本创建和运行虚拟机。因此,VMware ESXi是vSphere套件中很重要的部分。
什么是VMware vSphere?
事实上,我们所说的vSphere并不是一个特定的软件。VMware vSphere是VMware的服务器虚拟化软件套件,它包括了许多软件组件,它们中的每一个都在vSphere环境中执行不同的功能。
VMware vSphere的两个核心组件就是VMware ESXi和VMware vCenter Server,现在大家搞清楚VMware vCenter和vSphere关系了吗?其实我们可以把vSphere看做一个大合集,vCenter和ESXi都在其中负责不同的事务。
什么是VMware vCenter Server?
VMware vCenter Server是一种高级服务器管理软件,它为控制VMware vSphere环境提供了一个集中的平台,使您能够在混合云上自动化并提供虚拟基础架构。
vCenter可以管理各个对应的客户端vSphere ,但是其对应的服务端是在每个esxi基础上创建许多vm(虚拟机、资源、实例),整体三个的esxi,被称为资源池。让服务器平滑上线称为服务器入池,服务器下线称为服务器出池。实例之间可以灵活调配(创建、消亡、销毁,转移到其他物理节点)
云平台三种解决方案:
Iaas 基础设施级服务 将所有的物理节点抽象成一个巨大的资源池 资源的扩展和伸缩: 服务的上线叫入池 服务的下线叫出池 什么都要自己做
paas 平台级服务 把平台准备好了 软件什么的都准备好了 但是做一些基本的应用 开发 需要自己来开发
半paas 我服务器绝大部分资源都是放在pass中的 唯独数据库我要独立 我自己来干 数据私密
全paas 都放在paas上
saas 软件级服务 做到了云原生 机器创建好了就什么软件都拥有了 不需要自己开发 需要服务直接定制 傻瓜化 价格昂贵
对资源池做综合性管理和编排:
OpenStack:本质上管理的就是KVM,资源池中的资源称为实例;对云平台的资源进行管理,其实本质就是对实例进行编排。
Vcenter:管理的是ESXI,ESXI就可以抽象出各个实例(基于ESXI抽象出来的虚拟资源)
KVS:管理的是容器pod,是一种更小规模的虚拟化解决方案(原因:esxi、kvm对应的云组件,也就是内部的实例,本质上是一种特定的虚拟操作系统;而容器是不包括操作系统的,容器用的是宿主型的,但其优点性更强)
虚拟化分类:
半虚拟化:硬件和软件各占一半,也就是更改内核,在编译内核之前,进行更改内核源码(让其类似于硬件虚拟化,提升其性能)。更改内核原因:因为每次内核要判断软件虚拟化要做特权指令的回收、下沉、指令之间的转化等比较浪费时间,更改完内核之后可以把环外的指令直接嵌入环内执行。
全虚拟化:它主要在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行。
硬件虚拟化:靠硬件支持的虚拟化
硬件辅助虚拟化:必须结合操作系统、架构平台(CPU架构必须支持虚拟化技术)支持虚拟化技术,不用像xen去更改内核,只需要在内核系统上安装一个模块(ls module)
完全软件虚拟化:先装软件,在装虚拟化。但其有一个弊端:性能太差和效率低
③:虚拟化的发展史
1959年,计算机科学家Christopher Strachey发表了一篇名为《大型高速计算机中的时间共享》(Time
Sharing in Large Fast Computers)的学术报告,他在文中首次提出了虚拟化的基本概念,被认为是虚拟化技术的最早论述
1964年,IBM推出了专为 System/360 Mainframe 量身订造的操作系统 CP-40,首次实现了虚拟内存和虚拟机。
1967年,第一个管理程序(hypervisor)诞生,5年之后,IBM 发布用于创建灵活大型主机的虚拟机(VM)技术,该技术可根据动态的需求快速而有效地使用各种资源。从此,虚拟化这一词汇正式被引入了IT的现实世界。
20世纪70年代的 System 370 系列中通过虚拟机监控器(Virtual Machine Monitor,VMM,就是硬件hypervisory的体现方式)的程序在物理硬件之上生成多个可以独立运行操作系统软件的虚拟机实例
20世纪 90 年代 Windows 的广泛使用以及 Linux 作为服务器系统的出现奠定了 x86 服务器的行业标准地位。
1998年VMware公司在美国成立,1999年VMware发布了它的第一款产品VMware Workstation、 2001年发布VMware GSX Server和VMware ESXi Server宣布进入服务器虚拟化市场, 2003年VMware推出了VMware Virtual Center, 2004年推出了64位支持版本,同年被EMC收购,2013年收入52.1亿美元。
2015年10月12日,戴尔与数据存储公司EMC的并购宣布完成,最终戴尔以670亿美元收购了EMC
2003年,Xen实现半虚拟化,本质是更改内核。定制一套系统,将xen植入到定制化系统中,把系统一个个安装出来。
2005年,HVM硬件辅助的虚拟化,Intel VT-x,AMD-V
2005年,openVZ出现,在Linux平台上的容器化技术实现
2006年,QEMU,方针模拟器。模拟虚拟机里面虚拟机的仿真画面
2007年,KVM(Kernel-based Virtual Machine)基于内核Linux 2.6.20,硬件辅助虚拟化
2007年8月21日,思杰宣布5亿美元收购XenSource公司,并推出服务器虚拟化XenServer、桌面虚拟化XenDesktop和应用虚拟化XenApp,2013年收入29亿美元。
2008年,LXC发布
2008年3月13日微软在北京发布Windows Server 2008,内置虚拟化技术hypervisory。
2008年9月,红帽以1.07亿美元的价格收购KVM的以色列母公司Qumranet,并推出企业级虚拟化解决方案RHEV,目前最新版本3.3,2013年收入超过13亿美元
2013年,docker发布
2017年11月全球最大公有云厂商AWS宣布了全新的C5实例,该实例完全基于新的虚拟机监控程序(Hypervisor):KVM。在之前的11年里,AWS的所有虚拟化实例都是基于XEN技术实现的。也就是说AWS也开始转向了KVM之路而不再坚持使用从其诞生之日起一直使用的XEN技术,事实上国内的阿里云早在2015年就开始从XEN切换到KVM
④:虚拟化类型
服务器虚拟化
服务器虚拟化支持在单个物理服务器上运行多个操作系统,每个操作系统作为虚拟机独立运行。
网络虚拟化
通过软件定义网络(Software Defined Network,SDN如:网桥),即网络的创建不再依赖于物理设备,如公有云厂商支持用户自己通过配置界面创建新的网络,在 KVM、docker、kubernetes、openstack等虚拟化技术中都使用到了网络虚拟化。
【注】:网桥就是软件定义网络的一个子集,kvm只是管理内核的工具
桌面虚拟化
将桌面部署为托管的服务,使 IT 组织能够更快地响应不断变化的工作场所需求和新出现的机会。还可以将虚拟化桌面和应用快速、轻松地交付给分支机构、外包和远程员工以及使用 iPad 和 Android 平板电脑的移动员工。Citrix 思杰公司在云计算虚拟化、虚拟桌面和远程接入技术领域的处于优势地位
应用虚拟化
将软件应用通过网络实现虚拟化,比如 office 365,钉钉,企业微信
存储虚拟化
将存储用软件虚拟化实现, 如 SAN/NAS(NFS/Samba)/GlusterFS/ceph等
库虚拟化(半虚拟化应用多)
在Linux上使用 wine来运行Windows 程序,在Mac系统使用CrossOver来运行Windows程序
容器虚技术
当前比较火的虚拟化技术,典型代表: Docker、Podman、Linux Container(LXC)、Pouch
3:虚拟机
①:虚拟机介绍
虚拟计算机称为“虚拟机”(VM,Virtual Machine),它是一种严密隔离且内含操作系统和应用的软件容器。 每个虚拟机都是完全独立的。通过将多台虚拟机放置在一台物理计算机上,可仅在一台物理服务器或“主机”上运行多个操作系统和应用,名为“hypervisor”的精简软件层可将虚拟机与主机分离开来,并根据需 要为每个虚拟机动态分配计算资源。
②:虚拟机的主要特性
分区
可在一台物理机上运行多个操作系统,可在虚拟机之间分配系统资源。
隔离
可在硬件级别进行故障和安全隔离,可利用高级资源控制功能保持性能
封装
可将虚拟机的完整状态保存到文件中,移动和复制虚拟机就像移动和复制文件一样轻松
独立于硬件
可将任意虚拟机调配或迁移到任意物理服务器上,安装系统不会受硬件兼容性的影响(软件没影响,硬件有影响)
③:Hypervisor类型
Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,其可以允许多个操作系统和应用共享底层的内存、CPU、磁盘等物理硬件,也可叫做VMM( virtual machine monitor),即虚拟机监视器。
Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能,当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
Hypervisor 允许多种操作系统在相同的物理系统中运行
Hypervisor 控制硬件并向来宾操作系统提供访问底层硬件的途径
Hypervisor 向来宾操作系统提供虚拟化的硬件
【注】:KVM是硬件辅助虚拟化,硬件必须支持虚拟化的功能,并且处于相同的架构。
④:Hypervisor 分类(优缺点)
1974年Gerald J.Popek和Robert P.Goldberg的文章“Formal Requirements forVirtualizable Third Generation Architectures" 将Hypervisor分为两类:
类型 1: 裸金属型(原生架构和操作系统一起,跑在硬件之上;速度快,性能好,但开发难度比较大)
直接运行到物理机的Hypervisor上,这种架构搭建的虚拟化环境称为裸机虚拟化环境(Bare-Metal Hardware),例如:
KVM:硬件辅助全虚拟化,灵活效率高
XEN:不强行要求硬件支持AMDV虚拟化接口模式,但必须修改内核,实现半虚拟化,开发难度大
vmware esxi
rhev hypervisor
Hyper-v Server:Windows支持的
优点:性能好,损耗低;一般拥有资源管理器,高可用性、比较适合企业数据中心。裸机虚拟化性能是要优于宿主虚拟化的,一般IDC都是运行这类系统
缺点:硬件支持有限,因为hypervison通常内置的设备驱动很有限,如:esxi
类型 2 : 宿主型(在软件上面做寄居架构,通用性强,但性能不好)
即需要运行在具有虚拟化功能的操作系统上的Hypervisor,构建的是主机虚拟化环境(Hosted Virtualization)
优点:硬件兼容性好,使用方便,附加功能比较丰富
缺点:效率低、性能差——裸金型和内核一样对底层的硬件有绝对的控制,宿主机型必须在内核允许的情况下,内核视情况而分配,所以其效率才低。
例如:vmware workstation Microsoft Hyper-V VirtualBox paralles desktop #Mac系统最强虚拟机技术
⑤:虚拟化技术分类
模拟器/软件仿真
通过软件模拟完整的硬件环境来虚拟化来宾平台。
可以模拟X86、ARM 、PowerPC等多种CPU
效率比较低
产品或方案:QEMU、Bochs、PearPC
全虚拟化(硬件辅助和软件辅助)和半虚拟化
二、KVM架构和部署
1.KVM定义
KVM( Kernel-based Virtual Machine)是一个完整的虚拟化解决方案,适用于包含虚拟化扩展(Intel VT或AMD-V)的x86硬件上的Linux。目前也支持ARM等其它硬件平台. 它由可加载的内核模块kvm.ko组成,它提供核心虚拟化基础架构和处理器特定模块,kvm-intel.ko或kvm-amd.ko,KVM的用户空间组件包含在QEMU1.3后续版本中,KVM目前已成为学术界的主流 VMM (virtual machine monitor,虚拟机监视器,也称为 hypervisor)之一
KVM是开源软件,可运行多个运行未修改的Linux或Windows映像的虚拟机(虚拟磁盘映像文件)
依赖于HVM;Intel VT-x, AMD AMD-V
RedHat创建虚拟机数量限制: https://access.redhat.com/articles/rhel-kvm-limits
官网: https://www.Linux-kvm.org
https://www.redhat.com/zh/topics/virtualization/what-is-KVM
https://access.redhat.com/documentation/zhcn/red_hat_enterprise_Linux/7/html/virtualization_ge
tting_started_guide/index
2:KVM架构(重)
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟CPU 被实现为一个常规的 Linux 进程。这使得 KVM 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序使用QEMU。
【注】:KVM最大的特点,二次开发难度低于Xen;目前几乎没有难度,因为其植入到Linux原生内核模块,直接去运行。但其弊端是要支持硬件辅助虚拟化,要求硬件支持虚拟化功能。
【注】: 无论哪种hypervisor,都有管理工具。为了实现向上统一化,不同的hypervison需要支持统一的中间件的API——libvirtk库(对接用户空间),首先先支持libvirtk库,才可以支持底层无论任何hypervison向上抽象用户空间的管理工具
KVM: 初始化CPU硬件,打开虚拟机模式,负责CPU,内存,中断控制器,时钟. 由内核模块kvm_xxx.ko实现,工作于hypervisor,设备/dev/kvm,是一个字符设备(传输数据流、输出显示化),在用户空间可通过ioctl()系统调用来完成VM创建、启动,为VM分配内存、读写VCPU的寄存器、向VCPU注入中断、时钟等管理功能
QEMU进程:工作于用户空间,主要用于实现模拟IO设备,如显卡,网卡,硬盘等, qemu-kvm进程:工作于用户空间,用于实现一个虚拟机实例
Libvirt:提供统一API,守护进程libvirtd和相关工具,如:virsh,virt-manager等
一个vm启动就会产生一个用户空间进程,用户空间发起进程,创建虚拟机,虚拟机硬件仿真交给QEMU,来宾系统也就是虚拟操作系统Guest OS,vm上面可以跑自己的应用程序,然后QEMU把底层的东西向上抽象,将它的画面仿真出来。
KVM 模块载入后的系统的运行模式:
内核模式:HostOS执行I/O类操作,或其它的特殊指令的操作;称作内核模式
用户模式:GuestOS的I/O类操作
来宾模式:GuestOS非I/O类操作,称作虚拟机的用户模式更贴切
3:KVM 集中管理与控制
KVM是运行在单机的系统,需要其它软件实现跨主机的统一的管理。常见的虚拟化管理平台如下:
Management Tools - KVM
oVirt
功能强大,是Redhat虚拟化管理平台RHEV的开源版本。 oVirt | oVirt is a free open-source virtualization solution for your entire enterprise
WebVirtMgr
https://www.webvirtmgr.net
virt-manager的Web模式的替代品
OpenStack 最主流的开源虚拟化管理平台
Proxmox virtualization environment
简称PVE,是一个开源免费的基于Linux的企业级虚拟化方案,功能不输专业收费的VMware。是一个完整的企业虚拟化开源平台。借助内置的Web界面,您可以轻松管理VM和容器,软件定义的存储和网络,高可用性集群以及单个解决方案上的多个开箱即用工具。
4:KVM 实战操作
KVM需要宿主机CPU必须支持虚拟化功能,因此如果是在vmware workstation上使用虚拟机做宿主机,那么必须要在虚拟机配置界面的处理器选项中开启虚拟机化功能。
第一步:
grep -Em 1 "vmx|svm" /proc/cpuinfo
#Intel CPU 对应 vmx
#AMD CPU 对应 svm
第二步:
安装moba可以打开的图形界面
yum -y group install "Server with GUI"
第三步:
安装qemu,libvirt等工具,同时安装virt-viewer、virt-manager远程图形管理程序
yum -y install qemu-kvm libvirt virt-install virt-viewer virt-manager cockpit cockpit-machines
若是rocky可以基于GUI来管理KVM虚拟机(不推荐)
systemctl start cockpit.socket 监听9090端口,可通过浏览器访问
【注】:rocky不装libvirt-manager 安装:dnf -y install cockpit cockpit-machines。qemu-kvm 仿真模拟、virt-install 虚拟机安装、virt-viewer 虚拟机视窗化、virt-manager 管理虚拟机相关具体功能。Cockpit 基于UI/Web界面来控制和管理虚拟机。
传入镜像,并把Rocky-9.1-20221214.1-x86_64-dvd镜像挪到/var/lib/libvirt/images/
第四步:
启动libvirt守护进程,同时开机自启
systemctl start libvirtd
systemctl enable libvirtd
cat /etc/libvirt/qemu/networks/default.xml //查看仿真网络配置文件
【注】:KVM会虚拟一个net模式网卡,默认不支持桥接,但是如果关联网络驱动,就支持半桥接。更改完仿真配置文件不会生效,除非重启libvirt
第五步:
开启9090端口,用浏览器进行访问
【注】:现版本不能用root登录,得创建普通用户并赋予权限
systemctl start cockpit.socket
useradd haha
passwd haha
vim /etc/sudoers
进行访问:
创建虚拟网络仅主机模式:
②:安装KVM工具包
qemu-kvm: 为kvm提供底层仿真支持
libvirt-daemon: libvirtd守护进程,管理虚拟机
libvirt-client: 用户端软件,提供客户端管理命令
libvirt-daemon-driver-qemu: libvirtd连接qemu的驱动
libvirt: 使用最多的KVM虚拟化管理工具和应用程序接口,即通过libvirt调用KVM创建虚拟机,
libvirt是KVM通用的访问API,其不但能管理KVM,还能管理VMware、Xen、Hyper-V、virtualBox等虚拟化方案。
virt-manager: 图形界面管理工具,其底层也是调用libvirt API来完成对虚拟机的操作,包括虚拟机的创建、删除、启动、停止以及一些简单的监控功能等。
virt-install: 虚拟机命令行安装工具
virsh: 命令行工具是基于 libvirt API 创建的命令行工具,它可以作为图形化的 virt-manager 应用的备选工具。virsh 命令可以被用来创建虚拟化任务管理脚本,如安装、启动和停止虚拟机
virt-viewer: 通过 VNC 和 SPICE 协议显示虚拟机器图形控制台的最小工具。该工具在其同名软件包中:virtviewer
cockpit: CentOS8/rocky9 专门提供的基于Web的虚拟机管理界面
③:libvirt 包功能
libvirt 程序包是一个与虚拟机监控程序相独立的虚拟化应用程序接口,它可以与操作系统的一系列虚拟化性能进行交互
④:libvirt 程序包提供:
一个稳定的通用层来安全地管理主机上的虚拟机。
一个管理本地系统和连网主机的通用接口
⑤:默认网络配置
安装完虚拟工具后,会自动生成一个 virbr0 网卡,类似于Vmware workstation 生成的VMnet8 网卡,充当虚拟机的 NAT 网卡