🪩从0到1,利用kubevirt构建ubuntu虚拟机

type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary

kubevirt是什么

  • 一个开源项目,CNCF sandbox
  • 将虚拟机(VM)运行引入了 k8s 集群中,使得用户可以在 k8s 中同时管理容器和虚拟机工作负载
  • 帮助企业和开发者通过 k8s 统一管理虚拟机和容器,方便地运行和迁移传统的虚拟机工作负载到云原生环境中
特点
  1. 虚拟机和容器共存:KubeVirt 将虚拟机作为 Kubernetes CRD 来进行管理,从而允许在 Kubernetes 集群内同时调度和运行虚拟机和容器
  1. Kubernetes 原生支持:KubeVirt 完全整合到 Kubernetes 生态系统中。通过 Kubernetes API,用户可以像管理容器一样管理虚拟机(VM),包括启动、停止、扩展、迁移等操作
  1. 支持传统和现代应用:通过 KubeVirt,可以将遗留系统或传统应用程序从虚拟化平台迁移到 Kubernetes,方便地与现代云原生应用程序一起运行,助力企业数字化转型。
  1. 无缝的网络和存储集成:KubeVirt 使用 Kubernetes 的网络和存储资源,这意味着虚拟机可以使用 Kubernetes 的网络插件(如 Calico、Flannel 等)和持久存储卷(如 NFS、Ceph 等)
  1. 虚拟机的动态调度和负载均衡:KubeVirt 支持虚拟机的动态调度和负载均衡功能,可以根据集群状态自动调度虚拟机到合适的节点
  1. Live Migration(在线迁移):KubeVirt 支持虚拟机的在线迁移功能,即在不中断服务的情况下将虚拟机从一个节点迁移到另一个节点
  1. 支持多种操作系统:KubeVirt 支持运行多种操作系统,包括 Linux 和 Windows。这使得它在多种业务场景下都能胜任
 

kubevirt架构

 
 
notion image
kubevirt以CRD的形式将VM管理接口接入到kubernetes中,通过一个pod去使用libvirtd管理VM的方式,实现pod与VM的一一对应,做到如同容器一般去管理虚拟机,并且做到与容器一样的资源管理、调度规划
 
  1. VirtualMachine(VM):这是 KubeVirt 中的核心资源类型。每个 VirtualMachine 对象定义了虚拟机的配置,比如 CPU、内存、磁盘、网络等信息
  1. VirtualMachineInstance(VMI):当你启动一个虚拟机时,会创建一个 VMI 对象,表示该虚拟机的运行实例。这个对象包含虚拟机的运行时状态信息
  1. virt-api:其是所有虚拟化操作的入口,包括常规的CRD更新验证、console、vm 的start和stop操作
  1. virt-controller:其是 KubeVirt 的控制器,负责监视和管理 VirtualMachine 和 VirtualMachineInstance 的生命周期,比如启动、停止、重启和迁移等操作
  1. virt-handler:其会以deamonset的形式部署在每一个node上,负责监控node上的每个虚拟机实例状态变化
  1. virt-launcher:这是一个短生命周期的 Pod,每个 VMI 都会有一个对应的 virt-launcher Pod,负责在节点上启动和管理实际的虚拟机进程
 
 
  1. virt-launcher-m: 这是一个管理虚拟机的进程,负责启动和管理虚拟机实例。它是 Kubernetes 中 KubeVirt 的一部分,KubeVirt 用于在 Kubernetes 环境中运行虚拟机。
  1. qemu-kvm: 是虚拟机的实际运行进程,负责运行用户自定义的镜像操作系统,模拟虚拟的硬件环境,包括CPU、内存、磁盘和网络情况
  1. 子进程: 在进程树中,可以看到许多子进程:
  • 5*[{qemu-kvm}]: 这是 qemu-kvm 的工作线程,表明有 5 个线程在处理虚拟机的请求。
  • virtlogd: 这是一个用于管理虚拟机日志的守护进程,负责收集和存储虚拟机的日志信息。
  • virtqemud: 这是一个用于管理 QEMU 实例的守护进程,也可能有多个线程(18*[{virtqemud}] 表示有 18 个线程)。
4.进程树的结构: 每一层的缩进表示进程之间的父子关系。例如,virt-launcher 是 virt-launcher-m 的子进程,而 qemu-kvm 是 virt-launcher-m 的子进程。
 
 
 

deploy kubevirt & install virtctl

 

构建基础镜像

首先,选择基础镜像,这里我们选择 ubuntu22.04LST
 

安装需要的包

设置登陆密码

 

将创建的 user-data转化为qemu可以使用的img格式的文件

 

默认的系统盘只有2G,后续安装可能会爆磁盘空间不足的错误,可以提前扩容(正好凑够20G,按需扩容)

启动虚拟机

 

配置root密码、开启自启动DHCP

下载docker并设置自启动

 

最终

此时的img就是一个包含我们自己安装的img了,可以按需,利用此基础镜像img进行扩展
 
可以将此img镜像打包为docker镜像进行保存
 

构建VM

 
 
运行
Prev
HAMI 与Device Plugin
Next
iptables in linux
Loading...
Article List