CN117519906A - 一种基于自主架构服务器的虚拟机管理和调度方法 - Google Patents
一种基于自主架构服务器的虚拟机管理和调度方法 Download PDFInfo
- Publication number
- CN117519906A CN117519906A CN202311581841.1A CN202311581841A CN117519906A CN 117519906 A CN117519906 A CN 117519906A CN 202311581841 A CN202311581841 A CN 202311581841A CN 117519906 A CN117519906 A CN 117519906A
- Authority
- CN
- China
- Prior art keywords
- virtualized memory
- virtual machine
- node
- virtualized
- scheduler
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000012544 monitoring process Methods 0.000 claims abstract description 46
- 230000002567 autonomic effect Effects 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000007726 management method Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000010276 construction Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 239000000306 component Substances 0.000 description 3
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 239000008358 core component Substances 0.000 description 2
- XQMVBICWFFHDNN-UHFFFAOYSA-N 5-amino-4-chloro-2-phenylpyridazin-3-one;(2-ethoxy-3,3-dimethyl-2h-1-benzofuran-5-yl) methanesulfonate Chemical compound O=C1C(Cl)=C(N)C=NN1C1=CC=CC=C1.C1=C(OS(C)(=O)=O)C=C2C(C)(C)C(OCC)OC2=C1 XQMVBICWFFHDNN-UHFFFAOYSA-N 0.000 description 1
- 239000004606 Fillers/Extenders Substances 0.000 description 1
- 241000883510 Kolla Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/301—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is a virtual computing platform, e.g. logically partitioned systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3433—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment for load management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了虚拟化领域的一种基于自主架构服务器的虚拟机管理和调度方法,旨在解决自主架构服务器无法获取实际虚拟化内存大小的技术问题。本发明通过在k8s容器平台中部署虚拟化资源监控模块及自定义的调度器插件,比较服务器虚拟化内存的使用情况和虚拟机请求的虚拟化内存大小,结合kubevirt服务实现了自主架构服务器上虚拟机的管理和调度。
Description
技术领域
本发明属于虚拟化技术领域,具体提供一种基于自主架构服务器的虚拟机管理和调度方法。
背景技术
虚拟化技术的广泛应用,实现了IT资源的动态分配、灵活调度、跨域共享,提高了IT资源的利用率,使资源能够真正成为社会基础设施,服务于各行各业的应用需求。KVM(Kernel-Based Virtual Machine)是一种基于linux内核的虚拟化技术,主要负责CPU和内存虚拟化,与qemu负责I/O设备的虚拟化功能相结合,形成了一套完整的虚拟化平台,能够在同一物理服务器上支持多种不同客户机系统(即虚拟机)的运行。
容器技术与传统的虚拟化技术不同,不需要模拟完整的软硬件系统,就能在物理机上创建一个与物理机系统相互隔离的环境。随着容器技术的发展,出现了许多虚拟化与容器技术相结合的尝试,如利用Kolla项目容器化部署openstack云平台,利用Magnum组件在openstack云平台中实现对docker容器的管理,利用容器化的Webvirtmgr服务管理虚拟机,利用Kubevirt项目在kubernetes容器平台中管理虚拟机等。虚拟化技术与容器技术在这些项目中相辅相成,利用各自的优势打破了原有的技术框架。
其中Kubevirt是一种比较新的虚拟机管理方法,它以容器的形式运行虚拟机,充分借助了k8s(kubernetes)平台灵活的容器调度和管理能力,让虚拟机像容器一样被k8s管理调度。它提供了一个统一的开发平台,用户在同一个共享环境中既能够对容器化的应用程序构建、修改、部署,也能对虚拟机进行同样的操作。在自主架构平台上利用Kubevirt实现虚拟化与容器技术的结合,能够实现虚拟化与容器化业务的统一管理,促进应用生态的进一步发展。
Kubevirt虽然提供了一套容器化的虚拟机管理的方法,但是在自主架构服务器平台上使用却存在问题:在创建虚拟机时,k8s利用默认的调度器来调度虚拟机实例,默认的调度器根据k8s节点剩余的物理内存来判断是否将虚拟机调度到该节点。但是自主架构服务器平台分配虚拟化内存的方式比较特殊,是基于预分配的保留内存进行分配(即保留内存专门提供给虚拟机使用,物理机无法使用),使用默认的k8s调度器时,无法获取到自主架构服务器平台实际剩余的虚拟化内存大小,导致创建虚拟机时资源判断错误引发异常。因此,亟需设计一种针对自主架构服务器平台的k8s调度器,根据其虚拟化内存分配规则来管理和调度虚拟机。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种针对自主架构服务器平台的k8s调度器,根据其虚拟化内存分配规则来管理和调度虚拟机。
为达到上述目的,本发明是采用下述技术方案实现的:
第一方面,本发明提供了一种基于自主架构服务器的虚拟机管理和调度方法,包括以下步骤:
步骤1:在k8s容器平台中部署虚拟化内存监控服务,所述虚拟化内存监控服务用于监控k8s集群中各个节点的虚拟化内存使用情况;
步骤2:在k8s容器平台中部署swscheduler自定义调度器,所述swscheduler自定义调度器用于获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点。
步骤3:在k8s容器平台中部署kubevirt服务,所述kubevirt服务用于通过vm模板创建和管理虚拟机,在使用vm模板创建虚拟机时,指定虚拟机调度器为所述swscheduler自定义调度器。
进一步的,在k8s容器平台中部署虚拟化内存监控服务,包括:
步骤1.1:构建并编译虚拟化内存监控程序。
步骤1.2:容器化虚拟化内存监控服务,通过Dockerfile文件将编译得到的虚拟化内存监控程序打包成docker镜像;
步骤1.3:在虚拟化监控程序的配置文件中指定对qemu-kvm进程进行信息采集。通过k8s daemonset的形式将虚拟化监控程序部署到k8s集群。
进一步的,构建并编译虚拟化内存监控程序,包括:
步骤1.1.1:定义swKvmMemDesc prometheus监控指标来表示自主架构服务器上虚拟化内存,并从系统的/proc/cmdline文件中获取内核启动参数中定义的虚拟化内存大小;
步骤1.1.2:获取所有qemu-kvm进程在系统中对应的pid号,从系统的/proc/<pid>/smaps文件中读取/dev/zero起止地址来计算虚拟机已占用的虚拟化内存大小;
步骤1.1.3:将获取的虚拟化内存大小情况传入prometheus接口,通过自定义exporter服务的/metric端点提供对qemu-kvm进程的监控服务,通过访问http://nodeip:9256/metrics来获取node节点的监控数据。
进一步的,在k8s容器平台中部署swscheduler自定义调度器,包括:
步骤2.1:利用scheduler framework提供的调度器插件接口,实现FilterPlugin过滤器插件,得到自定义调度器,编译swscheduler自定义调度器程序。
步骤2.2:容器化swscheduler自定义调度器服务,通过Dockerfile文件将编译得到的自定义调度器程序打包成docker镜像;
步骤2.3:为swscheduler自定义调度器创建k8s rbac权限,将swscheduler通过yaml文件以声明式的方式部署到k8s集群。
进一步的,所述swscheduler自定义调度器程序被编译以执行以下步骤:
从虚拟化内存监控程序中获取虚拟化内存使用情况;
计算节点剩余可用的虚拟化内存大小,剩余可用的虚拟化内存大小计算公式如下:
剩余可用的虚拟化内存大小=内核参数中定义的虚拟化内存大小-节点上所有qemu-kvm进程占用的总虚拟化内存大小
获取k8s VM模板中虚拟机实例VMI资源请求的虚拟化内存大小;
判断k8s节点的剩余可用虚拟化内存是否满足VMI资源请求的内存大小,若满足,则调度VMI对应的virt-launcher pod到对应的节点;若不满足,则无法调度virt-launcherpod,virt-launcher pod处于pending状态,直到有满足条件的节点出现。
进一步的,步骤3:在k8s容器平台中部署kubevirt服务,所述kubevirt服务用于通过vm模板创建和管理虚拟机,在使用vm模板创建虚拟机时,指定虚拟机调度器为所述swscheduler自定义调度器,包括:
步骤3.1:在k8s集群中部署kubevirt服务,实现通过自定义资源VMI来管理虚拟机;
步骤3.2:在虚拟机vm模板中指定自定义调度器,修改的参数如下:
nodeScheduler:swscheduler
步骤3.3:通过vm模板管理虚拟机,实现虚拟机的创建、查询、删除操作。
第二方面,本发明提供一种基于自主架构服务器的虚拟机管理和调度方法,包括以下步骤:
步骤1:监控k8s集群中各个节点的虚拟化内存使用情况;
步骤2:获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点。
步骤3:通过vm模板创建和管理虚拟机。
进一步的,监控k8s集群中各个节点的虚拟化内存使用情况,包括:
定义swKvmMemDesc prometheus监控指标来表示自主架构服务器上虚拟化内存,并从系统的/proc/cmdline文件中获取内核启动参数中定义的虚拟化内存大小;
获取所有qemu-kvm进程在系统中对应的pid号,从系统的/proc/<pid>/smaps文件中读取/dev/zero起止地址来计算虚拟机已占用的虚拟化内存大小;
将获取的虚拟化内存大小情况传入prometheus接口,通过自定义exporter服务的/metric端点提供对qemu-kvm进程的监控服务,通过访问http://nodeip:9256/metrics来获取node节点的监控数据。
进一步的,获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点,包括:
获取虚拟化内存使用情况;
计算节点剩余可用的虚拟化内存大小,剩余可用的虚拟化内存大小计算公式如下:
剩余可用的虚拟化内存大小=内核参数中定义的虚拟化内存大小-节点上所有qemu-kvm进程占用的总虚拟化内存大小
获取k8s VM模板中虚拟机实例VMI资源请求的虚拟化内存大小;
判断k8s节点的剩余可用虚拟化内存是否满足VMI资源请求的内存大小,若满足,则调度VMI对应的virt-launcher pod到对应的节点;若不满足,则无法调度virt-launcherpod,virt-launcher pod处于pending状态,直到有满足条件的节点出现。
进一步的,通过vm模板创建和管理虚拟机,包括:
通过virt-launcher Pod来管理虚拟机,Virt-launcher Pod与虚拟机一一对应;
通过在k8s VM模板中设置nodescheduler参数为swscheduler来使用自定义的调度器,将VMI资源调度到满足虚拟化内存需求的k8s节点。
与现有技术相比,本发明所达到的有益效果:
本发明实现了虚拟化内存监控程序来获取自主可控服务器上内核启动参数中定义的KVM虚拟化内存大小及qemu-kvm进程占用的虚拟化内存大小;通过自定义的k8s调度器swscheduler将虚拟机实例调度到满足虚拟化内存需求的节点上;通过kubevirt以容器化的形式管理虚拟机的生命周期,使用户能够在自主可控服务器平台上借助k8s平台灵活、便捷的进行虚拟机的管理和调度。
附图说明
图1是本发明系统架构图。
图2是本发明工作流程图。
图3是本发明实施例中虚拟机监控程序构建流程图。
图4是本发明实施例中自定义调度器程序构建流程图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例一:
本实施例提供了一种基于自主架构服务器的虚拟机管理和调度方法,这是一种以k8s容器管理平台为基础运行环境的方法。
图1是本发明的系统架构图。用户通过kubectl对k8s集群进行操作。图中APIServer、Scheduler、Controller、Etcd是原生k8s控制平面的核心组件,核心组件的主要功能如下:API Server是所有服务访问的统一入口,Scheduler用于调度pod到合适的k8s节点(Pod是k8s中创建和管理的最小单元),Controller用于维持k8s资源的期望状态,Etcd用于存储k8s集群的所有重要信息。每个k8s节点后台会运行一个kubelet服务,kubelet通过与k8s节点上的容器运行时交互,实现pod和pod中容器的生命周期管理。
Kubevirt以k8s CRD(Custom Resource Define)的形式创建了一种VMI资源(Virtual Machine Instance)来管理虚拟机。在架构图中,Virt-api、virt-controller、virt-handler、virt-launcher是管理VMI资源的重要组件。Virt-api是所有虚拟化操作的入口,如可以控制VMI资源(虚拟机实例)的启、停等。Virt-controller会根据VMI生成对应的virt-launcher Pod,并且维护VMI的状态。Virt-handler会以deamonset的形式部署到每个k8s节点,负责监控节点上每个VMI的状态变化。
在每一个virt-launcher Pod中运行一个libvirtd服务来管理qemu-kvm进程对应的虚拟机,这是一种去中心化的模式,避免在单一服务模式中因为libvirtd服务异常而导致所有的虚拟机无法管理的情况。
在架构图中,虚拟化资源监控程序和swscheduler自定义调度器为本发明的自研组件,虚拟化资源监控程序以k8s daemonset的形式部署pod到每个k8s节点,获取k8s节点虚拟化内存信息并存入etcd数据库。
虚拟化资源监控程序与图中的swscheduler自定义调度器结合,能够在自主架构服务器平台上调度kubevirt创建的虚拟机到满足虚拟化内存需求的k8s节点。
图2是本发明的流程图,包含三个主要模块:虚拟化资源监控模块、自定义调度器模块和基于kubevirt的虚拟机管理模块。主要模块的功能及实现如下:
S1虚拟化资源监控模块:
自主架构服务器平台分配虚拟化内存的规则,与x86等通用架构不同,并不是使用物理机的完整内存,而是需要结合内核启动参数中设置的KVM虚拟化内存大小进行分配。若没有正确设置虚拟化可用内存或可用内存资源不足时创建虚拟机会失败,导致自主架构服务器平台上无法启动虚拟机。通过在grub直接指定可用的虚拟化内存大小,即设置kvm_mem=nn[MG]@start[MG],其中start[MG]指定了虚拟化为预留内存的起始地址,nn[MG]部分的内存大小为实际可用的虚拟化内存大小,不对宿主机隐藏。
虚拟化资源监控模块的主要功能是通过对k8s节点虚拟化内存进行监控,判断该节点是否在内核启动参数中设置了虚拟化可用内存大小,以及获取该节点剩余可用的虚拟化内存大小。
虚拟机在物理机操作系统上以qemu-kvm进程的形式存在,在同一台物理服务器上可能有不同用户以不同方式创建虚拟机。因此,需要对节点上所有qemu-kvm进程占用的资源进行监控。Linux操作系统中,在/proc/cmdline文件中记录了内核的启动参数,通过对此文件的解析来获取内核分配的虚拟化可用内存的大小,在/proc/<pid>/smaps文件中记录了pid对应进程的内存分配情况,通过对qemu-kvm进程的smaps文件进行分析,可以获得/dev/zero的内存起止地址来表示虚拟机占用的虚拟化内存大小。
K8s以容器的形式运行工作负载,无法直接获取各个节点的资源使用情况,本发明利用prometheus服务对节点进行资源监控,通过开发自定义exporter插件来监控k8s节点上的资源,通过自定义swKvmMemDesc监控指标,获取自主架构服务器内核启动参数中设置的虚拟化可用内存大小,并通过配置自定义exporter插件对qemu-kvm进程的监控,获取所有qemu-kvm进程占用的总内存信息。
S2自定义调度器模块:
目前,实现k8s自定义调度器方法有以下四种:(1)直接修改k8s源码中kube-scheduler调度器,为了不破坏原有的调度逻辑,此方法需要熟悉k8s的源码,学习成本较高,开发难度较大;(2)和默认的调度程序一起运行独立的调度程序,但是多个独立的调度器在处理调度时会引发调度冲突;(3)实现scheduler extender调度器扩展程序,这是一个包含Filter过滤器和Priority优先级两个端点的Webhook,对k8s scheduler调度周期中过滤和打分阶段进行扩展,但是由于其扩展点较少且性能有限,该接口在高版本的k8s中正在被逐步废弃。(4)通过scheduler framework调度框架实现自定义的调度器,调度框架向现有的调度器中添加了一组插件化的API,使得大部分的调度功能以插件的形式存在。
本发明的自定义调度器模块采用第四种方式构建适应自主架构服务器虚拟化内存分配规则的调度器swscheduler,通过scheduler framework中对FilterPlugin过滤器插件的构建,根据虚拟化内存监控模块来获取k8s集群节点上的虚拟化内存信息,并结合VMI虚拟机实例请求的虚拟机内存大小,来调度虚拟机到满足虚拟化内存需求的节点上。
S3基于kubevirt的虚拟机管理模块:
Kubevirt利用k8s CRD(Custom Resource Define)自定义资源的方式,来定义VMI(Virtual Machine Instance)资源表示虚拟机实例。k8s通过VM模板(声明式yaml文件)来控制VMI资源的创建、修改和删除等操作,提供了虚拟机生命周期管理的能力。
Kubevirt在创建虚拟机实例时,会通过一个virt-launcher Pod来管理虚拟机。Virt-launcher Pod与虚拟机一一对应,做到如同管理容器般去管理虚拟机,并且做到与容器一样的资源管理、调度规划。通过在k8s VM模板中设置nodescheduler参数为swscheduler来使用自定义的调度器,可以将VMI资源调度到满足虚拟化内存需求的k8s节点,保证虚拟机的正常运行。
本发明的关键点
一、部署虚拟化内存监控服务来监控k8s节点的虚拟化内存使用情况
步骤1:构建并编译虚拟化内存监控程序。图3描述了构建虚拟化资源监控模块中虚拟化内存监控程序的流程图,其主要步骤如下:
步骤1.1:定义swKvmMemDesc prometheus监控指标来表示自主架构服务器上虚拟化内存,并从系统的/proc/cmdline文件中获取内核启动参数中定义的虚拟化内存大小;
步骤1.2:获取所有qemu-kvm进程在系统中对应的pid号,从系统的/proc/<pid>/smaps文件中读取/dev/zero起止地址来计算虚拟机已占用的虚拟化内存大小;
步骤1.3:将获取的虚拟化内存大小情况传入prometheus接口,通过自定义exporter服务的/metric端点提供对qemu-kvm进程的监控服务,用户可以直接通过访问http://nodeip:9256/metrics来获取node节点的监控数据。
步骤2:容器化虚拟化内存监控服务,通过Dockerfile文件将编译得到的虚拟化内存监控程序打包成docker镜像;
步骤3:在虚拟化监控程序的配置文件中指定对qemu-kvm进程进行信息采集。通过k8s daemonset的形式将虚拟化监控程序部署到k8s集群。
二、部署swscheduler自定义调度器,将虚拟机调度到满足虚拟化内存需求的节点
步骤1:利用scheduler framework提供的调度器插件接口,实现FilterPlugin过滤器插件,得到自定义调度器,编译swscheduler自定义调度器程序。图4描述了构建swscheduler自定义调度器程序的流程图,其主要步骤如下:
步骤1.1:从虚拟化内存监控程序中获取虚拟化内存使用情况;
步骤1.2:计算节点剩余可用的虚拟化内存大小,剩余可用的虚拟化内存大小计算公式如下:
剩余可用的虚拟化内存大小=内核参数中定义的虚拟化内存大小-节点上所有qemu-kvm进程占用的总虚拟化内存大小
步骤1.3:获取k8s VM模板中虚拟机实例VMI资源请求的虚拟化内存大小;
步骤1.4:判断k8s节点的剩余可用虚拟化内存是否满足VMI资源请求的内存大小,若满足,则调度VMI对应的virt-launcher pod到对应的节点;若不满足,则无法调度virt-launcher pod,virt-launcher pod处于pending状态,直到有满足条件的节点出现。
步骤2:容器化swscheduler自定义调度器服务,通过Dockerfile文件将编译得到的自定义调度器程序打包成docker镜像;
步骤3:为swscheduler自定义调度器创建k8s rbac权限,将swscheduler通过yaml文件以声明式的方式部署到k8s集群。
三、部署kubevirt服务,并通过vm模板创建虚拟机
步骤1:在k8s集群中部署kubevirt服务,实现通过自定义资源VMI来管理虚拟机;
步骤2:在虚拟机vm模板中指定自定义调度器,需要修改的参数如下:
nodeScheduler:swscheduler
步骤3:通过vm模板管理虚拟机,实现虚拟机的创建、查询、删除等操作。
该方法创建虚拟机,并使用了步骤2指定的调度器管理虚拟机的调度,结果如步骤3描述的,可以实现虚拟机创建、查询、删除等操作
实施例二:
本实施例提供一种基于自主架构服务器的虚拟机管理和调度方法,包括以下步骤:
步骤1:监控k8s集群中各个节点的虚拟化内存使用情况;
步骤2:获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点。
步骤3:通过vm模板创建和管理虚拟机。
具体的,监控k8s集群中各个节点的虚拟化内存使用情况,包括:
定义swKvmMemDesc prometheus监控指标来表示自主架构服务器上虚拟化内存,并从系统的/proc/cmdline文件中获取内核启动参数中定义的虚拟化内存大小;
获取所有qemu-kvm进程在系统中对应的pid号,从系统的/proc/<pid>/smaps文件中读取/dev/zero起止地址来计算虚拟机已占用的虚拟化内存大小;
将获取的虚拟化内存大小情况传入prometheus接口,通过自定义exporter服务的/metric端点提供对qemu-kvm进程的监控服务,通过访问http://nodeip:9256/metrics来获取node节点的监控数据。
具体的,获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点,包括:
获取虚拟化内存使用情况;
计算节点剩余可用的虚拟化内存大小,剩余可用的虚拟化内存大小计算公式如下:
剩余可用的虚拟化内存大小=内核参数中定义的虚拟化内存大小-节点上所有qemu-kvm进程占用的总虚拟化内存大小
获取k8s VM模板中虚拟机实例VMI资源请求的虚拟化内存大小;
判断k8s节点的剩余可用虚拟化内存是否满足VMI资源请求的内存大小,若满足,则调度VMI对应的virt-launcher pod到对应的节点;若不满足,则无法调度virt-launcherpod,virt-launcher pod处于pending状态,直到有满足条件的节点出现。
具体的,通过vm模板创建和管理虚拟机,包括:
通过virt-launcher Pod来管理虚拟机,Virt-launcher Pod与虚拟机一一对应;
通过在k8s VM模板中设置nodescheduler参数为swscheduler来使用自定义的调度器,将VMI资源调度到满足虚拟化内存需求的k8s节点。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种基于自主架构服务器的虚拟机管理和调度方法,其特征在于,包括以下步骤:
在k8s容器平台中部署虚拟化内存监控服务,所述虚拟化内存监控服务用于监控k8s集群中各个节点的虚拟化内存使用情况;
在k8s容器平台中部署swscheduler自定义调度器,所述swscheduler自定义调度器用于获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点;
在k8s容器平台中部署kubevirt服务,所述kubevirt服务用于通过vm模板创建和管理虚拟机,在使用vm模板创建虚拟机时,指定虚拟机调度器为所述swscheduler自定义调度器。
2.根据权利要求1所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,在k8s容器平台中部署虚拟化内存监控服务,包括:
构建并编译虚拟化内存监控程序;
容器化虚拟化内存监控服务,通过Dockerfile文件将编译得到的虚拟化内存监控程序打包成docker镜像;
在虚拟化监控程序的配置文件中指定对qemu-kvm进程进行信息采集;通过k8sdaemonset的形式将虚拟化监控程序部署到k8s集群。
3.根据权利要求2所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,构建并编译虚拟化内存监控程序,包括:
定义swKvmMemDesc prometheus监控指标来表示自主架构服务器上虚拟化内存,并从系统的/proc/cmdline文件中获取内核启动参数中定义的虚拟化内存大小;
获取所有qemu-kvm进程在系统中对应的pid号,从系统的/proc/<pid>/smaps文件中读取/dev/zero起止地址来计算虚拟机已占用的虚拟化内存大小;
将获取的虚拟化内存大小情况传入prometheus接口,通过自定义exporter服务的/metric端点提供对qemu-kvm进程的监控服务,通过访问http://nodeip:9256/metrics来获取node节点的监控数据。
4.根据权利要求1所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,在k8s容器平台中部署swscheduler自定义调度器,包括:
利用scheduler framework提供的调度器插件接口,实现FilterPlugin过滤器插件,得到自定义调度器,编译swscheduler自定义调度器程序;
容器化swscheduler自定义调度器服务,通过Dockerfile文件将编译得到的自定义调度器程序打包成docker镜像;
为swscheduler自定义调度器创建k8s rbac权限,将swscheduler通过yaml文件以声明式的方式部署到k8s集群。
5.根据权利要求4所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,所述swscheduler自定义调度器程序被编译以执行以下步骤:
从虚拟化内存监控程序中获取虚拟化内存使用情况;
计算节点剩余可用的虚拟化内存大小,剩余可用的虚拟化内存大小计算公式如下:
剩余可用的虚拟化内存大小=内核参数中定义的虚拟化内存大小-节点上所有qemu-kvm进程占用的总虚拟化内存大小
获取k8s VM模板中虚拟机实例VMI资源请求的虚拟化内存大小;
判断k8s节点的剩余可用虚拟化内存是否满足VMI资源请求的内存大小,若满足,则调度VMI对应的virt-launcher pod到对应的节点;若不满足,则无法调度virt-launcherpod,virt-launcher pod处于pending状态,直到有满足条件的节点出现。
6.根据权利要求1所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,在k8s容器平台中部署kubevirt服务,所述kubevirt服务用于通过vm模板创建和管理虚拟机,在使用vm模板创建虚拟机时,指定虚拟机调度器为所述swscheduler自定义调度器,包括:
在k8s集群中部署kubevirt服务,实现通过自定义资源VMI来管理虚拟机;
在虚拟机vm模板中指定自定义调度器,修改的参数如下:
nodeScheduler:swscheduler
通过vm模板管理虚拟机,实现虚拟机的创建、查询、删除操作。
7.一种基于自主架构服务器的虚拟机管理和调度方法,其特征在于,包括以下步骤:
监控k8s集群中各个节点的虚拟化内存使用情况;
获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点;
通过vm模板创建和管理虚拟机。
8.根据权利要求7所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,监控k8s集群中各个节点的虚拟化内存使用情况,包括:
定义swKvmMemDesc prometheus监控指标来表示自主架构服务器上虚拟化内存,并从系统的/proc/cmdline文件中获取内核启动参数中定义的虚拟化内存大小;
获取所有qemu-kvm进程在系统中对应的pid号,从系统的/proc/<pid>/smaps文件中读取/dev/zero起止地址来计算虚拟机已占用的虚拟化内存大小;
将获取的虚拟化内存大小情况传入prometheus接口,通过自定义exporter服务的/metric端点提供对qemu-kvm进程的监控服务,通过访问http://nodeip:9256/metrics来获取node节点的监控数据。
9.根据权利要求7所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,获取请求的虚拟化内存大小,根据所述各个节点的虚拟化内存使用情况和请求的虚拟化内存大小,将虚拟机调度到满足虚拟化内存需求的节点,包括:
获取虚拟化内存使用情况;
计算节点剩余可用的虚拟化内存大小,剩余可用的虚拟化内存大小计算公式如下:
剩余可用的虚拟化内存大小=内核参数中定义的虚拟化内存大小-节点上所有qemu-kvm进程占用的总虚拟化内存大小
获取k8s VM模板中虚拟机实例VMI资源请求的虚拟化内存大小;
判断k8s节点的剩余可用虚拟化内存是否满足VMI资源请求的内存大小,若满足,则调度VMI对应的virt-launcher pod到对应的节点;若不满足,则无法调度virt-launcherpod,virt-launcher pod处于pending状态,直到有满足条件的节点出现。
10.根据权利要求7所述的基于自主架构服务器的虚拟机管理和调度方法,其特征在于,通过vm模板创建和管理虚拟机,包括:
通过virt-launcher Pod来管理虚拟机,Virt-launcher Pod与虚拟机一一对应;
通过在k8s VM模板中设置nodescheduler参数为swscheduler来使用自定义的调度器,将VMI资源调度到满足虚拟化内存需求的k8s节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311581841.1A CN117519906A (zh) | 2023-11-24 | 2023-11-24 | 一种基于自主架构服务器的虚拟机管理和调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311581841.1A CN117519906A (zh) | 2023-11-24 | 2023-11-24 | 一种基于自主架构服务器的虚拟机管理和调度方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117519906A true CN117519906A (zh) | 2024-02-06 |
Family
ID=89745299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311581841.1A Pending CN117519906A (zh) | 2023-11-24 | 2023-11-24 | 一种基于自主架构服务器的虚拟机管理和调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117519906A (zh) |
-
2023
- 2023-11-24 CN CN202311581841.1A patent/CN117519906A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3270289B1 (en) | Container-based multi-tenant computing infrastructure | |
US10387179B1 (en) | Environment aware scheduling | |
US10193963B2 (en) | Container virtual machines for hadoop | |
US20200226520A1 (en) | Methods and systems to optimize server utilization for a virtual data center | |
US11740921B2 (en) | Coordinated container scheduling for improved resource allocation in virtual computing environment | |
US9195294B2 (en) | Cooperatively managing enforcement of energy related policies between virtual machine and application runtime | |
US20210027401A1 (en) | Processes and systems that determine sustainability of a virtual infrastructure of a distributed computing system | |
US10162656B2 (en) | Minimizing guest operating system licensing costs in a processor based licensing model in a virtual datacenter | |
CN113645300A (zh) | 一种基于Kubernetes集群的节点智能调度方法和系统 | |
KR20060071307A (ko) | 가상 기기들을 위한 프로세서 토폴로지를 노출시키는시스템 및 방법 | |
US20200042356A1 (en) | System and Method for Resource Management | |
CN106201527B (zh) | 一种基于逻辑分区的应用程序容器系统 | |
US10860364B2 (en) | Containerized management services with high availability | |
CN110770703B (zh) | 控制装置 | |
US20130024857A1 (en) | Method and system for flexible resource mapping for virtual storage appliances | |
US11645098B2 (en) | Systems and methods to pre-provision sockets for serverless functions | |
CN114168255A (zh) | 容器云平台中异构指令集容器的运行方法和装置 | |
CN115543548B (zh) | 一种容器组的配置方法、装置、设备及可读存储介质 | |
CN116917867A (zh) | 无服务器运行时容器分配 | |
US20220229695A1 (en) | System and method for scheduling in a computing system | |
CN117311990A (zh) | 资源调整方法、装置、电子设备、存储介质及训练平台 | |
US12050930B2 (en) | Partition migration with critical task prioritization | |
US10936370B2 (en) | Apparatus that generates optimal launch configurations | |
CN117519906A (zh) | 一种基于自主架构服务器的虚拟机管理和调度方法 | |
CN114598666A (zh) | 资源处理方法及资源调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |