OpenShift Virtualization概述
1 | 作者:李晓辉 |
虚拟化的基本概念
系统虚拟化这东西,就是把一台电脑变成好多台虚拟电脑,同时运行,每台虚拟电脑都能跑自己的操作系统。这些虚拟机之间完全互不干扰,就跟它们各自在独立的硬件上跑似的。虚拟机也有自己的网卡、IP地址、文件系统和其他外设,而且每台虚拟机都能跑任何支持的操作系统或版本。
虚拟化的好处可不少,能高效利用物理计算资源。想象一下,一台大型系统,通过虚拟化能被划分成好多台虚拟系统,把资源用得满满当当。而且,虚拟化能让新虚拟服务器的配置变得超快,比买新的物理硬件快多了。
这里面有个关键角色叫虚拟机监控程序,也就是hypervisor,它负责管理和支持物理服务器的虚拟化。这个hypervisor就是让虚拟机跑起来的幕后功臣,它给虚拟机提供虚拟的CPU、内存、磁盘、网络和其他外设,还不让虚拟机直接接触硬件或者别的虚拟机。
提供hypervisor的物理机器和操作系统,我们叫它主机。而跑在虚拟机里的操作系统,就是客人啦。
虚拟化管理解决方案能搞定虚拟机和主机的管理,让你的基础设施运行得更顺畅。通常,虚拟化管理工具会创建一个集成的虚拟化环境,方便你创建、管理和监控虚拟机、hypervisor、存储和网络资源。有了虚拟化管理器,你就能集中控制虚拟化基础设施,不用一个一个去管那些hypervisor和虚拟机,想想都头大,了解了虚拟化的基本概念后,我们来看看虚拟化和云计算之间的关系。
虚拟化和云计算
再说说虚拟化和云计算,虚拟化其实是云计算的基础。云计算利用虚拟化技术,把共享的计算资源通过网络,以按需的基础设施即服务(IaaS)的形式提供出去。不过,管理型虚拟化环境和公共或私有云还是有区别的。它们都能把物理资源当作多个虚拟资源来管理,但云计算是把资源池自动分配,作为服务提供出去。云资源可以通过自助服务模式获取,还能提供自动管理、伸缩性和弹性的好处,而虚拟化环境更偏向于企业级的私有数据中心管理。
管理型虚拟化和云计算各有各的用武之地。选虚拟化还是云计算,主要看你要干啥活儿。要是你的工作负载需要为特定应用分配固定的资源,而且这个应用只给特定用户用,那虚拟化通常比云计算更适合。
虚拟机和容器
除了云计算,虚拟化技术还有一个重要的应用场景,那就是虚拟机和容器的对比,容器也是在主机上独立运行应用的一种方式,和虚拟机有点像,应用都在一个自包含的环境里,通过虚拟化网络通信。但容器体积更小,启动和停止速度比虚拟机快多了。从内存和磁盘使用上看,虚拟机通常得按GB算,容器就按MB算就行。
容器是从容器镜像创建出来的,镜像里包含了应用运行所需的所有依赖。这样一来,容器就能在任何主机上运行,不用在主机上安装任何依赖,也不会出现不同容器依赖冲突的情况。
我们来看一下容器中的应⽤与主机操作系统中的应⽤对⽐图
容器这玩意儿,底层是靠Linux内核的一些特性来实现的,比如命名空间(namespaces)和控制组(cgroups)。举个例子,容器用cgroups来管资源,像分配CPU时间、系统内存这些事儿,都是靠它搞定的。而命名空间的作用,就是把容器里的进程和资源跟其他容器还有宿主机系统隔离开来,让每个容器都互不干扰,各自安好。
容器在搞微服务的时候特别受欢迎,尤其是那些需要快速开发、单独伸缩的应用场景。为啥呢?因为容器启动快、资源占用少,很适合这种灵活多变的需求。
不过,要是公司里有些老古董应用或者特别复杂的系统,不想费劲去改成容器,那虚拟机(VM)就派上用场了。虚拟机的好处是,它能给你一个完整的计算环境,就像一个独立的小电脑,啥都不缺。要是应用需要特定的、专用的硬件,那虚拟机也能搞定,因为它能模拟出一个完整的硬件环境。再说了,要是你的应用非得用非Linux的操作系统,或者需要一个和宿主机不同的内核,那虚拟机也是首选。
OpenShift 虚拟化
Red Hat的OpenShift Virtualization也挺有意思。它跟Red Hat其他的虚拟化产品一样,用的是基于内核的虚拟机(KVM)技术当hypervisor,然后用libvirt库来定义虚拟机。KVM和libvirt都跑在一个容器里,这个容器可以在Kubernetes和OpenShift平台上部署,还能和容器化的应用一起玩得很开心。另外,Quick EMUlator(QEMU)的guest agent会把虚拟机的信息传给宿主机。
Red Hat OpenShift呢,是一套基于Kubernetes容器基础设施的模块化组件和服务。Red Hat OpenShift软件产品是从Kubernetes开源项目衍生出来的。虽然Red Hat OpenShift和Kubernetes都是容器编排软件,但Red Hat OpenShift是作为一个下游的企业级开源平台打包发布的。
OpenShift Virtualization的operator提供了很多企业级虚拟化功能,比如在线迁移、高可用性、系统调度、电源管理、镜像管理、快照、精简配置和监控。
装了Virtualization operator的Red Hat OpenShift,可以从一个通用的界面同时管理容器和虚拟机,这可太方便了!我们来看看容器化的KVM图示
Kubernetes 回顾
相信你也看出来了,OpenShift 和Kubernetes的关心很紧密,我们来快速回顾一下kubernetes的概念
kubernetes这玩意儿简直是容器化应用的超级管家,能把部署、管理和扩展这些事儿搞得轻松又高效。
想象一下,Kubernetes就像一个超级能干的指挥官,它能创建一个集群,让应用在多个节点上跑起来,还能管好一堆资源,像CPU、内存、存储和网络这些。要是某个节点突然挂了,别担心,Kubernetes能迅速在别的节点上重启应用,保证应用一直在线,简直是个“救火英雄”。
而且,Kubernetes用的是一种声明式配置模型,特别有意思。管理员只需要写清楚在集群里要运行的工作负载是什么样,剩下的事儿就交给Kubernetes搞定。它会确保运行中的工作负载和定义的一模一样。比如,管理员定义了几个工作负载,每个工作负载需要多少内存都写清楚了。Kubernetes就会在不同的节点上创建必要的容器,满足这些内存需求。
Kubernetes里有个很重要的概念叫Pod,Pod就是在一个集群节点上运行的一个或多个容器。有时候,两个容器需要在同一个节点上跑,共享一些资源,这种情况下Pod就特别有用。比如,有个任务要在Pod里跑,直到完成,这就是一个工作负载。
Kubernetes还有好多厉害的功能,这些功能和虚拟机也能搭配使用:
服务发现和负载均衡:要是应用分布在多个节点上,通信就会变得很复杂。Kubernetes自动搞定网络配置,还提供DNS服务,让Pod之间可以通过主机名透明地通信,不用操心IP地址。而且,多个Pod可以支持一个服务,这样既能提高性能,又能保证可靠性。比如,Kubernetes能把进来的请求均匀分配到多个NGINX Web服务器上,根据NGINX Pod的可用性来分配。
自我修复:如果应用定义了健康检查流程,Kubernetes就能监控、重启和重新调度那些失败或不可用的应用。这个功能就像是给应用上了“双保险”,无论是应用自己突然挂了,还是运行应用的节点出了问题,都能搞定。
Operator:Operator就像是打包好的Kubernetes应用,专门用来管理在Kubernetes集群里部署的应用的整个生命周期。开源的Operator框架提供了编写Operator的指南,这些Operator用Kubernetes API给集群增加功能。每个集群可以根据自己的需求,添加带有必要环境和功能的Operator。
OpenShift集群管理的增强
OpenShift这玩意儿简直就是Kubernetes上的“豪华升级版”,它把一堆好用的模块和功能打包在一起,让集群管理变得超方便。
开发者工作流
OpenShift里有个内置的容器镜像仓库,这就好比是容器的“家”,方便你存放和管理镜像。还有CI/CD流水线,这东西就像是一条高效的生产线,能自动帮你把代码从开发到部署一路搞定。更有意思的是Source-to-Image(S2I),这个工具能把源代码直接变成容器镜像,简直是开发者的“加速器”。
监控和日志
它自带了一个超厉害的监控服务,能实时分析集群的各种数据,就像一个“健康医生”,随时检查集群的状况。而且,它还集成了基于Prometheus的聚合日志功能,这就好比是集群的“黑匣子”,记录下所有重要的信息,方便你随时查看。
统一界面
OpenShift提供了一个超级好用的统一工具集和集成的用户界面,这就像是一个“控制中心”,让你能轻松管理集群的所有功能。不管你是在配置资源、部署应用还是监控状态,都能在一个界面上搞定,特别方便。
核心功能
Red Hat在OpenShift里还强化了一些关键功能,比如Stateful Sets(有状态集合),这东西特别适合那些需要持久化存储的应用,能保证应用的状态不会丢失。还有基于角色的访问控制(RBAC),这就好比是给集群设置了一道“安全门”,只有授权的用户才能访问特定的资源。网络策略也特别好用,能让你精细地控制容器之间的通信。
关键组件
Red Hat还提供了Kubernetes的核心组件,比如etcd键值存储。etcd就像是Kubernetes的“大脑”,它保存了集群的配置信息,是整个集群正常运行的关键。
Virtualization Operator
Red Hat OpenShift Virtualization可是OpenShift上的一个超厉害的Kubernetes扩展,专门用来搞虚拟化。它基于KubeVirt这个Kubernetes虚拟化插件,KubeVirt用的是Linux内核的KVM虚拟化技术,把虚拟机直接跑在Kubernetes容器里,实现了“容器原生虚拟化”。
KubeVirt不仅继承了传统虚拟化平台的各种功能,还完美结合了Kubernetes强大的容器编排能力。它就像是把虚拟化和容器化这两个世界最好的东西融合在一起。KubeVirt最早是Red Hat发起的,现在已经成为Cloud Native Computing Foundation(CNCF)孵化项目,还是一个开源的上游项目。
下面这张图展示了组成Red Hat OpenShift集群的各种资源和服务,包括自助服务管理员的命令行和Web界面。
OpenShift 虚拟化的优势
OpenShift集群加上OpenShift Virtualization,这事儿可太棒了!这样一来,你就能在同一个硬件、环境和工具集里,同时部署和管理虚拟化工作负载和容器化应用。把虚拟机和容器化部署放在同一个集群里管理,不仅能让管理员省心,还能省钱,一举两得!
OpenShift Virtualization把下面这些操作符和组件都整合到了一起:
OpenShift Virtualization操作符
OpenShift Virtualization是一种开源技术,能让虚拟机在Red Hat OpenShift里跑起来,就像是跑容器一样简单。它基于上游的KubeVirt项目,让传统的虚拟机也能享受容器的待遇。
超融合操作符(HCO)
HCO负责部署和管理虚拟化组件,以及一些补充的操作符,比如容器化数据导入器(CDI)。有了它,OpenShift Virtualization的各种组件都能轻松搞定。
主机路径供应操作符(HPP)
HPP操作符是个本地存储供应器,专门给虚拟机用。它能把节点上的本地存储或者挂载的卷分配给虚拟机实例(VMI),让虚拟机也能用上本地存储。
QEMU代理
QEMU代理是个守护进程,它在虚拟机里跑,然后把虚拟机的信息,比如用户、文件系统、辅助网络这些,传给宿主机。这就像是虚拟机和宿主机之间的“信使”。
基于内核的虚拟机(KVM)
KVM是一种开源虚拟化技术,它嵌入在Linux内核里。有了KVM,宿主机就能同时跑多个隔离的虚拟环境,也就是虚拟机。这就像是在一台电脑里变出了好多台“小电脑”。
容器化数据导入器(CDI)
CDI是Kubernetes的一个上游组件,它提供了一个硬件无关的存储卷管理层,能让存储卷轻松地连接到部署的实例上。这就像是给存储卷找了个“中间人”,让它们能顺利地和应用对接。
虚拟机控制台
你可以用命令行工具、Web控制台,还有常见的协议(比如Windows虚拟机用的远程桌面协议RDP,或者SSH)来连接虚拟机。这就像是给虚拟机开了好多扇“门”,让你能从不同方式进去操作。
独立虚拟机实例(VMI)
你可以用命令行和Web控制台来管理那些独立于OpenShift集群创建的VMI,比如用脚本、自动化工具或者其他命令行方法创建的VMI。这就像是给了这些独立的VMI一个“家”,让它们也能被统一管理。
通过本文的介绍,我们了解了虚拟化的基本概念、虚拟化与云计算的关系、虚拟机与容器的区别,以及OpenShift Virtualization的强大功能。OpenShift Virtualization不仅整合了虚拟化和容器化的优点,还通过统一的管理界面,极大地简化了运维工作,是现代数据中心的理想选择。