什么是KubeVirt

在软件领域的革命力量是将应用程序容器化并使用Kubernetes进行管理。这是许多公司转向Kubernetes的原因。然而,让一些云原生应用在Kubernetes平台上运行,而其他应用在非Kubernetes平台上运行可能会变得复

发团队想要使用Kubernetes但难以将运行的VM工作负载容器化的需求。本文将讨论有关KubeVirt的所有内容,包括其优势、特性和用例。

 

什么是KubeVirt

 

KubeVirt是一个Kubernetes扩展,允许用户在其Kubernetes或OpenShift集群中本地运行传统虚拟机(VM)工作负载和容器工作负载。

在今天数字化的环境中,灵活性和可伸缩性至关重要。然而,传统的虚拟化工具通常难以满足现代业务不断发展的需求。有了KubeVirt,您就得到了一座桥梁,将容器化的敏捷性、有效性与传统虚拟机的世界连接起来。这项技术允许Kubernetes使用与容器化工作负载相同的工具来管理、部署和调度虚拟机。这消除了需要使用管理工具和专门监控的独立环境。

无法过分强调KubeVirt对那些希望更新其虚拟机工作负载但对处理这一切感到不知所措的公司的好处。

KubeVirt为开发人员提供了一个统一的平台,可以立即修改和构建基于VM和容器的应用程序。随着时间的推移,可以开始通过将其分解成微服务来将虚拟化应用程序容器化。

 

在Kubernetes中使用KubeVirt进行虚拟化的优势

当您为VM工作负载或容器化工作负载维护多个基础架构时,您会保留网络、调度能力、度量、日志和监控的分层。

使用KubeVirt,您可以利用Kubernetes运行容器工作负载和VM工作负载,并获得相同的优势。以下是KubeVirt在运行Kubernetes中的虚拟化方面出色的原因:

  • 无缝集成: 通过KubeVirt,虚拟机和容器之间的界限变得模糊,因为两者在同一个Kubernetes平台上共存。您不再需要单独的管理工具或不协调的工作流程。
  • 实时迁移: KubeVirt的一个突出特点是实时迁移。这使您能够在主机之间移动正在运行的虚拟机,而无需中断服务。使用KubeVirt,您可以无缝迁移虚拟机以优化性能、平衡工作负载或在保持业务连续性的同时执行维护任务。
  • 高安全性: KubeVirt继承了Kubernetes的安全功能。这确保您的虚拟机具有强大而安全的环境。您还可以利用Kubernetes的RBAC(基于角色的访问控制)和网络策略来执行细粒度的访问控制。这将有助于隔离您的虚拟化工作负载并在集群内安全通信。
  • 集中管理: 集中容器和VM管理简化了基础架构堆栈,同时提供了一些不太明显的好处。通过消除对单独的容器和VM管道的需求,KubeVirt减轻了DevOps团队的压力,加快了日常程序。随着将更多VM迁移到Kubernetes,您还可以在公用事业和软件方面节省费用。
  • Zero Super Manager Tax: KubeVirt protects you from super manager tax. You can eliminate the need to license and use a hypervisor to run VMs associated with your application. By leveraging Kubernetes’ ability to schedule and package virtual applications, you can reduce your infrastructure footprint in the long run.

 

KubeVirt的组件

要了解KubeVirt的内部工作原理,熟悉其关键组件至关重要。通过掌握每个组件的目的和功能,您将更好地了解如何在Kubernetes环境中有效地利用KubeVirt。让我们深入了解KubeVirt的核心组件:

  • Virt-controller: 负责在KubeVirt中编排虚拟机的关键组件。它还是负责集群范围虚拟化功能的Kubernetes Operator。Virt-controller注意到发布到API服务器的新VM对象。一旦这样做,它就会在VM将运行的Pod中创建。一旦Pod被自动调度到特定节点,virt-controller就会将VM对象更改为节点名称。然后,它将进一步的责任移交给在集群中的每个节点上运行的virt-handler节点。
  • Virt-handler: 与virt-controller一样,virt-handler也是一种反应灵敏的组件。它监视VM对象的更改并执行所有必要的过程以更改VM以满足所需的状态。virt-handler在VM Pod中使用libvirtd实例引用VM规范并发送信号表明已创建了适当的域。一旦删除VM对象,virt-handler将监视删除并关闭域。
  • Virt-launcher: KubeVirt为每个VM对象创建一个Pod。然后,Pod的主容器运行virt-launcher KubeVirt组件。virt-launcher Pod的主要目标是提供将承载VM进程的命名空间和cgroups。virt-handler通过将VM的CRD对象交给virt-launcher向virt-launcher发出启动VM的信号。然后,virt-launcher在其容器内使用本地libvirtd实例启动VM。一旦发生这种情况,virt-launcher将监视VM进程并在虚拟机退出后终止。

