什么是 KubeVirt ?
Kubevirt 是Redhat開(kāi)源的以容器方式運(yùn)行虛擬機(jī)的項(xiàng)目,以k8s add-on方式,利用k8s CRD為增加資源類型VirtualMachineInstance(VMI), 使用容器的image registry去創(chuàng)建虛擬機(jī)并提供VM生命周期管理。 CRD的方式是的kubevirt對(duì)虛擬機(jī)的管理不局限于pod管理接口,但是也無(wú)法使用pod的RS DS Deployment等管理能力,也意味著 kubevirt如果想要利用pod管理能力,要自主去實(shí)現(xiàn),目前kubevirt實(shí)現(xiàn)了類似RS的功能。 kubevirt目前支持的runtime是docker和runv。
為什么使用 KubeVirt ?
KubeVirt 技術(shù)可滿足已采用或想要采用Kubernetes開(kāi)發(fā)團(tuán)隊(duì)的需求,但他們擁有現(xiàn)有的基于虛擬機(jī)的工作負(fù)載,無(wú)法輕松地對(duì)其進(jìn)行容器化。更具體地說(shuō),該技術(shù)提供了一個(gè)統(tǒng)一的開(kāi)發(fā)平臺(tái),開(kāi)發(fā)人員可以在該平臺(tái)上構(gòu)建,修改和部署駐留在公共共享環(huán)境中的應(yīng)用程序容器和虛擬機(jī)中的應(yīng)用程序。
好處是廣泛而重大的。依賴現(xiàn)有基于虛擬機(jī)的工作負(fù)載團(tuán)隊(duì)有權(quán)快速將應(yīng)用程序容器化。通過(guò)將虛擬化工作負(fù)載直接放置在開(kāi)發(fā)工作流中,團(tuán)隊(duì)可以隨時(shí)間分解它們,同時(shí)仍然可以按需使用剩余的虛擬化組件。
KubeVirt 能做什么 ?
- 利用 KubeVirt 和 Kubernetes 來(lái)管理虛擬機(jī)
- 一個(gè)平臺(tái)上將現(xiàn)有的虛擬化與容器化打通并管理
- 支持虛擬機(jī)應(yīng)用與容器化應(yīng)用實(shí)現(xiàn)內(nèi)部交互訪問(wèn)
KubeVirt 架構(gòu)
從kubevirt架構(gòu)看如何創(chuàng)建虛擬機(jī),Kubevirt架構(gòu)如圖所示,由4部分組件組成。從架構(gòu)圖看出kubevirt創(chuàng)建虛擬機(jī)的核心就是 創(chuàng)建了一個(gè)特殊的pod virt-launcher 其中的子進(jìn)程包括libvirt和qemu。做過(guò)openstack nova項(xiàng)目的朋友應(yīng)該比較 習(xí)慣于一臺(tái)宿主機(jī)中運(yùn)行一個(gè)libvirtd后臺(tái)進(jìn)程,kubevirt中采用每個(gè)pod中一個(gè)libvirt進(jìn)程是去中心化的模式避免因?yàn)?libvirtd 服務(wù)異常導(dǎo)致所有的虛擬機(jī)無(wú)法管理。

虛擬機(jī)創(chuàng)建流程
- client 發(fā)送創(chuàng)建VMI命令達(dá)到k8s API server.
- K8S API 創(chuàng)建VMI
- virt-controller監(jiān)聽(tīng)到VMI創(chuàng)建時(shí),根據(jù)VMI spec生成pod spec文件,創(chuàng)建pods
- k8s調(diào)度創(chuàng)建pods
- virt-controller監(jiān)聽(tīng)到pods創(chuàng)建后,根據(jù)pods的調(diào)度node,更新VMI 的nodeName
- virt-handler監(jiān)聽(tīng)到VMI nodeName與自身節(jié)點(diǎn)匹配后,與pod內(nèi)的virt-launcher通信,virt-laucher創(chuàng)建虛擬機(jī),并負(fù)責(zé)虛擬機(jī)生命周期管理
項(xiàng)目地址與快速使用
參考鏈接
本文由 YP小站 發(fā)布!