1
2
3
4
5
作者:李晓辉

微信联系:lxh_chat

联系邮箱: 939958092@qq.com

什么是 KubeVirt?

KubeVirt 是一个开源的 Kubernetes 插件,它将虚拟化功能引入 Kubernetes 集群中,使用户可以在同一平台上管理容器和虚拟机。这种混合管理能力为用户提供了更大的灵活性,特别是在需要逐步迁移传统工作负载到容器化平台时。

KubeVirt 的目标是让虚拟机成为 Kubernetes 中的原生资源,利用 Kubernetes 提供的调度、网络和存储功能来管理虚拟机。这种统一的管理方式简化了运维的复杂性,使得用户能够更高效地管理和使用集群资源。

KubeVirt 的主要特点包括:

  1. 无缝集成: KubeVirt 将虚拟机作为 Kubernetes 的原生资源,利用 Kubernetes 提供的调度、网络和存储功能来管理虚拟机。
  2. 统一管理: 用户可以使用同样的工具和流程来管理容器和虚拟机,简化了运维管理的复杂度。
  3. 高效资源利用: 通过在同一集群中运行容器和虚拟机,KubeVirt 提高了资源的利用率,并简化了基础设施管理。
  4. 灵活性: 支持多种虚拟机操作系统和配置,满足不同应用场景的需求。
  5. 扩展性: 通过自定义资源 (CRD) 扩展 Kubernetes API,支持更多的虚拟机管理功能。

KubeVirt 组件与架构

以下为KubeVirt的大概层级关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  +---------------------+
| KubeVirt |
~~+---------------------+~~
| Orchestration (K8s) |
+---------------------+
| Scheduling (K8s) |
+---------------------+
| Container Runtime |
~~+---------------------+~~
| Operating System |
+---------------------+
| Virtual(kvm) |
~~+---------------------+~~
| Physical |
+---------------------+

以下为KubeVirt的组件和架构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
+--------------------------------------------+
| KubeVirt Operator |
| |
| 1. 确保所有 KubeVirt 组件按期望配置运行 |
| 2. 处理组件的升级和维护 |
+--------------------------+-----------------+
|
v
+--------------------------+-----------------+
| Kubernetes API Server |
| |
| 1. 接收用户的 VirtualMachine 配置 |
| 2. 提供集群状态和资源信息 |
+--------------------------+-----------------+
|
v
+--------------------------+-----------------+
| Virt-Controller |
| |
| 1. 监控 Kubernetes API 中的 VirtualMachine |
| 2. 创建/更新相应的虚拟机实例 |
| 3. 处理虚拟机的启动、停止和删除请求 |
+--------------------------+-----------------+
|
v
+--------------------------+-----------------+
| Kubernetes Scheduler |
| |
| 1. 根据资源需求和调度策略选择节点 |
+--------------------------+-----------------+
|
v
+--------------------------+-----------------+
| Kubernetes Node |
| |
| +----------------------+ +--------------+|
| | Virt-Handler | | Virt-Launcher||
| |----------------------| |--------------||
| | 1. 收集虚拟机状态和性能| | 1. 运行虚拟机实例 |
| | 2. 处理生命周期事件 | | 2. 包含 libvirt 实例 |
| +----------------------+ +--------------+|
+--------------------------+-----------------+
|
v
+--------------------------+-----------------+
| Containerized Data Importer (CDI) |
| |
| 1. 从外部数据源导入数据到数据卷 |
| 2. 提供持久化存储支持 |
+--------------------------+-----------------+

KubeVirt 架构流程详解

  1. KubeVirt Operator:首先安装并确保所有 KubeVirt 组件按期望配置运行,并自动处理升级和维护。KubeVirt Operator 负责安装和管理 KubeVirt 的各个组件。它确保所有 KubeVirt 组件都按照期望的配置运行,并能自动处理组件的升级和维护。

  2. 用户通过 kubectl 提交 VirtualMachine 配置:用户使用 kubectl 提交一个 VirtualMachine YAML 文件到 Kubernetes API Server。

  3. Kubernetes API Server:接收并保存 VirtualMachine 配置,同时提供集群状态和资源信息。

  4. Virt-Controller:Virt-Controller 是一个控制器管理器,负责处理 VirtualMachine 对象的生命周期。它监控 Kubernetes API 中的 VirtualMachine 对象,并创建或更新相应的虚拟机实例。它还处理虚拟机的启动、停止和删除请求。

  5. Kubernetes Scheduler:根据虚拟机的资源需求和调度策略选择合适的节点运行虚拟机实例。

  6. Virt-Handler:Virt-Handler 运行在每个节点上,负责与 Virt-Launcher Pod 通信,并收集虚拟机的状态和性能数据。它还处理虚拟机的生命周期事件,如启动和停止。

  7. Virt-Launcher:Virt-Launcher 是一个特殊的 Pod,它运行虚拟机实例。每个 Virt-Launcher Pod 内包含一个 libvirt 实例,负责实际的虚拟机运行。Virt-Launcher Pod 使用 Kubernetes 的调度和生命周期管理特性来管理虚拟机实例。

  8. Containerized Data Importer (CDI):CDI 是一个辅助组件,用于导入和管理虚拟机的数据卷。它支持从多种数据源(如 HTTP、S3)导入数据,并为虚拟机提供持久化存储。