工作小记系列2:Kubevirt简介
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-launcher pod
- virt-handler:负责在kubernetes node节点上的业务逻辑控制和保持节点心跳。
- virt-api:提供虚拟机操作的入口,包括常规的CRD更新验证以及虚拟机生命周期管理操作
kubevirt技术架构
通过上述组件,kubevirt提供了完整的虚拟机创建流程:
- client 发送创建VMI命令达到k8s API server.
- K8S API 创建VMI
- virt-controller监听到VMI创建时,根据VMI spec生成pod spec文件,创建pods
- k8s调度创建pods
- virt-controller监听到pods创建后,根据pods的调度node,更新VMI的nodeName
- virt-handler监听到VMI nodeName与自身节点匹配后,与pod内的virt-launcher通信,virt-laucher创建虚拟机,并负责虚拟机生命周期管理
当前kubevirt可支持多种虚拟机操作和功能特性,包括虚拟机启停,重启,暂停和恢复,重命名,热迁移、热插拔卷,虚拟机快照和大页等特性
参考文献:
[1] KubeVirt.io
版权声明:本文为sxmatch原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。