Kubevirt 是Redhat开源的以容器方式运行虚拟机的项目,以k8s add-on方式,利用k8s CRD增加一种自定义资源类型:VirtualMachineInstance(VMI), 使用容器的image registry去创建虚拟机并提供VM生命周期管理。kubevirt目前支持的runtime是docker和runv。
KubeVirt 技术对于已采用或想要采用Kubernetes进行业务开发的用户来说,可以通过该技术满足以下三类主要的需求场景:
- 利用kubevirt和kubernetes来管理那些无法进行容器化改造的虚拟化应用
- 在统一的平台上联合现有的虚拟化工作负载和新建的容器工作负载
- 新开发的容器微服务应用可以轻松的和已有的虚拟化应用进行内部交互访问
对于依赖现有基于虚拟机的工作负载团队讲有能力快速将应用程序容器化,同时仍然可以按需使用剩余的虚拟化组件。
Kubevirt架构如下图所示,由4部分组件组成:
- virt-launcher:kubevirt创建虚拟机的核心,通过一个特殊的pod,其中的子进程包括libvirtd和qemu。 kubevirt在每个VMI的 pod都会起一个libvirtd进程避免了因为 libvirtd 服务异常导致所有的虚拟机无法管理
- virt-controller:负责在kubernetes节点间调度VMI资源,生成对应的virt-launch