KubeVirt 01:KuberVirt 架构

文章大纲

KubeVirt 通过在 Kubernetes 运行的容器中基于 KVM 来提供容器云原生的虚拟化。KubeVirt 为 Kubernetes 构建了一组虚拟化 API ,可用于管理虚拟机的工作负载。

Stack

官网上介绍了整个 KubeVirt 的 Stack:

  +---------------------+
  | KubeVirt            |
~~+---------------------+~~
  | Orchestration (K8s) |
  +---------------------+
  | Scheduling (K8s)    |
  +---------------------+
  | Container Runtime   |
~~+---------------------+~~
  | Operating System    |
  +---------------------+
  | Virtual(kvm)        |
~~+---------------------+~~
  | Physical            |
  +---------------------+

KubeVirt 提供虚拟化功能,编排和调度都是借助 K8S 来完成的。VM 作为容器运行的,所以还需要 Container Runtimer,整个 K8S 可以选择部署在物理机或虚拟机上。

KubeVirt 组件

以下是 KubeVirt 的架构:

KubeVirt 提供的组件有:

  • virt-api :提供 HTTP RESTful 接口来管理集群内的虚拟机和虚拟机相关的工作流,负责更新虚拟化 CRD,也负责 VMI CRD 的默认设置和验证。它是一个集群级别的组件。
  • virt-controller :负责集群范围的虚拟化功能,管理与 VMI 关联的 Pod 的生命周期。它是一个集群级别的组件。
  • virt-handler :在各个节点上运行的 DaemonSet 资源,用于监控 VM 对象的更改,以及执行必要的操作来达到所需状态。
  • virt-launcher :VMI 相关的 Pod 中包含了一个 virt-launcher 组件,用于提供 CGroup 和命名空间来托管 VMI 进程,当 VM CRD 对象通过 virt-handler 组件传递给 virt-launcher 时,将使用 Pod 中的 libvirtd 容器来启动 VMI,virt-launcher 将监控 VMI 进程,直至 VMI 终止时退出。

所以使用 KubeVirt 创建 VM 的流程可以概括为:
创建 VM 时,virt-controller 会向集群节点上的 virt-handler 发出信号,virt-handler 会为新的 VMI 创建 virt-launcher Pod,在 virt-launcher Pod 中将运行一个 libvirtd 的容器,以便将 VMI 作为一个孤立的进程来执行。

官网提供了一个简化的架构图:

所以位于 Master 上的是集群级别的组件,控制器(virt-controller)和 API(virt-api)

VM 与 VMI

在 KubeVirt 中,VM 是一个模板,用于在集群中创建 VM 的运行实例。
VM 的运行实例就称为虚拟机实例 VMI,所以 VM 和 VMI 的关系类似于 Deployment 和 ReplicaSet 的关系。
如果 VMI 删除了,会根据 VM 自动的生成一个新的实例。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部