Kubernetes KubeVirt 让容器和虚拟机一起工作
在不讨论容器与虚拟机的优缺点的情况下,每个虚拟机或都包含其完整操作系统的实例,并且可以像独立服务器一样运行。相比之下,在容器化环境中,多个容器共享一个操作系统实例,而且绝大多数都是类Linux操作系统。
并非所有应用程序服务都能在容器中良好运行,因此企业需要同时运行这两种服务。
例如,对于LDAP/Active Directory应用程序、标记化应用程序和具有密集GPU需求的应用程序,虚拟机比容器更好。您可能还有一个遗留应用程序,由于某些原因(没有源代码、许可证问题、使用小众语言等)无法实现现代化,因此必须在虚拟机中运行,也有可能需要在特定的操作系统(如Windows)运行。
无论应用需要虚拟机或容器的原因是什么,运行和管理多个环境都会增加操作的复杂性,需要单独的控制平面和可能单独的基础架构技术栈。如果您需要运行一个或一小组虚拟机,那么这似乎不是什么大事。但如果您有许多这样的应用呢?如果您需要跨不同的云环境运行这些应用程序的多个实例,该怎么办?您的运维操作可能会很快变得非常复杂。
如果可以将虚拟机作为Kubernetes环境的一部分来运行,那不是很好吗?
这正是KubeVirt能够为您做到的。在这篇文章中,我将介绍KubeVirt是什么,使用它的好处,以及如何集成这项技术,以便您可以立即开始使用它。
什么是KubeVirt?
KubeVirt是一个Kubernetes插件,它为Kubernetes提供了在与容器相同的基础结构上提供、管理和控制虚拟机的能力。KubeVirt是由云原生计算基金会(CNCF)赞助的开源项目,目前正处于孵化阶段。
KubeVirt使Kubernetes能够使用与容器化工作负载相同的工具来调度、部署和管理虚拟机,从而消除了使用不同监视和管理工具的单独环境的必要性。为虚拟机和Kubernetes一起工作提供了可能。
使用KubeVirt,您可以声明:
创建虚拟机
在Kubernetes群集上调度虚拟机
启动虚拟机
停止虚拟机
删除虚拟机
虚拟机运行在Kubernetes pod中,并利用标准的Kubernetes网络和存储。
Kubernetes 架构
要更深入地连接KubeVirt的工作原理和所涉及的组件,请在kubernetes.io中查看KubeVirt的博客。
KubeVirt的优势有哪些?
KubeVirt与Kubernetes现有的功能和工具(如监控、日志记录、警报和审计)集成,主要优势包括:
集中式管理:使用一组工具管理VM和容器。
没有虚拟层性能损失:无需为虚拟机创建硬件虚拟层。
可预测的性能:KubeVirt使用Kubernetes CPU管理器将vCPU和RAM对应到虚拟机上,以满足需要可预测延迟和性能的应用。
虚拟机CI/CD:使用和容器应用相同的CI/CD工具集成和交付虚拟机应用。
授权管理:KubeVirt提供了一组基于RBAC的集群身份规则,用于管理访问KubeVirt资源的用户授权。
对VM和容器的集中化管理,简化了基础架构技术栈,并提供了各种好处。例如,采用KubeVirt可以消除对虚拟机和容器的不同流程,从而减少DevOps团队的运维工作,加快日常运维操作。此外,当更多虚拟机迁移到Kubernetes时,可以明显感觉到软件和实用程序使用成本的下降,更不用说虚拟层性能损失了。从长远来看,通过利用Kubernetes打包和调度虚拟应用程序的能力,您可以减少基础架构的资源消耗。
Kubernetes和KubeVirt提供更敏捷的部署速度、更低的成本和更简便的管理。使用Kubernetes自动化VM的生命周期管理,有助于整合虚拟化和容器化两者类型应用的CI/CD流程。通过统一使用Kubernetes对所有应用进行自动化测试和部署,可以减少部署应用时出错的风险并实现更快的迭代速度。
KubeVirt:挑战和最佳实践
在部署KubeVirt的时候有几个地方需要注意。首先,正如我上面提到的,之所以通过虚拟机,而不是容器来管理应用的原因之一就是应用需要使用例如GPU这样的专用硬件。在这种情况下,您需要确保集群中至少有一个节点包含必要的硬件,然后将包含VM的pod固定到具有该硬件的节点上运行。
与任何Kubernetes附件一样,当你有多个集群且运行在不同的环境中时,KubeVirt的管理复杂性也会大大提高。你需要确保KubeVirt在每个集群中以相同的方式部署,并且有可能会根据不同集群的硬件环境进行定制化部署。
最后,掌握Kubernete技能的技术人员现阶段仍是很紧俏的。而在KubeVirt上运行VM需要能够理解和编辑YAML配置文件。因此需要确保在KubeVirt上部署VM的从开发人员和运维人员都掌握相关的技能和工具。