1、KubeVirt 相关概念
Kubevirt 是Redhat开源的以容器方式运行虚拟机的项目,利用 k8s CRD为增加资源类型VirtualMachineInstance(VMI), 使用容器的 image registry 去创建虚拟机并提供VM生命周期管理。
KubeVirt 目的是让虚拟机运行在容器中,KubeVirt 提供的基本操作如下:
- create & start 虚拟机
- vnc 登录 虚拟机
- stop & delete 虚拟机
Disks and Volumes 区别
在计算机存储的上下文中,Disks(磁盘)和 Volumes(卷)是两个相关但不同的概念。
磁盘(Disks)通常是指物理存储介质,例如硬盘驱动器或固态硬盘。磁盘可以被划分成一个或多个分区,每个分区可以被格式化为一个文件系统,以便在上面存储数据。磁盘通常由操作系统管理,它们可以被分配给不同的应用程序或用户。
卷(Volumes)通常是指逻辑存储单元,它们可以是磁盘分区、硬盘卷、网络存储设备等。卷是一种抽象概念,它们可以被格式化为文件系统,并被操作系统分配给应用程序或用户。卷通常由文件系统管理,它们可以被动态地扩展或收缩,以适应不同的存储需求。
总之,磁盘是物理存储介质,而卷是逻辑存储单元。磁盘可以被分区并格式化为一个或多个卷,而卷可以动态地扩展或收缩以适应不同的存储需求。
磁盘可以被划分为一个或多个分区,并且每个分区可以被格式化为一个文件系统并被挂载到一个挂载点上。卷可以是磁盘分区、硬盘卷、网络存储设备等。因此,在某些情况下,磁盘可以被挂载为一个卷,然后使用该卷来存储数据。
2、KubeVirt 基本组件
组件 | 类型 | 作用 |
---|---|---|
virt-api | Deployment | 主要REST API服务,负责接收虚机的操作接口,比如许多自定义的 API 请求,如开机、关机、重启等操作。 |
virt-controller | Deployment | 管理和监控 VMI 对象及其关联的 Pod,对其状态进行更新 |
virt-handler | Daemonset | 1.以 Daemonset 形式部署,功能类似于 Kubelet,通过 Watch 本机 VMI 和实例资源,管理本宿主机上所有虚机实例;2.主要执行的动作有:向集群汇报及控制更新虚拟机状态;- 调用相关节点级的插件初始化节点上网络和存储资源;热迁移相关操作; |
virt-launcher | Pod | virt-handler 通过将 VMI 的 CRD 对象传递给 virt-launcher 来通知 virt-launcher 启动 VMI。然后,virt-launcher 在其容器中使用本地 libvirtd 实例来启动 VMI。virt-launcher 托管 VMI 进程,并在 VMI 退出后终止。 |
virtctl | virtctl是kubevirt自带的命令行工具,和kubectl的性质一样,但不同于kubectl的是,virtctl和virt-api进行交互,从而进行虚拟机的删除,创建,更新等操作。virtctl是kubevirt自带类似kubectl的命令行工具,它是越过virt-launcher pod这一层去直接管理VM虚拟机,可以控制VM的start、stop、restart。 |
3、两种资源 VM & VMI
- VM资源: 为群集内的
VirtualMachineInstance
提供管理功能,例如开机/关机/重启虚拟机,确保虚拟机实例的启动状态,与虚拟机实例是 1:1 的关系,类似与spec.replica
为 1 的StatefulSet
。 - VMI( VirtualMachineInstance )资源: 类似于 kubernetes Pod,是管理虚拟机的最小资源。一个
VirtualMachineInstance
对象即表示一台正在运行的虚拟机实例,包含一个虚拟机所需要的各种配置。