有时,Kubernetes运行时可能会尝试在VM进程完成之前关闭virt-launcher Pod。当这种情况发生时,virt-launcher将向VM进程转发信号,并尝试减缓Pod的终止,直到虚拟机成功关闭

。此外,每个VM Pod都有一个libvirtd的实例。virt-launcher从libvirtd运行VM进程的生命周期。

 

  • 网络和存储

 

由卷支持的磁盘可能配置KubeVirt VM。其中一些卷包括:

Persistance Volume Claim(PVC): 类似于Pod,这是用户请求存储的方式。卷使Kubernetes持久卷可以直接附加到KubeVirt VM作为磁盘。目前,存在一个限制,即持久卷必须是Internet Small Computer Systems Interface(ISCSI)块设备。然而,正在努力支持基于文件的持久卷磁盘,为KubeVirt VM提供更灵活的存储选项。

临时卷: KubeVirt使用临时卷,这是依赖于只读网络卷作为支持存储的本地写时复制图像。这些临时图像在VM启动时由KubeVirt生成和支持,然后在VM停止时丢弃。目前,PVC卷必须支持临时卷。

 

KubeVirt的特性

KubeVirt是一个开源项目,使虚拟机(VMs)和容器化工作负载能够在Kubernetes集群中共存。KubeVirt的几个特性使其适用于现代企业。其中之一是其无缝集成到现有Kubernetes部署的能力,为已经使用容器编排的组织提供了便利的选择。另一个值得注意的特性是其统一的管理界面,使IT专业人员能够使用熟悉的Kubernetes API和工具来管理VM和容器。

KubeVirt的一个突出特点是其能够在嵌套容器中启用虚拟化。嵌套容器虚拟化是指在VM内运行容器,然后在这些容器内运行其他容器。这种方法允许实现高级用例,如在传统VM环境中运行容器化应用程序或在具有不同隔离级别的复杂多层应用程序中部署。

要利用KubeVirt等技术,Kubernetes部署必须在裸机服务器上运行,因为对于嵌套虚拟化的支持较少。不幸的是,裸机服务器很昂贵,因为单个应用程序只需要节点上的一些可用资源,并且裸机服务器没有基本的配置。**

 

KubeVirt的用例

KubeVirt支持无限数量的VM,允许您存储持久数据。因此,KubeVirt有许多用例:

 

  • 管理传统工作负载

KubeVirt是一个高效的应用程序编排引擎,可减少分布式计算的复杂性。当您将基于VM和容器的工作负载组合在一起时,您无需保留单独的环境、人员或技能集。因此,通过以声明方式创建VM并使用Kubernetes命令和virtctl进行管理,将VM-based工作负载更接近DevOps工作流变得更容易。与构建容器化和VM-based工作负载的分开的DevOps流水线不同,您可以从一个地方组合并管理它们。

 

  • 与传统应用程序合作

您不能简单地将某些应用程序迁移到云原生环境。有了KubeVirt,您可以将在物理或虚拟服务器上运行的任何应用程序移动到使用Kubernetes Pod中的virt-launcher进行管理的VM。这意味着您可以在云原生环境中使用Kubernetes来管理由不同技术或您无法重新设计的旧应用程序构成的应用程序。在KubeVirt中,运行主机软件或需要与传感器或其他基础设施连接的应用程序可能会变得更加复杂。但是,通过使用容器环境将当前VM与遗留硬件和软件连接起来,KubeVirt可以在今天的体系结构和开发流程中集成传统应用程序。

 

  • 最终总结

数据中心IT的两个关键技术是虚拟化和容器化。由于其可移植性和可伸缩性,基于容器的工作负载开始取代基于虚拟化的工作负载。有了KubeVirt,您可以在与托管微服务的容器并行运行的同时,由Kubernetes运行和控制VM。KubeVirt使先进的虚拟化与Kubernetes容器编排相结合成为可能。您得到了两全其美的最佳选择!

text written by:

Marcin Kubacki, CSA at Storware