KubeVirt Kubernetes 虚拟化 API 和运行时,用于定义和管理虚拟机。KubeVirt 于 2019 年 9 月 6 日被 CNCF 接受,并于 2022 年 4 月 19 日转入孵化成熟度级别。
介绍
KubeVirt 是一个开源项目,它允许用户在 Kubernetes 作为底层编排平台的基础上,运行、部署和管理虚拟机(VM)。
其核心理念是实现容器原生虚拟化,这意味着虚拟机被打包在容器中,并与容器化微服务和云原生应用在同一个平台上运行和管理。
KubeVirt 是由 云原生计算基金会(CNCF) 赞助的孵化项目,也是红帽 ® OpenShift® 虚拟化的开源基础。
KubeVirt 如何运作?
KubeVirt 通过扩展 Kubernetes API 来工作,使 Kubernetes 能够将虚拟机(VMs)视为一种新的资源类型。
- 统一管理: 容器和虚拟机可以共享同一个集群、节点和网络,从而可以在一个控制台下管理这两种工作负载。
- Kubernetes 集成: 虚拟机可以通过与其他 Kubernetes 资源(如 Pod、Service 等)相同的方式进行交互、部署和管理。
- 充分利用 Kubernetes 功能: 虚拟机可以受益于 Kubernetes 的原生高级功能,例如网络策略、存储管理、自动伸缩和一致的安全策略。
主要特点和优势
- 整合传统与云原生: 允许组织在不放弃 Kubernetes 优势的情况下,继续运行和管理传统的虚拟机工作负载。
- 实时迁移: 支持虚拟机的实时迁移,即在不中断虚拟机访问的情况下,将其从一台主机移动到另一台主机。这对于需要确保持续正常运行的关键虚拟机非常重要。
- 更高的效率和可移植性: 结合了容器的敏捷性和虚拟机的隔离性。
- 一致的安全防护: 充分利用 Kubernetes 原生安全防护的优势,确保在包括虚拟机在内的所有环境中一致地应用策略。
安装
组件
| 分类 |
组件 |
部署方式 |
功能说明 |
| 控制面 |
virt-api |
deployment |
自定义 API,开机、关机、重启等,作为 apiserver 的插件,业务通过 k8s apiserver 请求 virt-api。 |
| 控制面 |
virt-controller |
deployment |
管理和监控 VMI 对象的状态,控制 VMI 下的 pod。 |
| 计算节点 |
virt-handler |
daemonset |
类似 kubelet,管理宿主机上的所有虚拟机实例。 |
| 计算节点 |
virt-launcher |
virt-handler pod |
调用 libvirt 和 qemu 创建虚拟机进程。 |
自定义 CRD 对象
| 分类 |
CRD 对象 |
功能说明 |
| 虚机 |
VirtualMachineInstance(VMI) |
代表运行的虚拟机实例 |
| 虚机 |
VirtualMachine(VM) |
虚机对象,提供开机、关机、重启,管理 VMI 实例,与 VMI 的关系是 1:1 |