大家好,我是张晋涛。
上一篇文章 KubeVirt: 耗时 7 年终将虚拟机带入 Kubernetes 世界 | MoeLove 发布后,我收到了很多留言和讨论。限于篇幅,很多回答都比较简短,我想着还是写篇文章来详细聊聊关于 KubeVirt 的一些问题好了。
为什么要用 KubeVirt
有小伙伴问到 KubeVirt 的使用场景是什么?
按照官方文档的描述是:Building a virtualization API for Kubernetes,为 Kubernetes 构建一个虚拟化 API 扩展。这隐含的其实就是 KubeVirt 带来了一层抽象,一层基于 API 的抽象。
我们知道 Kubernetes 中提供了 CRD 的模式允许对 Kubernetes 进行扩展,也有很多的项目通过这种模式进行扩展,开发了对应的 Operator 之类的。为的就是能利用更多 Kubernetes 提供的能力。对于 KubeVirt 而言,它也是利用了 CRD 的这种模式,所以这方面它也一样。这些好处具体而言就是:
声明式配置:通过使用声明式配置的方式创建
VirtualMachine
类型的自定义资源来创建 VM,创建VirtualMachineInstance
类型的资源来描述虚拟机实例。这与我们在使用 Deployment 和 Pod 描述工作负载时的逻辑和体验基本类似,而且基本的一些操作经验等都是可以复用的;调度能力:Kubernetes 默认提供了对于工作负载的调度能力,并且还可以通过其他的方式对其进行扩展。利用 KubeVirt 部署时,同样的就获得了这些能力,由 Kubernetes 辅助我们进行虚拟机的调度,而不需要用户自行去进行管理和干预(除非有特殊的情况,可以进行声明);
资源请求和限制:Kubernetes 为我们提供了资源请求和限制的能力,通过 requests 和 limits 进行控制,对于通过 KubeVirt 部署的虚拟机也同样,可以通过这种方式来控制虚拟机可用的资源;
网络:在很多公司,有一些通过虚拟机运行的一些相对较旧的服务,在企业的云源生改造过程中,有时候可能发现这些服务很难和 Kubernetes 集群中的网络打通,或者是不易打通。这时候,通过 KubeVirt 部署在 Kubernetes 后,就直接拥有了与 Kubernetes 集群相同的网络,也就没有之前的烦恼了&#x