首页 > 其他分享 >统信有雀之 虚拟化组件

统信有雀之 虚拟化组件

时间:2024-01-09 12:04:24浏览次数:30  
标签:kubevirt name 虚拟化 VMI virt 虚拟机 io 组件 统信


引言

统信有雀是一个PaaS层容器云平台,在容器平台使用虚拟化目前最优选择是 kubevirt,有雀基于KubeVirt进行适配、优化,是kubevirt可以通过有雀的console界面进行虚拟机创建、管理、克隆、快照等操作。

背景

什么是KubeVirt

KubeVirt 是一个 Kubernetes 的扩展(主要是CRD),它允许在 Kubernetes 集群中运行和管理虚拟机(VM)。这个项目的目标是将容器和虚拟机无缝集成,为应用提供更广泛的运行环境选择,从而实现更大范围的云原生工作负载。

KubeVirt 主要组件

virt-api-server: 

HTTP API服务器充当所有与虚拟化相关的流程的入口点。
作为KubeVirt的主要入口点,它负责对提供的VMI CRD(自定义资源定义)进行默认值处理和验证。

VMI (CRD)

VMI(虚拟机实例)的定义作为自定义资源存储在Kubernetes API服务器内。
VMI定义定义了虚拟机本身的所有属性,例如
  机器类型
  CPU类型
  内存和虚拟CPU数量
  网络接口卡的数量和类型
	...

virt-controller

virt-controller 具备全集群范围的虚拟化功能。
该控制器负责监视 VMI(自定义资源)并管理相关的 Pods。目前,该控制器确保创建和管理与 VMI 对象相关的 Pods 的生命周期。
在其生命周期内,VMI 对象将始终与一个 Pod 相关联,然而,由于例如 VMI 的迁移,与之相关的 Pod 实例可能会随时间而变化。

virt-launcher

对于每个 VMI 对象,都会创建一个 Pod。该 Pod 的主要容器运行 virt-launcher KubeVirt 组件。
Kubernetes 或 kubelet 本身不运行 VMI。相反,集群中每个主机上的守护进程会负责在每个调度到主机上的与 VMI 对象相关的 Pod 上启动 VMI 进程。
virt-launcher Pod 的主要目的是提供用于托管 VMI 进程的 cgroups 和命名空间。
virt-handler 通过将 VMI 的 CRD 对象传递给 virt-launcher 向 virt-launcher 发送信号以启动 VMI。然后,virt-launcher 在其容器内使用本地的 libvirtd 实例启动 VMI。接着,virt-launcher 监视 VMI 进程,并在 VMI 退出后终止。
如果 Kubernetes 运行时在 VMI 退出之前尝试关闭 virt-launcher Pod,virt-launcher 会将信号从 Kubernetes 转发到 VMI 进程,并尝试阻止 Pod 在 VMI 成功关闭之前终止。

virt-handler

每个主机都需要一个 virt-handler 实例,它可以作为 DaemonSet 提供。
与 virt-controller 类似,virt-handler 也是一种被动反应的组件,它会监视 VMI 对象的更改,一旦检测到变化,将执行所有必要的操作以使 VMI 达到所需的状态。
这种行为类似于 Kubernetes API 服务器和 kubelet 之间的协同工作。
virt-handler 主要需要处理的领域包括:
  保持与相应的 libvirt 域同步的集群级别的 VMI 规范。
  向集群报告域状态和规范更改。
  调用节点中心的插件,这些插件可以满足在 VMI 规范中定义的网络和存储要求。

libvirtd

每个 VMI(虚拟机实例)的 Pod 中都存在一个 libvirtd 实例。virt-launcher 使用 libvirtd 来管理 VMI 进程的生命周期。

实战

安装

  1. 在统信有雀安装虚拟化组件
  • 通过web界面安装

在web控制台打开operatorHub,找到 UCCPS Virtualization 可以选择全部默认安装。

统信有雀之 虚拟化组件_云原生

  • 通过CLI命令创建

略....

  1. 创建 HyperConverged 实例
  2. 创建HostPath实例 (若有别的存储也可以选择不创建)
  3. 创建StorageClass
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
  annotations:
  	# 设置默认存储类
    storageclass.kubernetes.io/is-default-class: 'true'
