CN112199194B - 基于容器集群的资源调度方法、装置、设备和存储介质 - Google Patents

基于容器集群的资源调度方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN112199194B
CN112199194B CN202011097911.2A CN202011097911A CN112199194B CN 112199194 B CN112199194 B CN 112199194B CN 202011097911 A CN202011097911 A CN 202011097911A CN 112199194 B CN112199194 B CN 112199194B
Authority
CN
China
Prior art keywords
resource
container cluster
offline service
instance
scheduling
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.)
Active
Application number
CN202011097911.2A
Other languages
English (en)
Other versions
CN112199194A (zh
Inventor
林嘉
田帅
王兴刚
王华夏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Huya Technology Co Ltd
Original Assignee
Guangzhou Huya Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangzhou Huya Technology Co Ltd filed Critical Guangzhou Huya Technology Co Ltd
Priority to CN202011097911.2A priority Critical patent/CN112199194B/zh
Publication of CN112199194A publication Critical patent/CN112199194A/zh
Application granted granted Critical
Publication of CN112199194B publication Critical patent/CN112199194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了一种基于容器集群的资源调度方法、装置、设备和存储介质,该方法包括:读取当前生效的调度策略,按照调度策略统计离线业务在容器集群中占用的资源,获得资源占用值,离线业务加载在节点中的实例,按照调度策略对离线业务确定调整操作,以使资源占用值往指定的资源占用目标收敛,按照调整操作调整离线业务在容器集群中占用的实例,根据在线业务的特性设置相应的调度策略,基于实时监控动态调整离线业务占用的资源,实现了24小时离线业务、在线业务混部的落地,容器集群的CPU使用率全天稳定在40%以上,大大提高了资源利用率,大大降低了容器集群的成本。

Description

基于容器集群的资源调度方法、装置、设备和存储介质
技术领域
本发明实施例涉及容器集群的技术领域,尤其涉及基于容器集群的资源调度方法、装置、设备和存储介质。
背景技术
随着容器集群kubernetes逐渐成为容器编排的事实标准,越来越多的企业基于容器集群kubenetes构建容器管理平台。
在容器管理平台中,虽然资源的体量大,但是,容器集群的CPU(CentralProcessing Unit,中央处理器)日均利用率在10%左右,资源利用率不足,针对这种情况,业界一般采用离线业务和在线业务混部的方式来提高资源使用率。
业界主流的离在线混部是利用在线业务的潮汐特性,通过在线业务高峰期和低谷期的错峰调度,在凌晨时段混部离线业务以提高资源使用率。
但是,在线业务的负载随时间变化,容器集群kubenetes固定了离线业务的资源规格,导致容器集群kubenetes存在大量资源浪费,成本较高。
发明内容
本发明实施例提出了一种基于容器集群的资源调度方法、装置、设备和存储介质,以解决容器集群kubenetes存在大量资源浪费的问题。
第一方面,本发明实施例提供了一种基于容器集群的资源调度方法,一控制器加载于在容器集群中的节点,所述方法应用于所述控制器,包括:
读取当前生效的调度策略;
按照所述调度策略统计离线业务在所述容器集群中占用的资源,获得资源占用值,所述离线业务加载在所述节点中的实例;
按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛;
按照所述调整操作调整所述离线业务在所述容器集群中占用的实例。
第二方面,本发明实施例还提供了一种基于容器集群的资源调度装置,一控制器加载于在容器集群中的节点,所述装置位于于所述控制器,包括:
调度策略读取模块,用于读取当前生效的调度策略;
资源占用值统计模块,用于按照所述调度策略统计离线业务在所述容器集群中占用的资源,获得资源占用值,所述离线业务加载在所述节点中的实例;
调整操作确定模块,用于按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛;
调整操作执行模块,用于按照所述调整操作调整所述离线业务在所述容器集群中占用的实例。
第三方面,本发明实施例还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的基于容器集群的资源调度方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如第一方所述的基于容器集群的资源调度方法。
在本实施例中,读取当前生效的调度策略,按照调度策略统计离线业务在容器集群中占用的资源,获得资源占用值,离线业务加载在节点中的实例,按照调度策略对离线业务确定调整操作,以使资源占用值往指定的资源占用目标收敛,按照调整操作调整离线业务在容器集群中占用的实例,根据在线业务的特性设置相应的调度策略,基于实时监控动态调整离线业务占用的资源,实现了24小时离线业务、在线业务混部的落地,容器集群的CPU使用率全天稳定在40%以上,大大提高了资源利用率,大大降低了容器集群的成本。
附图说明
图1为本发明实施例一提供的一种基于容器集群的资源调度方法的流程图;
图2为本发明实施例一提供的一种容器集群与资源管理器的架构示意图;
图3是本发明实施例二提供的一种基于容器集群的资源调度方法的流程图;
图4是本发明实施例三提供的一种基于容器集群的资源调度方法的流程图;
图5是本发明实施例四提供的一种基于容器集群的资源调度方法的流程图;
图6为本发明实施例五提供的一种基于容器集群的资源调度装置的结构示意图;
图7为本发明实施例六提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种基于容器集群的资源调度方法的流程图,本实施例可适用于根据容器集群kubenetes的负载动态伸缩离线业务占用的资源、实现在线业务与离线业务混布的情况。
在具体实现中,容器集群kubenetes是自动化容器操作的平台,提供应用部署、维护、扩展机制等功能,可用于管理跨集群运行容器化的应用。
容器集群kubenetes中的集群是指一组节点,这些节点可以是物理机器或者虚拟机,在集群之上安装了kubernetes平台。
如图2所示,容器集群kubenetes可以包括如下结构:
master(主节点):一个容器集群kubenetes中拥有一个主节点master,主节点master拥有一系列组件,比如API Server(Application Programming Interface Server,接口服务),API Server提供可以用来和容器集群kubenetes交互的REST(Representational State Transfer,表象化状态转变)端点。master可以用于创建和复制实例pod的RC(Replication Controller,RC可用于保证在任意时间运行实例pod的副本数量,从而能够保证实例pod总是可用的)。
node(节点):节点node是物理机器或者虚拟机器,作为worker(工作者),节点node也通常称为Minion,节点node可以运行如下组件:
Kubelet:主节点代理。
Kube-proxy:Service(服务)使用其将链接路由到pod。
Docker或Rocket:容器集群kubernetes使用的容器技术来创建容器。
pod(实例):实例pod是容器集群kubernetes创建或部署的最小或最简单的基本单位,一个实例pod代表容器集群kubernetes上正在运行的一个进程,一个实例pod封装一个或多个容器,存储资源、一个独立的IP(Internet Protocol,网际互连协议)地址以及管理控制容器运行方式的策略选项。
其中,容器是程序代码和和其依赖关系在应用层的一个抽象,多个容器各自作为独立的进程在同一台机器上的用户空间中运行,并共享操作***内核。
一般情况下,离线业务加载在节点node中的实例pod中。
dynamic-hybrid-controller(控制器):控制器dynamic-hybrid-controller并非容器集群kubernetes的原生组件,而是本实施例在容器集群kubernetes中新引入的组件,是在容器集群kubernetes的CRD(CustomResourceDefinition,自定义资源类型)模式下实现的一个基于监控的动态伸缩的组件,控制着整个动态伸缩的主要逻辑:获取监控数据、计算可用资源、动态伸缩操作、通知资源变化、资源分配展示。
一般情况下,在一个容器集群kubernetes中通常设置一个控制器dynamic-hybrid-controller,控制器dynamic-hybrid-controller可加载于在容器集群控制器kubernetes中的任一节点node上。
该方法可以应用于控制器dynamic-hybrid-controller,由基于容器集群的资源调度装置来执行,该基于容器集群的资源调度装置可以由软件和/或硬件实现,可配置在计算机设备中,例如,服务器、工作站、个人电脑,等等,具体包括如下步骤:
步骤101、读取当前生效的调度策略。
在具体实现中,控制器dynamic-hybrid-controller可持续监听容器集群kubenetes中CRD的创建,其中,CRD是容器集群kubenetes的API(Application ProgramInterface,应用程序编程接口)扩展,可以通过CRD创建自定义的API对象,在本实施例中,可通过CRD创建调度策略,该调度策略用于记录对伸缩离线业务占用的资源的策略。
在一个示例中,调度策略如下表示:
当通过CRD创建或者更新表示调度策略的rs(RelicaSet,用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出了,会自动创建新的实例pod来替代,而如果异常多出来的容器也会自动回收,并提供声明式更新等功能)时,控制器dynamic-hybrid-controller可触发对表示调度策略的rs的定时循环处理。
一般情况下,在不同的时间段,在线业务、离线业务具有不同的特性,例如,在早上、凌晨时段在线业务低谷,可以将更多的资源调度至离线业务,在白天时段在线业务繁忙,可以将更多的资源调度至在线业务,等等。
考虑在线业务、离线业务不同的特性,可针对不同的时段配置不同的调度策略,控制器dynamic-hybrid-controller可定时读取预设的调度策略,其中,调度策略中具有生效的时间段,如hybridStrategys(调度策略的属性)字段中的timeRange字段,若当前的时间在生效的时间段内,则确定调度策略生效,本实施例提供分时段的调度策略,灵活行高,可适应在线业务不同时段的负载特性,尽可能保证最大资源利用率。
需要说明的是,针对某些业务场景,调度策略可设置生效的时间段为0-24,即该调度策略全天24小时生效,从而支撑24小时的离线业务、在线业务混部落地,在提供弹性的同时保证离在线业务与离线业务之间的隔离性,本实施例对此不加以限制。
步骤102、按照调度策略统计离线业务在容器集群中占用的资源,获得资源占用值。
在本实施例中,控制器dynamic-hybrid-controller解析CRD中的调度策略,统计离线业务在容器集群kubenetes中占用的资源,获得资源占用值。
在本发明的一个实施例中,对于不同类型的资源,监控的粒度可能有所不同,例如,对于内存(Memory)、IOWait(输入/输出等待时间),监控内存在节点node的资源占用率对于资源调度具有较佳的意义,对于CPU,监控CPU在实例pod的资源占用率对于资源调度具有较佳的意义,等等,因此,可在调度策略中设置资源的级别(如resourceScaleStrategy字段中的metricType字段)、类型(如resourceScaleStrategy字段中的metric字段)。
其中,级别metricType可以包括第一级别host、第二级别pod,第一级别host用于指示监控离线业务在节点node占用的资源,第二级别pod用于指示监控离线业务在实例pod占用的资源;类型metric可以包括CPU、内存、IOWait,等等。
若级别metricType为第一级别host,则通过调度策略中的match label(匹配标签)获取所有离线业务所在的实例pod,根据实例pod的名称name去prometheus拉取相应的监控数据,从而在离线业务所处的节点node中、统计离线业务占用类型metric下的资源,获得资源占用值。
若级别metricType为第二级别pod,则通过调度策略中的match label(匹配标签)获取所有离线业务所在的实例pod,根据实例pod的名称name查询该实例pod所处的节点node,根据实例的名称node的名称name去prometheus拉取相应的监控数据,从而在离线业务所处的实例pod中、统计离线业务占用类型metric下的资源,获得资源占用值。
需要说明的是,除了分级别进行监控之外,还可以统一在离线业务所处的节点node中、统计离线业务占用类型metric下的资源,获得资源占用值,或者,在离线业务所处的实例pod中、统计离线业务占用类型metric下的资源,统一,获得资源占用值,等等,本实施例对此不加以限制。
步骤103、按照调度策略对离线业务确定调整操作,以使资源占用值往指定的资源占用目标收敛。
在本实施例中,控制器dynamic-hybrid-controller解析CRD中的调度策略,确认对资源设置的占用目标,作为资源占用目标,计算此时对离线业务执行的调整操作,该调整操作可调节资源占用值,使得资源占用值往资源占用目标收敛,即资源占用值朝资源占用目标上升或下降。
在本发明的一个实施例中,调整操作包括缩容操作、扩容操作,其中,缩容操作用于缩小离线业务在容器集群kubenetes中占用的实例pod,扩容操作用于扩大离线业务在容器集群中占用的实例pod。
在调度策略中具有为资源设置的阈值,如threshold字段。
则在本实施例中,以阈值作为参考,基于阈值对资源设置资源占用目标,以及,将资源占用值与相应的资源占用目标进行比较。
若资源占用值大于资源占用目标,则确定对离线业务执行缩容操作,以使资源占用值往资源占用目标降低。
若资源占用值小于或等于资源占用目标,则确定对离线业务执行扩容操作,以使资源占用值往资源占用目标升高。
在一个示例中,若资源为处理器资源CPU,则将阈值threshold设置为资源占用目标。
在本示例中,对CPUUsed进行分析,若CPUUsed>threshold,则确定对离线业务执行缩容操作,若CPUUsed≤threshold,则确定对离线业务执行扩容操作,其中,CPUUsed为CPU资源的资源占用值。
在另一个示例中,若资源为内存资源Memory,则读取离线业务所在节点中内存资源的可分配值、软驱逐值。
将可分配值依次减去软驱逐值、所述阈值的差值,作为资源占用目标。
其中,当可用的资源较低时,容器集群kubenetes仍然要保证节点的稳定性,当处理不可压缩的资源(比如内存或磁盘空间)时,这尤其重要,当这些资源被耗尽时,节点将变得不稳定,容器集群kubenetes会监视并阻止可用资源耗尽,这种情况下,容器集群kubenetes会终止一个或多个实例pod来重新取回耗尽的资源,此时,触发容器集群kubenetes回收资源的阈值可称之为软驱阈值。
在本示例中,对MemUsed进行分析,若MemUsed>node.Mem.Allocatable-node.Mem.Allocatable*10%-threshold,则确定对离线业务执行缩容操作,若MemUsed≤node.Mem.Allocatable-node.Mem.Allocatable*10%-threshold,则确定对离线业务执行扩容操作,其中,MemUsed为内存资源的资源占用值,node.Mem.Allocatable为内存资源的可分配值,node.Mem.Allocatable*10%为软驱逐值。
当然,上述计算资源占用目标的方式只是作为示例,在实施本发明实施例时,可以根据实际情况设置其它计算资源占用目标的方式,本发明实施例对此不加以限制。另外,除了上述计算资源占用目标的方式外,本领域技术人员还可以根据实际需要采用其它计算资源占用目标的方式,本发明实施例对此也不加以限制。
步骤104、按照调整操作调整离线业务在容器集群中占用的实例。
在本实施例中,控制器dynamic-hybrid-controller在确定调整操作之后,可执行该调整操作,从而调整(减少或增加)离线业务在容器集群kubenetes中占用的实例pod。
在线业务存在突发流量的可能,在突发的在线业务到来时,往往将离线业务的资源腾挪给在线业务,在原生的容器集群kubernetes下是直接驱逐离线业务的容器,导致离线业务存在一定的损耗。
在本发明的一个实施例中,调度策略中具有为缩容操作设置的第一时间窗口,如scaleDownCoolDownWindowMinutes字段,为扩容操作设置的第二时间窗口,如scaleUpCoolDownWindowMinutes字段。
若调整操作为缩容操作,则以上一次执行缩容操作的时间作为起始点、设置第一时间窗口scaleDownCoolDownWindowMinutes,例如,上一次执行缩容操作为10:00,第一时间窗口scaleDownCoolDownWindowMinutes为30,则第一时间窗口scaleDownCoolDownWindowMinutes表示10:00-10:30。
从操作***或网络读取当前的时间,以及,将当前的时间与第一时间窗口scaleDownCoolDownWindowMinutes进行比较。
若当前的时间在第一时间窗口之内,则暂停执行缩容操作。
若当前的时间在第一时间窗口之外,则执行缩容操作,以降低离线业务在容器集群kubenetes中占用的实例pod。
若调整操作为扩容操作,则以上一次执行扩容操作的时间作为起始点、设置第二时间窗口scaleUpCoolDownWindowMinutes,例如,上一次执行扩容操作为10:00,第二时间窗口scaleUpCoolDownWindowMinutes为30,则第二时间窗口scaleUpCoolDownWindowMinutes表示10:00-10:30。
从操作***或网络读取当前的时间,以及,将当前的时间与第二时间窗口scaleUpCoolDownWindowMinutes进行比较。
若当前的时间在第二时间窗口scaleUpCoolDownWindowMinutes之内,则暂停执行扩容操作。
若当前的时间在第二时间窗口scaleUpCoolDownWindowMinutes之外,则执行扩容操作,以增加离线业务在容器集群kubenetes中占用的实例pod。
在本实施例中,为缩容操作设置的第一时间窗口,为扩容操作设置第二时间窗口,在间隔第一时间窗口之后执行缩容操作,在间隔第二时间窗口之后执行扩容操作,逐步执行缩容操作、扩容操作,避免频繁执行缩容操作、扩容操作,减少对离线业务造成影响,保证离线业务的稳定性。
在本发明的另一个实施例中,调度策略中具有为缩容操作设置的延时时间,如gracefulScalePeriodSeconds字段。
在离线业务占用较多的资源时,如果短时间内执行缩容操作,可能会强行驱离部分离线业务,导致离线业务出现波动、甚至出错,影响离线业务的稳定性,因此,在本实施例中,若调整操作为缩容操作,则可以在超过延时时间gracefulScalePeriodSeconds之后,执行缩容操作,以降低离线业务在容器集群kubenetes中占用的实例pod,通过延时执行缩容操作,预留较为充足的时间调度离线业务,减少对离线业务出现波动、出错的情况,保证离线业务的稳定性。
在本发明的又一个实施例中,调度策略中具有为缩容操作设置的第一步长如scaleDownStep字段,为扩容操作设置的第二步长,如scaleUpStep字段。
若调整操作为缩容操作,则在容器集群kubenetes中减少数量为第一步长scaleDownStep的实例pod,从而实现缩容。
若调整操作为扩容操作,则在容器集群kubenetes中增加数量为第二步长scaleUpStep的实例pod,从而实现扩容。
在本实施例中,为缩容操作设置的第一步长,为扩容操作设置的第二步长,每次减少数量为第一步长的实例,每次增加数量为第二步长的实例,使得执行缩容操作、扩容操作的幅度合适,避免大幅度减少或增加实例,减少对离线业务造成影响,保证离线业务的稳定性。
以实例pod作为混部在线业务、离线业务的载体,在目前容器集群kubernetes的体系下,实例pod的资源规格需要提前声明,并且实例pod启动后原生的容器集群kubernetes并不支持在线调整示例pod的规格,对资源规格的调整需要重新创建实例pod。
在本发明的再一个实施例中,如图2所示,可以在容器集群kubernetes中设置vscaled(调度组件),调度组件vscaled并非容器集群kubernetes的原生组件,而是本实施例在容器集群kubernetes中新引入的组件,以daemonse的方式运行加载于每一节点node上,可监听本机上所有实例pod的状态变化,并根据其声明的绑核配置动态调整实例pod绑定的CPU,从而在不重启节点pod的前提下修改配置文件cgroup,达到资源伸缩的效果。
其中,daemonSet确保在容器集群kubernetes中全部(或者某些)节点node上运行一个实例pod的副本。
cgroup是linux提供的一种资源限制的机制,它可以通过编辑文件的形式进行配置修改,容器集群中的容器可以基于cgroup进行资源限制。
控制器dynamic-hybrid-controller可按照调整操作减少或增加离线业务在容器集群kubenetes中占用的实例pod,确定分配至实例pod的资源(如CPU、内存等),获得资源分配信息。
调用容器集群kubernetes的更新接口patch将资源分配信息写入实例pod的配置文件pod.metadata.annotations中,该实例pod所处节点node中加载有调度组件vscaled,调度组件vscaled监测配置文件pod.metadata.annotations的变化。
配置文件pod.metadata.annotations在被调度组件vscaled监控到时,按照资源分配信息pod.metadata.annotations修改容器的配置文件cgroup,为实例pod分配资源。
在具体实现中,部署在每台节点node上的调度组件vscaled监听到本节点上的pod更新,解析其资源分配信息pod.metadata.annotations中的垂直扩容配置,通过容器组件docker daemonet的更新接口update container修改对应容器的配置文件cgroup,完成扩容操作、缩容操作,从而隔离CPU。
其中,不同资源需要修改的cgroup路径分别为:
cpuset(cpuset为cgroup中的一个子***,cpuset基本功能是限制某一组进程或者容器只运行在某些CPU和内存节点上,通过cpuset的设置来隔离在线业务和离线业务,相比传统的混部方案具有更强的隔离性):
/sys/fs/cgroup/cpuset/kubepods/$pod_id/$container_id/cpuset.cpus
在本实施例中,读取当前生效的调度策略,按照调度策略统计离线业务在容器集群中占用的资源,获得资源占用值,离线业务加载在节点中的实例,按照调度策略对离线业务确定调整操作,以使资源占用值往指定的资源占用目标收敛,按照调整操作调整离线业务在容器集群中占用的实例,根据在线业务的特性设置相应的调度策略,基于实时监控动态调整离线业务占用的资源,实现了24小时离线业务、在线业务混部的落地,容器集群的CPU使用率全天稳定在40%以上,大大提高了资源利用率,大大降低了容器集群的成本。
实施例二
图3为本发明实施例二提供的一种基于容器集群的资源调度方法的流程图,本实施例以前述实施例为基础,进一步细化调度组件分配CPU资源的操作,该方法具体包括如下步骤:
步骤301、接收实例的更新事件。
容器集群kubernetes提供了request/limit(请求/限制)的资源模型来描述容器的资源声明,requests声明的资源是容器集群kubernetes在调度时的依据,而limit声明的资源是容器在实际运行时能使用到资源上限。
基于不同的requests/limits配比,容器集群kubernetes定义了Guaranteed、Burstable、BestEffort三类QoS等级,在实际生产环境中,大部分的业务容器都会采用一定程度的超卖,以提供资源利用率。
其中,当limits大于requests时,实例pod属于超卖的状态。
在节点node上,容器的request/limit会转换为配置文件linux cgroup,通过配置文件cgroup来达到限制容器资源使用的目的。
在处理器CPU的使用上,配置文件cgroup提供了两种资源限制方式,一种是通过cpu.cfs_quota限制以cpu share为权重的抢占模式,一种是通过cpuset.cpus做到绑定处理器核的绑核模式。
在容器集群kubernetes的资源模型里,既支持通过cpu share的抢占模式使用处理器CPU,也支持通过cpuset的绑核模式来使用处理器CPU,但cpuset的使用前提是容器的request/limit配比为一比一,即容器的QoS等级为Guaranteed这一最高的QoS等级,在发生驱逐和抢占时的优先级最高,不符合离线业务的实际优先级。
在实际应用中,用户可以根据在线业务或离线业务的需求,修改在线业务或离线业务所在实例pod中metadata(元数据)的annotation字段,声明期望绑定的处理器,如“cpuset.huya.com:4”。
本实施例可应用于调度组件vscaled,调度组件vscaled可监听在同一个节点node上实例pod的状态变化。
当修改实例pod中metadata(元数据)的annotation字段时,该实例pod所在节点node中调度组件vscaled可接收到该实例pod的更新事件,该更新事件包括用于绑定处理器的配置信息。
进一步而言,调度组件vscaled可通过容器集群kubenetes的list/watch机制监听在同一个节点node上实例pod的状态变化。
在容器集群kubenetes中具有接口服务API server,Etcd存储集群的数据信息,接口服务API server作为统一入口,对数据的操作一般会经过接口服务API server,客户端(kubelet/scheduler(scheduler是容器集群kubernetes控制面的组件,负责容器资源和宿主的调度和绑定)/controller-manager/调度组件vscaled)通过list-watch监听接口服务API server中资源(pod/rs/rc等等)的create(创建),update(更新)和delete(删除)事件,并针对事件类型调用相应的事件处理函数。
list是调用资源的list API罗列资源,基于HTTP(HyperText TransferProtocol,超文本传输协议)短链接实现;watch则是调用资源的watch API监听资源变更事件,基于HTTP长链接实现。
其中,Watch API,往往带上watch=true,表示采用HTTP长连接持续监听pod相关事件(如更新事件),每当有事件来临,返回一个WatchEvent。
因此,调度组件vscaled可向接口服务API server发送Wath请求,以订阅实例pod绑定处理器的配置信息,在接口服务API server中,接收到Wath请求之后,调用rw.Watch()创建一个watcher,使用serveWatch()来处理这个请求,即记录同一个节点node中实例pod的配置信息是否发生变化,在发生变化时,从watcher的结果channel(频道)中读取一个event对象,生成更新事件,编码写入到response(响应)的流中,并发送至调度组件vscaled,从而调度组件vscaled接收接口服务API server在同一个节点node中实例pod的配置信息发生变化时发送的更新事件。
步骤302、在节点中的处理器中,查找处于空闲状态且满足配置信息的逻辑核,作为目标核。
在本实施例中,调度组件vscaled可从其所在节点node的matadata(元数据)中读取该节点node中处理器的拓扑,并在内存中维护处理器的状态,其中,该状态包括空闲状态、绑定状态,空闲状态表示未被绑定,绑定状态表示已被绑定。
一般情况下,拓扑结构为socket、core、hyperThread的层级结构。
其中,socket为处理器所在的卡槽。
core为处理器的物理核(physical core/processor),有独立的电路元件以及L1、L2缓存,可以独立地执行指令。
hyperThread为逻辑核(logical core/processor,LCPU)上的超线程(Hyper-threading,HT)。逻辑核指的是在同一个物理核内,逻辑层面的核。超线程可以在一个逻辑核等待指令执行的间隔(等待从cache或内存中获取下一条指令),把时间片分配到另一个逻辑核。高速在这两个逻辑核之间切换,让应用程序感知不到这个间隔。
在具体实现中,调度组件vscaled在监听到节点node绑定处理器的配置信息,则可以在当前节点node中的处理器中,查找处于空闲状态(即未被绑定)且满足配置信息的逻辑核,作为目标核。
以数量作为配置信息的示例,则调度组件vscaled可从配置信息中读取目标值,例如,配置信息“cpuset.huya.com:4”中,目标值为4。
在节点node中的处理器中,查找处于空闲状态且数量为该目标值的逻辑核,作为目标核。
此外,逻辑核配置有序号,节点node中诸如网卡等***组件,一般会优先使用序号为0的逻辑核,因此,为了避免抢占0号逻辑核,调度组件vscaled可在节点node中的处理器中,按照逻辑核的序号对逻辑核进行降序排序,按照降序排序之后的顺序,查找处于空闲状态且满足配置信息的逻辑核,作为目标核。
例如,调度组件vscaled启动后维护着逻辑核的列表,序号分别为[0,31],若在先两个实例pod依次声明绑定处理器,分别需要4个逻辑核和2个逻辑核,依次分配的逻辑核的序号分别为[28,31]、[26,27],则其他实例pod在序号为[0,25]的逻辑核进行绑定。
在已绑定的逻辑核较多等情况下,空闲状态(即未绑定)的逻辑核并不满足当前示例pod的需求,若调度组件vscaled未查找到目标核,则可以生成绑定失败事件,将绑定失败事件绑定至当前的实例pod,通知容器集群kubernetes的上层应用。
步骤303、若查找到目标核,则绑定实例与目标核。
如果调度组件vscaled查找到空闲状态(即未绑定)且满足配置信息的逻辑核作为目标核,则可以将实例pod与目标核进行绑定。
在具体实现中,可以将目标核的序号设置至实例pod的第一配置文件cgroup中的绑定模式cpuset。
调用docker update(容器更新)接口将目标核的序号更新至该实例pod中容器的第二配置文件cgroup中的绑定模式cpuset,该实例pod中容器在调用处理器执行业务时,按照第二配置文件cgroup中的绑定模式cpuset调用该序号对应的逻辑核(即目标核)执行业务。
若设置实例pod的第一配置文件cgroup成功、更新该实例pod中容器的第二配置文件cgroup成功,则确定实例pod与目标核绑定成功。
若绑定实例pod与目标核成功,则将目标核的状态从空闲状态修改为绑定状态,以防止后续被其他实例pod调用。
进一步而言,第一配置文件cgroup与第二配置文件cgroup均属于配置文件cgroup,配置文件cgroup是linux操作***提供的一种资源限制机制,它分为多个子***,分别限制不同类别的资源,例如CPU、memory(内存)、cpuset等,其中cpuset cgroup限制了进程可以使用的处理器核的范围,超出该范围的处理器核心则不会使用,在混部的场景下,cpuset的限制可以避免离线业务的iowait遍布所有处理器核从而影响在线业务。
对于原生的容器集群kubernetes,如果调整容器绑定的处理器核,需要重新创建容器,对业务产生很大的影响,而本实施例通过对节点的第一配置文件和容器的第二配置文件进行动态调整实现绑核的动态修改,无需重新创建实例pod、容器,即可修改绑核配置并即时生效,可大大减少对业务的影响。
若更新该实例pod中容器的第二配置文件cgroup失败,则确认实例pod与目标核绑定失败,此时,可生成更新失败事件,将该更新失败事件绑定至当前的实例pod,通知容器集群kubernetes的上层应用。
本实施例应用于容器集群kubenetes的调度组件进行绑核,调度组件独立于绑核模式,因此无需依赖高版本的容器集群kubenetes的绑核模式,从而使得绑核配置不依赖实例的QoS等级,更加适用于业务超卖场景,该调度组件为组件的形式,容器集群kubenetes原生支持调度组件加载、运行,因此无需侵入容器集群kubernetes的代码,可减小对容器集群kubernetes运行的影响,调度组件作为旁路插件即插即用,具备良好的普适性。
调度组件接收实例的更新事件,更新事件包括用于绑定处理器的配置信息,在节点中的处理器中,查找处于空闲状态且满足配置信息的逻辑核,作为目标核,若查找到目标核,则绑定实例与目标核。
调度组件实现了绑定处理器核的自动管理,通过节点的声明式配置自动进行分配,大大降低了运维成本,可以让I/O密集型的离线业务通过绑定处理器核的方式,将其运行过程中由于超卖带来的iowait提升隔离在特定的处理器核上,从而不会影响在线业务,保证了在混部场景下在线业务的稳定性。
实施例三
图4为本发明实施例三提供的一种处理器的绑定方法的流程图,本实施例以前述实施例为基础,进一步增加调度组件vscaled删除实例pod、检测绑定情况的操作,该方法具体包括如下步骤:
步骤401、接收实例的更新事件。
其中,更新事件包括用于绑定处理器的配置信息。
步骤402、在节点中的处理器中,查找处于空闲状态且满足配置信息的逻辑核,作为目标核。
步骤403、若查找到目标核,则绑定实例与目标核。
步骤404、接收实例的删除事件。
在实际应用中,可以根据在线业务或离线业务的需求,可通过“kubectl deletepod name”等命令删除在线业务、离线业务所在实例pod。
调度组件vscaled可通过list/watch机制等方式监听在同一个节点node上实例pod的状态变化,当用户删除某个实例pod时,该实例pod所在节点node中调度组件vscaled可接收到该实例pod的删除事件。
在具体实现中,调度组件vscaled可向接口服务API server发送Wath请求,以订阅删除实例pod的信息,在接口服务API server中,接收到Wath请求之后,调用rw.Watch()创建一个watcher,使用serveWatch()来处理这个请求,即记录同一个节点node中实例pod是否删除,在删除时,从watcher的结果channel(频道)中读取一个event对象,生成删除事件,编码写入到response(响应)的流中,并发送至调度组件vscaled,从而调度组件vscaled接收接口服务API server在删除同一个节点node中的实例pod时发送的删除事件。
步骤405、响应于删除事件,查询实例当前绑定的逻辑核,作为候选核。
调度组件vscaled响应实例pod的删除事件,查询待删除的实例pod当前绑定的逻辑核,作为候选核。
一般情况下,可从待删除的实例pod的容器中读取第二配置文件cgroup,从该第二配置文件cgroup读取绑定模式中的序号,确定待删除的实例pod当前绑定该序号表示的逻辑核,从而获得候选核。
当然,除了容器的第二配置文件cgroup查询实例当前绑定的逻辑核之外,还可以应用实例pod的第一配置文件cgroup查询实例当前绑定的逻辑核,即从待删除的实例pod中读取第一配置文件cgroup,从该第一配置文件cgroup读取绑定模式中的序号,确定待删除的实例pod当前绑定该序号表示的逻辑核,从而获得候选核,等等,本实施例对此不加以限制。
步骤406、将候选核从绑定状态修改为空闲状态。
对于待删除的实例pod已绑定的逻辑核(即候选核),可以将其状态从绑定状态修改为空闲状态,使得可以被其他实例pod抢占、绑定,保证逻辑核的正常调配,避免空占的情况,即已被绑定、无业务分配执行。
步骤407、查询实例当前绑定的逻辑核,作为参考核。
在某些情况下,实例pod实际绑定的逻辑核会发生变化,使得与在先期望绑定的逻辑核不符。
例如,由于调度组件vscaled并非容器集群kubernetes的控制程序,容器集群kubernetes在发生故障重启时,会按照默认的方式绑定实例pod与逻辑核,并非按照调度组件vscaled记录的配置信息绑定实例pod与逻辑核。
在本实施例中,调度组件vscaled可周期性地查询当前节点node中各个实例pod当前绑定的逻辑核,作为参考核。
一般情况下,可从各个实例pod的容器中读取第二配置文件cgroup,从该第二配置文件cgroup读取绑定模式中的序号,确定当前节点node中各个实例pod当前绑定该序号表示的逻辑核,从而获得参考核。
当然,除了容器的第二配置文件cgroup查询实例pod当前绑定的逻辑核之外,还可以应用实例pod的第一配置文件cgroup查询实例pod当前绑定的逻辑核,即从各个实例pod中读取第一配置文件cgroup,从该第一配置文件cgroup读取绑定模式中的序号,确定待删除的实例pod当前绑定该序号表示的逻辑核,从而获得参考核,等等,本实施例对此不加以限制。
步骤408、若参考核与目标核不同,则将实例从绑定参考核切换至绑定目标核。
针对同一个实例pod,参考核为实际绑定的逻辑核,目标核为期望绑定的逻辑核,调度组件vscaled可将参考核与目标核进行比较。
如果参考核与目标核相同,则表示实际绑定的逻辑核与预期绑定的逻辑核相同,调度组件vscaled并不做处理,等待下一次检测。
如果参考核与目标核不同,则表示实际绑定的逻辑核与预期绑定的逻辑核不同,调度组件vscaled将实例pod从绑定参考核切换至绑定目标核,使得实际绑定的逻辑核与预期绑定的逻辑核相同。
在具体实现中,可以将目标核的序号设置至实例pod的第一配置文件cgroup中的绑定模式cpuset。
调用docker update(容器更新)接口将目标核的序号更新至该实例pod中容器的第二配置文件cgroup中的绑定模式cpuset,该实例pod中容器在调用处理器执行业务时,按照第二配置文件cgroup中的绑定模式cpuset调用该序号对应的逻辑核(即目标核)执行业务。
若设置实例pod的第一配置文件cgroup成功、更新该实例pod中容器的第二配置文件cgroup成功,则确定实例pod与目标核绑定成功。
对于切换绑定目标核之后、未被绑定的参考核,可以将该参考核的状态设置为空闲状态。
实施例四
图5为本发明实施例二提供的一种基于容器集群的资源调度方法的流程图,本实施例以前述实施例为基础,进一步增加通知资源管理器调度离线业务、资源展示的操作,该方法具体包括如下步骤:
步骤501、读取当前生效的调度策略。
步骤502、按照调度策略统计离线业务在容器集群中占用的资源,获得资源占用值。
其中,离线业务加载在节点中的实例。
步骤503、按照调度策略对离线业务确定调整操作,以使资源占用值往指定的资源占用目标收敛。
步骤504、按照调整操作调整离线业务在容器集群中占用的实例。
步骤505、若执行调整操作完成,则查询分配至实例的资源,获得资源分配信息。
步骤506、将资源分配信息通知资源管理器。
由于容器集群kubernetes更多是面向在线业务的容器编排***,离线业务目多是通过资源管理器框架进行调度,其中,资源管理器用于在容器集群中调度离线业务,如yarn。
如图2所示,yarn为负责调度和运行离线业务的***,由resource manager(资源管理器)、node manager(节点管理器)、app master(应用主机)、业务进程等组成。
其中,resource manager负责yarn集群中所有资源的统一管理和分配,它接收来自各个节点node manager的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序的app master。
node manager是yarn集群中单个节点上的代理,负责管理单个计算节点,功能包括与resource manager保持通信、管理容器的生命周期、监控容器的资源使用(内存、CPU等)情况、追踪节点健康状况、管理日志和不同应用程序用到的附属服务。
app master是一个yarn任务运行时第一个启动的容器,负责整个任务的运行,包括容器的申请、启动、kill(关闭)、状态检查等。
因此,在混部场景下,由容器集群kubernetes交付容器的计算资源,由资源管理器(如yarn)进行离线业务的调度,两者进行一定程度的调度协调,即离线业务的容器资源规格发生了变化,让资源管理器(如yarn)感知到该编号从而进行合理的任务调度,这依赖容器集群kubernetes和资源管理器(如yarn)之间的协调通知机制。
在本实施例中,在每次进行动态的调整操作后,会得到新的离线业务所占用的资源,获得资源分配信息,控制器dynamic-hybrid-controller可将资源分配信息通知资源管理器(如yarn),资源管理器(如yarn)根据资源分配信息调度容器集群kubernetes的离线业务,保证离线业务的正常运行。
在具体实现中,可以预先设置事件通知器dynamic-resource-event,事件通知器dynamic-resource-event是控制器dynamic-hybrid-controller与资源管理器(如yarn)之间交互的组件,可以为HTTP服务,独立于容器集群kubernetes与资源管理器(如yarn),控制器dynamic-hybrid-controller可按照HTTP协议将资源分配信息发送至事件通知器dynamic-resource-event,事件通知器dynamic-resource-event用于按照HTTP服务将资源分配信息发送至资源管理器。
步骤507、将资源分配信息写入预设的指标配置中。
在具体实现中,如图2所示,可以预先设置监控器,如prometheus(一个开源的容器集群监控***,可以提供每台宿主和容器的内存、CPU等多维度资源的实时监控数据),监控器(如prometheus)独立于容器集群kubernetes与资源管理器(如yarn)。
控制器dynamic-hybrid-controller可将资源分配信息写入指标配置metrics中,监控器(如prometheus)定时拉取控制器dynamic-hybrid-controller暴露出来的指标配置metrics,当指标配置在被监控器拉取时,以节点node为单位进行显示,使得用户通过web(网页)等方式以节点node为单位浏览分配至离线业务的资源情况,从而快速响应容器集群kubernetes可能出现的异常,保证容器集群kubernetes的正常运行。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例五
图6为本发明实施例五提供的一种基于容器集群的资源调度装置的结构框图,一控制器加载于在容器集群中的节点,所述装置位于于所述控制器,具体可以包括如下模块:
调度策略读取模块601,用于读取当前生效的调度策略;
资源占用值统计模块602,用于按照所述调度策略统计离线业务在所述容器集群中占用的资源,获得资源占用值,所述离线业务加载在所述节点中的实例;
调整操作确定模块603,用于按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛;
调整操作执行模块604,用于按照所述调整操作调整所述离线业务在所述容器集群中占用的实例。
在本发明的一个实施例中,所述调度策略读取模块601包括:
预设策略读取子模块,用于读取预设的调度策略,所述调度策略中具有生效的时间段;
生效确定子模块,用于若当前的时间在所述生效的时间段内,则确定所述调度策略生效。
在本发明的一个实施例中,所述调度策略中具有资源的级别、类型;
所述资源占用值统计模块602包括:
节点资源统计子模块,用于若所述级别为第一级别,则在离线业务所处的节点中、统计所述离线业务占用所述类型下的资源,获得资源占用值;
实例资源统计子模块,用于若所述级别为第二级别,则在离线业务所处的实例中、统计所述离线业务占用所述类型下的资源,获得资源占用值。
在本发明的一个实施例中,所述调整操作包括缩容操作、扩容操作,所述调度策略中具有为所述资源设置的阈值;
所述调整操作确定模块603包括:
资源占用目标设置子模块,用于基于所述阈值对所述资源设置资源占用目标;
缩容操作确定子模块,用于若所述资源占用值大于所述资源占用目标,则确定对所述离线业务执行缩容操作,以使所述资源占用值往所述资源占用目标降低;
扩容操作确定子模块,用于若所述资源占用值小于或等于所述资源占用目标,则确定对所述离线业务执行扩容操作,以使所述资源占用值往所述资源占用目标升高。
在本发明的一个实施例中,所述资源占用目标设置子模块包括:
阈值设置单元,用于若所述资源为处理器资源,则将所述阈值设置为资源占用目标;
资源信息读取单元,用于若所述资源为内存资源,则读取所述离线业务所在节点中内存资源的可分配值、软驱逐值;
差值设置单元,用于将所述可分配值依次减去所述软驱逐值、所述阈值的差值,作为资源占用目标。
在本发明的一个实施例中,所述调度策略中具有为缩容操作设置的第一时间窗口、为扩容操作设置的第二时间窗口;
所述调整操作执行模块604包括:
第一时间窗口设置子模块,用于若所述调整操作为缩容操作,则以上一次执行所述缩容操作的时间作为起始点、设置所述第一时间窗口;
第一时间窗口设置子模块,用于若当前的时间在所述第一时间窗口之外,则执行所述缩容操作,以降低所述离线业务在所述容器集群中占用的实例;
或者,
第二时间窗口设置子模块,用于若所述调整操作为扩容操作,则以上一次执行所述扩容操作的时间作为起始点、设置所述第二时间窗口;
第二时间窗口设置子模块,用于若当前的时间在所述第二时间窗口之外,则执行所述扩容操作,以增加所述离线业务在所述容器集群中占用的实例。
在本发明的一个实施例中,所述调度策略中具有为所述缩容操作设置的延时时间;
所述调整操作执行模块604包括:
延时缩容子模块,用于若所述调整操作为缩容操作,则在超过所述延时时间之后,执行所述缩容操作,以降低所述离线业务在所述容器集群中占用的实例。
在本发明的一个实施例中,所述调度策略中具有为缩容操作设置的第一步长、为扩容操作设置的第二步长;
所述调整操作执行模块604包括:
步进缩容子模块,用于若所述调整操作为缩容操作,则在所述容器集群中减少数量为所述第一步长的实例;
或者,
步进扩容子模块,用于若所述调整操作为扩容操作,则在所述容器集群中增加数量为所述第二步长的实例。
在本发明的一个实施例中,所述调整操作执行模块604包括:
实例调整子模块,用于按照所述调整操作减少或增加所述离线业务在所述容器集群中占用的实例;
资源分配信息确定子模块,用于确定分配至所述实例的资源,获得资源分配信息;
配置文件写模块,用于将所述资源分配信息写入所述实例的配置文件中,所述配置文件在被调度组件监控到时,按照所述资源分配信息为所述实例分配资源,其中,所述调度组件加载于所述实例所处的节点中。
在本发明的一个实施例中,还包括:
资源分配信息查询模块,用于若执行所述调整操作完成,则查询分配至所述实例的资源,获得资源分配信息;
资源管理器通知模块,用于将所述资源分配信息通知资源管理器,所述资源管理器用于在所述容器集群中调度所述离线业务;
指标配置写模块,用于将所述资源分配信息写入预设的指标配置中,所述指标配置在被监控器拉取时,以所述节点为单位进行显示,所述事件通知器独立于所述容器集群。
在本发明的一个实施例中,所述资源管理器通知模块包括:
事件通知器通知子模块,用于将所述资源分配信息发送至事件通知器,所述事件通知器用于将所述资源分配信息发送至资源管理器,所述事件通知器独立于所述容器集群与资源管理器。
本发明实施例所提供的基于容器集群的资源调度装置可执行本发明任意实施例所提供的基于容器集群的资源调度方法,具备执行方法相应的功能模块和有益效果。
实施例六
图7为本发明实施例六提供的一种计算机设备的结构示意图。图7示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图7显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,***存储器28,连接不同***组件(包括***存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,***总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及***组件互连(PCI)总线。
计算机设备12典型地包括多种计算机***可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
***存储器28可以包括易失性存储器形式的计算机***可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机***存储介质。仅作为举例,存储***34可以用于读写不可移动的、非易失性磁介质(图7未显示,通常称为“硬盘驱动器”)。尽管图7中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
处理单元16通过运行存储在***存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的基于容器集群的资源调度方法。
实施例七
本发明实施例七还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述基于容器集群的资源调度方法的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,计算机可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (14)

1.一种基于容器集群的资源调度方法,其特征在于,一控制器加载于在容器集群中的节点,所述方法应用于所述控制器,包括:
读取当前生效的调度策略;
按照所述调度策略统计离线业务在所述容器集群中占用的资源,获得资源占用值,所述离线业务加载在所述节点中的实例;
按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛;
按照所述调整操作调整所述离线业务在所述容器集群中占用的实例;
所述调整操作包括缩容操作、扩容操作,所述调度策略中具有为所述资源设置的阈值;
所述按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛,包括:
基于所述阈值对所述资源设置资源占用目标;
若所述资源为内存资源,则读取离线业务所在节点中内存资源的可分配值、软驱逐值,将可分配值依次减去软驱逐值、所述阈值的差值,作为资源占用目标;
其中,当处理不可压缩的资源时,触发容器集群回收资源的阈值为软驱阈值。
2.根据权利要求1所述的方法,其特征在于,所述读取当前生效的调度策略,包括:
读取预设的调度策略,所述调度策略中具有生效的时间段;
若当前的时间在所述生效的时间段内,则确定所述调度策略生效。
3.根据权利要求1所述的方法,其特征在于,所述调度策略中具有资源的级别、类型;
所述按照所述调度策略统计离线业务在所述容器集群中占用的资源,获得资源占用值,包括:
若所述级别为第一级别,则在离线业务所处的节点中、统计所述离线业务占用所述类型下的资源,获得资源占用值;
若所述级别为第二级别,则在离线业务所处的实例中、统计所述离线业务占用所述类型下的资源,获得资源占用值。
4.根据权利要求1所述的方法,其特征在于,
所述按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛,包括:
若所述资源占用值大于所述资源占用目标,则确定对所述离线业务执行缩容操作,以使所述资源占用值往所述资源占用目标降低;
若所述资源占用值小于或等于所述资源占用目标,则确定对所述离线业务执行扩容操作,以使所述资源占用值往所述资源占用目标升高。
5.根据权利要求4所述的方法,其特征在于,所述基于所述阈值对所述资源设置资源占用目标,包括:
若所述资源为处理器资源,则将所述阈值设置为资源占用目标。
6.根据权利要求1所述的方法,其特征在于,所述调度策略中具有为缩容操作设置的第一时间窗口、为扩容操作设置的第二时间窗口;
所述按照所述调整操作调整所述离线业务在所述容器集群中占用的实例,包括:
若所述调整操作为缩容操作,则以上一次执行所述缩容操作的时间作为起始点、设置所述第一时间窗口;
若当前的时间在所述第一时间窗口之外,则执行所述缩容操作,以降低所述离线业务在所述容器集群中占用的实例;
或者,
若所述调整操作为扩容操作,则以上一次执行所述扩容操作的时间作为起始点、设置所述第二时间窗口;
若当前的时间在所述第二时间窗口之外,则执行所述扩容操作,以增加所述离线业务在所述容器集群中占用的实例。
7.根据权利要求1所述的方法,其特征在于,所述调度策略中具有为所述缩容操作设置的延时时间;
所述按照所述调整操作调整所述离线业务在所述容器集群中占用的实例,包括:
若所述调整操作为缩容操作,则在超过所述延时时间之后,执行所述缩容操作,以降低所述离线业务在所述容器集群中占用的实例。
8.根据权利要求1所述的方法,其特征在于,所述调度策略中具有为缩容操作设置的第一步长、为扩容操作设置的第二步长;
所述按照所述调整操作调整所述离线业务在所述容器集群中占用的实例,包括:
若所述调整操作为缩容操作,则在所述容器集群中减少数量为所述第一步长的实例;
或者,
若所述调整操作为扩容操作,则在所述容器集群中增加数量为所述第二步长的实例。
9.根据权利要求1所述的方法,其特征在于,所述按照所述调整操作调整所述离线业务在所述容器集群中占用的实例,包括:
按照所述调整操作减少或增加所述离线业务在所述容器集群中占用的实例;
确定分配至所述实例的资源,获得资源分配信息;
将所述资源分配信息写入所述实例的配置文件中,所述配置文件在被调度组件监控到时,按照所述资源分配信息为所述实例分配资源,其中,所述调度组件加载于所述实例所处的节点中。
10.根据权利要求1-9任一项所述的方法,其特征在于,还包括:
若执行所述调整操作完成,则查询分配至所述实例的资源,获得资源分配信息;
将所述资源分配信息通知资源管理器,所述资源管理器用于在所述容器集群中调度所述离线业务;
将所述资源分配信息写入预设的指标配置中,所述指标配置在被监控器拉取时,以所述节点为单位进行显示,设置事件通知器独立于所述容器集群。
11.根据权利要求10所述的方法,其特征在于,所述将所述资源分配信息通知资源管理器,包括:
将所述资源分配信息发送至事件通知器,所述事件通知器用于将所述资源分配信息发送至资源管理器,所述事件通知器独立于所述容器集群与资源管理器。
12.一种基于容器集群的资源调度装置,其特征在于,一控制器加载于在容器集群中的节点,所述装置位于于所述控制器,包括:
调度策略读取模块,用于读取当前生效的调度策略;
资源占用值统计模块,用于按照所述调度策略统计离线业务在所述容器集群中占用的资源,获得资源占用值,所述离线业务加载在所述节点中的实例;
调整操作确定模块,用于按照所述调度策略对所述离线业务确定调整操作,以使所述资源占用值往指定的资源占用目标收敛;
调整操作执行模块,用于按照所述调整操作调整所述离线业务在所述容器集群中占用的实例;
所述调整操作包括缩容操作、扩容操作,所述调度策略中具有为所述资源设置的阈值;
所述调整操作确定模块包括:
资源占用目标设置子模块,用于基于所述阈值对所述资源设置资源占用目标;
所述资源占用目标设置子模块,还用于若所述资源为内存资源,则读取离线业务所在节点中内存资源的可分配值、软驱逐值,将可分配值依次减去软驱逐值、所述阈值的差值,作为资源占用目标;
其中,当处理不可压缩的资源时,触发容器集群回收资源的阈值为软驱阈值。
13.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的基于容器集群的资源调度方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1-11中任一项所述的基于容器集群的资源调度方法。
CN202011097911.2A 2020-10-14 2020-10-14 基于容器集群的资源调度方法、装置、设备和存储介质 Active CN112199194B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011097911.2A CN112199194B (zh) 2020-10-14 2020-10-14 基于容器集群的资源调度方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011097911.2A CN112199194B (zh) 2020-10-14 2020-10-14 基于容器集群的资源调度方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN112199194A CN112199194A (zh) 2021-01-08
CN112199194B true CN112199194B (zh) 2024-04-19

Family

ID=74008966

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011097911.2A Active CN112199194B (zh) 2020-10-14 2020-10-14 基于容器集群的资源调度方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN112199194B (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112905334A (zh) * 2021-02-02 2021-06-04 深信服科技股份有限公司 资源管理方法、装置、电子设备和存储介质
CN113094158A (zh) * 2021-03-15 2021-07-09 国政通科技有限公司 服务的驱动调用方法、调用装置、电子设备及存储介质
CN113515355A (zh) * 2021-04-06 2021-10-19 北京三快在线科技有限公司 资源调度方法、装置、服务器及计算机可读存储介质
EP4086764A1 (en) * 2021-05-06 2022-11-09 Ateme Method for dynamic resources allocation and apparatus for implementing the same
CN113590255A (zh) * 2021-05-19 2021-11-02 北京中电飞华通信有限公司 基于YARN和Kubernetes的容器化双层调度方法及***
CN113590313B (zh) * 2021-07-08 2024-02-02 杭州网易数之帆科技有限公司 负载均衡方法、装置、存储介质和计算设备
CN113407310A (zh) * 2021-07-09 2021-09-17 科东(广州)软件科技有限公司 一种容器管理方法、装置、设备及存储介质
CN113590317A (zh) * 2021-07-27 2021-11-02 杭州朗和科技有限公司 离线业务的调度方法、装置、介质和计算设备
CN113792192B (zh) * 2021-08-09 2022-12-30 万翼科技有限公司 开源业务函数支撑***及业务函数的控制方法
CN113377500B (zh) * 2021-08-12 2021-12-14 浙江大华技术股份有限公司 一种资源调度方法、装置、设备及介质
CN114020430A (zh) * 2021-11-04 2022-02-08 上海合阔信息技术有限公司 一种分布式任务调度方法、装置、电子设备及存储介质
CN116204268A (zh) * 2021-11-30 2023-06-02 华为技术有限公司 一种云实例的扩缩容方法及其相关设备
CN114629960B (zh) * 2022-03-14 2023-09-19 抖音视界有限公司 资源调度方法、装置、***、设备、介质和程序产品
CN114666215B (zh) * 2022-03-15 2023-09-08 上海道客网络科技有限公司 一种应用跨集群弹性伸缩的方法、***、介质和电子设备
CN114706596B (zh) * 2022-04-11 2023-12-01 中国电信股份有限公司 容器部署方法、资源调度方法、装置、介质和电子设备
CN114461437B (zh) * 2022-04-11 2022-06-10 中航信移动科技有限公司 一种数据处理方法、电子设备及存储介质
CN115361285B (zh) * 2022-07-05 2024-02-23 海南车智易通信息技术有限公司 实现离在线业务混合部署的方法、装置、设备及介质
CN115129458B (zh) * 2022-09-02 2022-11-25 腾讯科技(深圳)有限公司 基于容器的进程调度方法、装置、设备及存储介质
CN115964182B (zh) * 2023-03-16 2023-07-21 阿里巴巴(中国)有限公司 资源的调度方法和***
CN117076142B (zh) * 2023-10-17 2024-01-30 阿里云计算有限公司 多租户资源池配置方法和多租户服务***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108462656A (zh) * 2016-12-09 2018-08-28 ***通信有限公司研究院 基于容器的业务融合部署的资源调度方法及装置
CN108762912A (zh) * 2018-07-04 2018-11-06 郑州云海信息技术有限公司 一种容器集群弹性伸缩的方法和装置
CN109086135A (zh) * 2018-07-26 2018-12-25 北京百度网讯科技有限公司 资源伸缩方法、装置、计算机设备及存储介质
CN110457135A (zh) * 2019-08-09 2019-11-15 重庆紫光华山智安科技有限公司 一种资源调度方法、装置及共享gpu显存的方法
WO2020001320A1 (zh) * 2018-06-27 2020-01-02 阿里巴巴集团控股有限公司 一种资源分配方法、装置及设备
CN110825520A (zh) * 2019-10-18 2020-02-21 山东省计算中心(国家超级计算济南中心) 一种实现资源高效利用的集群极速弹性伸缩方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108462656A (zh) * 2016-12-09 2018-08-28 ***通信有限公司研究院 基于容器的业务融合部署的资源调度方法及装置
WO2020001320A1 (zh) * 2018-06-27 2020-01-02 阿里巴巴集团控股有限公司 一种资源分配方法、装置及设备
CN108762912A (zh) * 2018-07-04 2018-11-06 郑州云海信息技术有限公司 一种容器集群弹性伸缩的方法和装置
CN109086135A (zh) * 2018-07-26 2018-12-25 北京百度网讯科技有限公司 资源伸缩方法、装置、计算机设备及存储介质
CN110457135A (zh) * 2019-08-09 2019-11-15 重庆紫光华山智安科技有限公司 一种资源调度方法、装置及共享gpu显存的方法
CN110825520A (zh) * 2019-10-18 2020-02-21 山东省计算中心(国家超级计算济南中心) 一种实现资源高效利用的集群极速弹性伸缩方法

Also Published As

Publication number Publication date
CN112199194A (zh) 2021-01-08

Similar Documents

Publication Publication Date Title
CN112199194B (zh) 基于容器集群的资源调度方法、装置、设备和存储介质
US11226847B2 (en) Implementing an application manifest in a node-specific manner using an intent-based orchestrator
CN109565515B (zh) 分布式资源管理***中的动态租户结构调整的***、设备和过程
CN110221920B (zh) 部署方法、装置、存储介质及***
US20230229495A1 (en) Task scheduling method and apparatus
CN112052068A (zh) 一种Kubernetes容器平台CPU绑核的方法与装置
CN105874433B (zh) 用于支持分布式数据网格中的异步调用的***和方法
CN108509280B (zh) 一种基于推送模型的分布式计算集群本地性调度方法
WO2022057001A1 (zh) 一种设备纳管方法、***及纳管集群
CN112463395A (zh) 一种资源分配方法、装置、设备及可读存储介质
CN112039963B (zh) 一种处理器的绑定方法、装置、计算机设备和存储介质
CN111625339A (zh) 集群资源调度方法、装置、介质和计算设备
CN114518955A (zh) 一种基于kubernetes的Flink云原生部署架构方法及***
CN112866314B (zh) 分布式主从***中从节点的切换方法、主节点设备和存储介质
CN113760549B (zh) 一种pod部署方法及装置
CN111190719B (zh) 优化集群资源分配的方法、装置、介质及电子设备
EP3084603B1 (en) System and method for supporting adaptive busy wait in a computing environment
US20230315531A1 (en) Method of creating container, electronic device and storage medium
CN113515356B (zh) 一种轻量级分布式资源管理与任务调度器及方法
CN115063282A (zh) 一种gpu资源调度方法、装置、设备及存储介质
CN111813564B (zh) 集群资源管理方法、装置及容器集群管理***
CN110399206B (zh) 一种基于云计算环境下idc虚拟化调度节能***
CN113986458A (zh) 容器集合调度方法、装置、设备及存储介质
CN112015515B (zh) 一种虚拟网络功能的实例化方法及装置
CN112433840A (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
GR01 Patent grant
GR01 Patent grant