provisioner: kubevirt.io.hostpath-provisioner
# 删除策略
reclaimPolicy: Delete
# 支持卷扩展
allowVolumeExpansion: true
# 设置立即绑定
volumeBindingMode: Immediate
  1. 等待所有组件就绪

可在页面查看pod状态是否正常

创建虚拟机

  1. 创建一个虚拟机
  1. 可以选择通过现有模板进行创建
  2. 如现有模板不满足需求,可以自建模板
  3. 如需高度定制,可用yaml创建虚拟机
  1. 以下是一个简单的fedora虚拟机实例yaml文件
# kubevirt 版本
apiVersion: kubevirt.io/v1
# 资源类型
kind: VirtualMachine
# 一些注解元素
metadata:
	# 虚拟机名称
  name: vm-example
  # 标签
  labels:
  	# 虚拟机组
    app: vm-example
    # 虚拟机模板,这里用的是fedora
    os.template.kubevirt.io/fedora35: 'true'
    # 虚拟机资源类型,这里是小型1C1G
    flavor.template.kubevirt.io/small: 'true'
    # 虚拟机类型模板
    vm.kubevirt.io/template: fedora-server-small
    # 虚拟机负载类型,分为server和desktop
    workload.template.kubevirt.io/server: 'true'
  # 注解
  annotations:
  	# 虚拟机系统类型
    name.os.template.kubevirt.io/fedora35: Fedora 35
    # 描述
    description: VM example
  # 使用的命名空间
  namespace: openshift-cnv
spec:
	# 是否创建时启动
  running: false
  # 模板
  template:
    metadata:
      annotations:
      	# 再次定义虚拟机大小
        vm.kubevirt.io/flavor: small
        # 虚拟机系统
        vm.kubevirt.io/os: fedora
        # 虚拟机负载类型
        vm.kubevirt.io/workload: server
      labels:
        flavor.template.kubevirt.io/small: 'true'
        # 虚拟机域,域libvirt对应
        kubevirt.io/domain: vm-example
        kubevirt.io/size: small
        vm.kubevirt.io/name: vm-example
        os.template.kubevirt.io/fedora35: 'true'
        workload.template.kubevirt.io/server: 'true'
    spec:
    	# 定义虚拟机资源,可以覆盖上面定义的资源
      domain:
      	machine:
        	type: virt
      	# CPU资源定义
        cpu:
        	# CPU内核数
          cores: 1
          # 虚拟机CPU插座数
          sockets: 1
          #虚拟机CPU线程数
          threads: 1
        # 其余设备
        devices:
        	# 磁盘(卷)
          disks:
          	# 引导盘
            # 引导顺序为1
            - bootOrder: 1
              disk:
              	# 接口类型,arm仅支持virtio,但Windows需要驱动
                bus: virtio
              name: containerdisk
            # cloudinit盘,用于初始化linux系统
            - disk:
                bus: virtio
              name: cloudinitdisk
          # 网络接口
          interfaces:
          	# 使用masquerade类型
            - masquerade: {}
              name: default
              # 接口类型依然为virtio
              model: virtio
          # 启用多队列(multiqueue)功能
          networkInterfaceMultiqueue: true
          rng: {}
        # 内存资源
        resources:
        	# 请求内存大小,亦是虚拟机能使用最大内存
          requests:
            memory: 1G
      # 虚拟机的hostname
      hostname: vm-example
      # 绑定上面定义的网卡
      networks:
        - name: default
          pod: {}
      #  Pod 终止(删除)的优雅期间
      terminationGracePeriodSeconds: 0
      # 绑定上面定义的存储
      volumes:
      	# 定义为containerDisk,从docker registry拉取镜像
        - containerDisk:
        		# 简单实例为fedora35
            image: 'quay.io/containerdisks/fedora:35'
          name: containerdisk
       	# 定义cloudinit的一些资源
        - cloudInitNoCloud:
            userData: |-
              #cloud-config
              # root用户密码
              password: fedora
              # 其余cloudinit资源可以在这里添加,也可以使用configmap调用
              chpasswd: { expire: False }
          name: cloudinitdisk



虚拟机管理

  1. 按需求增删网卡

统信有雀之 虚拟化组件_KubeVirt_02

  1. 按需求增删磁盘

统信有雀之 虚拟化组件_KubeVirt_03

  1. 按需求进行快照

总结

(因篇幅有限,后续文章将补充介绍 虚拟机网络桥接、虚拟机快照、卷快照、windows虚拟机安装等功能)

统信有雀虚拟化组件 相较于K8s+KubeVirt,优势在于:

  • 拥有完整的dashboard支持,虚拟机及相关资源的创建、管理均可在页面操作。
  • 支持虚拟机及卷意见克隆、备份。
  • 支持虚拟机PXE启动。








标签:kubevirt,name,虚拟化,VMI,virt,虚拟机,io,组件,统信
From: https://blog.51cto.com/mahmut/9158939

相关文章

  • 前端歌谣-第伍拾伍课-vue2-element组件封装el-button-groups
    前言大家好我是歌谣今天继续给大家带来elementui组件el-button的封装使用方法<btn-groups:btns="btns":max="max"class="page-btns"></btn-groups>参数部分name控制属性名显示按钮的名称{{item.name}}btns:[{//按钮名称name:"歌谣&qu......
  • 前端歌谣-第伍拾陆课-vue2-element组件封装el-button-groups(续)
    前言我是歌谣今天继续给大家带来el-button-groups(项目的讲解背景颜色属性color:style="item.color?{background:item.color,borderColor:item.color}:{}"btns:[{//按钮名称name:"歌谣",//按钮类型......
  • Spring MVC 源码分析 - RequestToViewNameTranslator 组件
    RequestToViewNameTranslator组件RequestToViewNameTranslator 组件,视图名称转换器,用于解析出请求的默认视图名。就是说当ModelAndView对象不为 null,但是它的View对象为 null,则需要通过 RequestToViewNameTranslator 组件根据请求解析出一个默认的视图名称。回顾先来回顾......
  • 华为HarmonyOS开发之模拟器不能启动的问题(虚拟化未开启)
    如图,点击查看处理指导,根据提示修改配置后还是启动失败 查看任务管理器——》性能——》CPU 显示虚拟化未开启,需要开启开启步骤开启成功,模拟器也可以启动了 ......
  • Unity3D UGUI的Button组件的介绍及使用详解
    Unity3D是一款功能强大的游戏开发引擎,而UGUI是Unity3D提供的一套用户界面系统。在UGUI中,Button组件是最常用的组件之一,本文将详细介绍Button组件的使用方法和相关技术细节。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大......
  • ant design vue 图片预览组件自定义样式
    这篇文章主要为大家介绍了ant design vue 图片预览组件自定义样式方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪−目录版本:场景:需求:版本:antdesignvue3.2.4场景:使用Image图片组件预览功能需求:自定义预览遮罩层及预览图片的样式;不得影响到其......
  • C++ Qt开发:Charts与数据库组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于QCharts绘图组件......
  • k8s_Helm组件以及其他功能
    helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理Helm本质就是让K8s的应用管理(Deployment,Service等)可配置,能动态生成。通过动态生成K8s资源清单文件(deployment.yaml,service.yaml)。然后调用Kubectl自动执行K8s资源部署Helm......
  • K8s 学习_组件说明
    1.k8s的组件分类主要分为mater组件,(apiserver,etcd,ControllerManager,schedule)2.Node组件Node主要负责容器的各种依赖环境,并接受Master管理,每个Node的构成:Kubelete,ContainerRuntime,Kube-pxoxy.3.核心组件k8s还依赖于一组的附件组件,通常是由第三方的提供的特定的应用程序。......
  • TuGraph Analytics作业监控面板:运行时组件上的高效分析工具
    作者:丁一背景TuGraphAnalytics作业部署到K8S集群之后,通常会启动多个pod(一个master、一/多个driver、多个container)。用户很难判断作业当前运行的进度如何,也不能通过pod的状态来判断内部进程的状态。无论是查看进度、查看日志、性能分析,都需要到每一个pod中进行对应的操作,运维成本......