掌桥专利:专业的专利平台
掌桥专利
首页

容器组的部署方法、装置及服务器

文献发布时间:2023-06-19 09:33:52


容器组的部署方法、装置及服务器

技术领域

本发明涉及集群管理技术领域,更具体地,涉及一种容器组的部署方法、一种容器组的部署装置、一种服务器以及一种计算机可读存储介质。

背景技术

kubernetes(k8s)是一种基于容器的集群管理平台,如图1所示,kubernetes集群中包括主节点(master)和分别与主节点通信连接的多个计算节点(node)。主节点用于管理和控制多个计算节点。计算节点是工作负载节点,每个计算节点中部署有多个容器组(pod),每个容器组中封装有一个或多个用于承载软件程序的容器(container),pod是kubernetes的基本操作单元,是最小的可创建、调试和管理的部署单元,同一个pod中的多个container共享网络资源,例如,一个pod只有一个IP地址,同一个pod中的多个container共享该IP地址。

在k8s集群中,每个节点都拥有定量的CPU和内存资源,在部署容器组时,k8s调度器会根据容器组的请求属性中定义的资源需求量遍历节点列表,判断节点的剩余可用资源能否满足容器组要求的资源,从而选出候选节点用于部署容器组。如果节点列表中每个节点的剩余可用资源都不能满足容器组要求的资源,则该容器组的部署将无限期的进入被挂起(pending)状态,此时需要运维人员手动添加新的节点以向容器组提供足够的资源,使该容器组部署至新的节点。

但是在实际应用中,常常会碰到大部分节点都有剩余可用资源,但都不满足容器组要求的资源,从而导致的无法部署该容器组的情况,如果增加新的节点,又会造成资源的浪费。

发明内容

本发明实施例的一个目的是提供一种容器组的部署的新的技术方案。

根据本发明的第一方面,提供了一种容器组的部署方法,所述方法包括:

接收容器组部署请求,所述容器组部署请求中至少包括第一容器组所需的第一资源;

遍历节点列表中的节点,确定是否存在第一节点,所述第一节点的剩余可用资源满足所述第一资源;

若所述节点列表中不存在所述第一节点,从所述节点列表中确定出第二节点和第三节点;

将所述第二节点中的第二容器组迁移至所述第三节点中,以使所述第二节点的剩余可用资源满足所述第一资源;

将所述第一容器组部署至已完成所述第二容器组迁移操作的第二节点。

可选地,其中,所述方法还包括:

若所述节点列表中存在所述第一节点,则响应所述容器组部署请求,以将所述第一容器组部署在所述第一节点中。

可选地,其中,所述从所述节点列表中确定出第二节点和第三节点,包括:

将所述节点列表中满足预设节点选择条件的节点确定为第一候选节点;

在所述第一候选节点上存在满足预设移动条件的待移动容器组时,确定该第一候选节点为所述第二节点;

以及,当所述节点列表中任一节点的剩余可用资源满足所述待移动容器组所需的资源时,将该节点确定为所述第三节点。

可选地,其中,确定所述第一候选节点上存在满足预设移动条件的待移动容器组,包括:

确定所述第一候选节点上已部署的任一个容器组所占有的第二资源是否小于所述第一资源;

若所述第二资源小于所述第一资源,则确定所述第二资源与所述第一候选节点的剩余可用资源之和是否大于或等于所述第一资源;

若所述第二资源与所述第一候选节点的剩余可用资源之和大于或等于所述第一资源,则确定所述第一候选节点上存在满足预设移动条件的容器组。

可选地,其中,所述确定所述第一候选节点上已部署的任一个容器组所占有的第二资源是否小于所述第一资源,包括:

遍历所述第一候选节点上已部署的所有容器组,直至任一容器组所占有的第二资源小于所述第一资源为止。

可选地,其中,所述方法还包括:

当所述节点列表中不存在剩余可用资源满足所述第二资源的节点,判断所述待移动容器组移动次数是否小于预设移动次数;

若所述待移动容器组移动次数不小于所述预设移动次数,则生成新增节点通知消息,以通知运维人员增加用于部署所述第一容器组的新的节点。

可选地,其中,所述预设节点选择条件包括:

所述节点的总资源大于或等于所述第一资源;以及,

所述节点上已部署的容器组中,存在所需资源小于所述第一资源的容器组。

可选地,其中,所述将所述节点列表中满足预设节点选择条件的节点确定为第一候选节点之后,所述方法还包括:

为所述第一候选节点生成跳跃表,所述跳跃表中存储有所述节点上已部署的所有容器组所需资源的信息。

可选地,其中,所述跳跃表中的所述容器组按照所需资源从小到大进行排序。

可选地,其中,所述遍历节点列表中的节点,确定是否存在第一节点,包括:

遍历所述节点列表中的节点,将符合预选条件的节点确定为预选节点;

判断所述预选节点是否符合预设优选策略;

若符合,将所述预选节点确定为所述第一节点;

若不符合,确定所述节点列表中不存在剩余可用资源满足所述第一资源的第一节点。

可选地,其中,所述预选条件包括:

节点处于可用状态,节点的当前磁盘输入输出压力小于预设压力阈值,节点的当前负载小于预设负载阈值,以及,节点的剩余可用资源大于等于所述第一资源。

可选地,其中,所述预设优选策略包括:

节点上资源的消耗最小,节点上各项资源使用率最均衡,节点倾向信息表明是否适合部署所述第一容器组,节点上第一容器组的容忍性与节点的污点列表项的匹配度;节点上亲和性条目的匹配项数量;与服务器上其他容器组尽量不在同一个节点上,选择消耗最大的节点,节点标签的得分,或者,节点所需镜像得分。

根据本发明的第二方面,提供了一种容器组的部署装置,所述装置包括:

接收模块,用于接收容器组部署请求,所述容器组部署请求中至少包括第一容器组所需的第一资源;

确定模块,用于遍历节点列表中的节点,确定是否存在第一节点,所述第一节点的剩余可用资源满足所述第一资源;若所述节点列表中不存在所述第一节点,从所述节点列表中确定出第二节点和第三节点;

迁移模块,用于将所述第二节点中的第二容器组迁移至所述第三节点中,以使所述第二节点的剩余可用资源满足所述第一资源;

部署模块,用于将所述第一容器组部署至已完成所述第二容器组迁移操作的第二节点。

根据本发明的第三方面,提供了一种服务器,包括如本发明的第二方面中所述的容器组的部署装置,或者,所述服务器包括:

存储器,用于存储可执行命令;

处理器,用于在所述可执行命令的控制下,执行如本发明的第一方面中任一项所述的容器组的部署方法。

根据本发明的第四方面,提供了一种计算机可读存储介质,存储有可执行指令,所述可执行指令被处理器执行时,执行如本发明的第一方面中任一项所述的容器组的部署方法。

根据本发明的一个实施例,通过接收至少包括第一容器组所需的第一资源的容器组部署请求;遍历节点列表中的节点,确定是否存在第一节点,所述第一节点的剩余可用资源满足所述第一资源;若所述节点列表中不存在所述第一节点,从所述节点列表中确定出第二节点和第三节点;将所述第二节点中的第二容器组迁移至所述第三节点中,以使所述第二节点的剩余可用资源满足所述第一资源;以及,将所述第一容器组部署至已完成所述第二容器组迁移操作的第二节点。可以对已有节点上的资源碎片进行整理以部署新的容器组,避免由于存在资源碎片而导致的资源浪费。同时,在无法通过资源碎片整理部署新的容器组,即剩余可用资源确实不足的情况下,还可以主动通知运维人员增加新的节点以完成新的容器组的部署。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。

图1为kubernetes集群的结构示意图;

图2为可以应用根据本发明实施例的容器组的部署方法的服务器的结构示意图;

图3为本公开实施例提供的容器组的部署方法的流程示意图;

图4为本公开实施例提供的容器组的部署装置的结构示意图;

图5为本公开实施例提供的服务器的结构示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人物已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

<硬件配置>

图2为可以应用根据本发明实施例的容器组的部署方法的服务器的结构示意图。

如图2所示,该服务器101可以是刀片服务器、机架式服务器等形式,也可以是部署在云端的服务器集群。在一些实施例中,每个服务器可以包括硬件,软件,或用于执行服务器所支持或实现的合适功能的内嵌逻辑组件或两个或多个此类组件的组合。

在一个例子中,服务器101也可以是一台计算机。该服务器101可以是物理机,也可以是虚拟机。

服务器101的具体配置可以包括但不限于:处理器1011、存储器1012、接口装置1013、通信装置1014、输入装置1015、输出装置1016。处理器1011可以包括但不限于中央处理器CPU、微处理器MCU等。存储器1012可以包括但不限于ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置1013可以包括但不限于USB接口、串行接口、并行接口等。通信装置1014例如能够进行有线通信或无线通信,具体地可以包括WiFi通信、蓝牙通信、2G/3G/4G/5G通信等。输入装置1015包括但不限于键盘、鼠标、触摸屏等。输出装置1016包括但不限于显示屏等。尽管服务器也可以包括扬声器、麦克风等等,但是,这些部件与本公开的实施例无关,故在此省略。

应用于本公开的实施例中,服务器101的存储器1012用于存储指令,该指令用于控制该处理器1011进行操作以执行本公开实施例提供的任意一项的容器组的部署方法。

图1所示的服务器仅仅是说明性的并且绝不意味着对本公开实施例、其应用或使用的任何限制。本领域技术人员应当理解,尽管前面描述了服务器的多个装置,但是,本公开实施例可以仅涉及其中的部分装置。

本领域技术人员可以根据本公开实施例所公开的方案设计指令。指令如何控制处理器进行操作,是本领域公知技术,故在此不再详细描述。

<方法>

本实施例提供了一种容器组的部署方法,该方法例如可以由图2所示的服务器101中运行的k8s调度器执行,具体的,该服务器101可以是k8s集群中的主节点,该k8s调度器运行在该主节点上。

如图3所示,该方法包括以下步骤2100~步骤2500:

步骤2100,接收容器组部署请求,该容器组部署请求中至少包括第一容器组所需的第一资源。

步骤2200,遍历节点列表中的节点,确定是否存在第一节点,所述第一节点的剩余可用资源满足所述第一资源。

本步骤中,k8s调度器可以遍历所述节点列表中的节点,将符合预选条件的节点确定为预选节点;并判断所述预选节点是否符合预设优选策略。若符合,将所述预选节点确定为所述第一节点;若不符合,确定所述节点列表中不存在剩余可用资源满足所述第一资源的第一节点。

其中,所述预选条件包括:节点处于可用状态,节点的当前磁盘输入输出压力小于预设压力阈值,节点的当前负载小于预设负载阈值,以及,节点的剩余可用资源大于等于所述第一资源。

所述预设优选策略包括:节点上资源的消耗最小,节点上各项资源使用率最均衡,节点倾向信息表明是否适合部署所述第一容器组,节点上第一容器组的容忍性与节点的污点列表项的匹配度;节点上亲和性条目的匹配项数量;与服务器上其他容器组尽量不在同一个节点上,选择消耗最大的节点,节点标签的得分,或者,节点所需镜像得分。

需要说明的是,预设优选策略是根据项目的具体需求预先确定的。例如,若项目的级别很高,则需要尽量保证这个项目可以正常运行,不出故障,此时,该预设优选策略可以是选择资源的消耗最小的节点,具体的,根据节点的空闲比率,即,cpu(总容量-sum(已使用)*10/总容量)对节点的资源消耗进行评估,这种节点的负载比较低,更能保证项目运行的稳定性。如果是边缘项目,该预设优选策略可以是选择资源消耗最大的节点。

可见,在本例中,若节点列表中存在可用于部署第一容器组的节点,则不需要进行碎片资源整理的操作,而是从符合预选条件的预选节点中选择符合预设优选策略的节点作为部署第一容器组的第一节点即可。若节点列表中不存在可用于部署第一容器组的节点时,才会触发资源碎片整理的操作。

需要说明的是,若符合预设优选策略的预选节点有多个,则该k8s调度器可以从这多个预选节点中随机选择一个,作为部署第一容器组的第一节点。

步骤2300,若所述节点列表中不存在所述第一节点,从所述节点列表中确定出第二节点和第三节点。

可以理解的是,在本实施例中,若所述节点列表中存在所述第一节点,则k8s调度器响应所述容器组部署请求,以将所述第一容器组部署在所述第一节点中即可。若所述节点列表中不存在所述第一节点,则k8s调度器执行本步骤2300。

本步骤中,k8s调度器从所述节点列表中确定出第二节点和第三节点具体可以包括:将所述节点列表中满足预设节点选择条件的节点确定为第一候选节点;在所述第一候选节点上存在满足预设移动条件的待移动容器组时,确定该第一候选节点为所述第二节点;以及,当所述节点列表中任一节点的剩余可用资源满足所述待移动容器组所需的资源时,将该节点确定为所述第三节点。

其中,k8s调度器可以通过确定所述第一候选节点上已部署的任一个容器组所占有的第二资源是否小于所述第一资源,来确定所述第一候选节点上是否存在满足预设移动条件的待移动容器组。例如,k8s调度器可以遍历所述第一候选节点上已部署的所有容器组,直至任一容器组所占有的第二资源小于所述第一资源为止。

具体的,若所述第二资源小于所述第一资源,则确定所述第二资源与所述第一候选节点的剩余可用资源之和是否大于或等于所述第一资源;若所述第二资源与所述第一候选节点的剩余可用资源之和大于或等于所述第一资源,则确定所述第一候选节点上存在满足预设移动条件的容器组。

其中,所述预设节点选择条件包括:所述节点的总资源大于或等于所述第一资源;以及,所述节点上已部署的容器组中,存在所需资源小于所述第一资源的容器组。

可选地,在将所述节点列表中满足预设节点选择条件的节点确定为第一候选节点之后,k8s调度器还可以为所述第一候选节点生成跳跃表,所述跳跃表中存储所述节点上已部署的所有容器组所需资源的信息。进一步地,k8s调度器还可以对所述跳跃表中的所述容器组按照所需资源从小到大进行排序。

需要说明的是,跳跃表是一种有序线性的数据结构,它以有序的方式在层次化的链表中保存元素。跳跃表的查找时间复杂度为O(logn),插入、删除的复杂度也为O(logn),空间复杂度为O(n),且最底层的链表中包含所有元素,因此,在本例中通过生成并使用跳跃表来提高查找的效率。

例如,若所述第一候选节点的跳跃表中的第一个容器组所需的资源大于或等于第一资源,显然,为了部署第一容器组而移动跳跃表中的第一个容器组只会造成更大的容器组部署的问题,因此,将该容器组与第一容器组进行替换是毫无意义的。由于跳跃表中对所述容器组按照所需资源从小到大进行了排序,因此,此时k8s调度器可以直接确定所述第一候选节点上不存在满足预设移动条件的待移动容器组。从而提高了查找的效率。

进一步地,当所述节点列表中不存在剩余可用资源满足所述第二资源的节点,则k8s调度器判断所述待移动容器组移动次数是否小于预设移动次数;若所述待移动容器组移动次数不小于所述预设移动次数,则生成新增节点通知消息,以通知运维人员增加用于部署所述第一容器组的新的节点。可选地,该k8s调度器可以通过向运维人员所指定的邮箱发送电子邮件,或者向指定的手机号码发送短信,或者向指定的通讯软件号码发送消息,以实现通知运维人员新增节点完成第一容器组的部署的目的。本实施例对于通知的方式不作具体限定。

步骤2400,将所述第二节点中的第二容器组迁移至所述第三节点中,以使所述第二节点的剩余可用资源满足所述第一资源。

步骤2500,将所述第一容器组部署至已完成所述第二容器组迁移操作的第二节点。

<例子>

本例提供的容器组的部署方法具体可以由图2所示的服务器101中运行的k8s调度器执行,具体的,该服务器101可以是k8s集群中的主节点,该k8s调度器运行在该主节点上。

本例该的方法可以包括:

k8s调度器接收容器组部署请求,该容器组部署请求中至少包括第一容器组所需的第一资源。

k8s调度器根据接收到的容器组部署请求,遍历节点列表中的节点,将符合预选条件的节点确定为预选节点。

具体的,k8s调度器检查节点列表中的节点是否处于可用状态。若处于不可用状态,排除该节点,k8s调度器继续检查节点列表中的下一个节点是否处于可用状态。

若处于可用状态,k8s调度器继续判断节点的当前磁盘输入输出压力是否小于预设压力阈值。若节点的当前磁盘输入输出压力不小于预设压力阈值,则排除该节点,k8s调度器继续检查节点列表中的下一个节点是否处于可用状态。

若节点的当前磁盘输入输出压力小于预设压力阈值,k8s调度器继续判断节点的当前负载是否小于预设负载阈值。若节点的当前负载不小于预设负载阈值,则排除该节点,k8s调度器继续检查节点列表中的下一个节点是否处于可用状态。

若节点的当前负载小于预设负载阈值,k8s调度器继续判断节点的剩余可用资源是否大于等于第一资源。若节点的剩余可用资源小于第一资源,则排除该节点,k8s调度器继续检查节点列表中的下一个节点是否处于可用状态。若节点的剩余可用资源大于等于第一资源,则k8s可以将该节点添加至预选节点列表。

k8s调度器遍历完节点列表后,判断预选节点列表是否为空。若预选节点列表不为空,则k8s调度器判断预选节点列表中的预选节点是否符合预设优选策略。

具体的,k8s调度器根据预设优选策略,对预选节点列表中的预选节点进行选择,以确定用于部署第一容器组的第一节点。

其中,预设优选策略可以包括如下9种:

1、least_requested,即,资源的消耗最小的节点,根据空闲比率评估:cpu(总容量-sum(已使用)*10/总容量)。

2、balanced_resource_allocation,即,各项资源使用率最均衡。具体的,k8s调度器可以获取到每个节点的资源使用率,用cpu和内存占用率的相近程度作为评估标准,二者占用越接近,得分就越高。

3、node_prefer_avoid_pods,即,节点倾向信息,表明该节点是否适合部署该第一容器组。

4、taint_toleration,即,第一容器组的容忍性(spec.toleration)与节点的污点(taints)列表项的匹配度;匹配的项数越多,节点的得分越低。

5、interpod_affinity,即,节点上亲和性条目的匹配项数量;匹配项越多的得分越高。

6、selector_spreading,即,与服务器上其他容器组尽量不在同一个节点上,节点上同一个服务器的容器组越少得分越高。

7、most_requested,即,选择消耗最大的节点,以尽量将一个节点上的资源用完。

8、node_label,即,节点标签的得分,存在标签即得分,没有标签不得分。标签越多的节点得分越高。

9、image_locality,即,所需镜像得分,根据已有镜像体积大小之和确定所需镜像得分,所需镜像越多得分越高。

需要说明的是,预设优选策略是根据项目的具体需求预先确定的。若符合预设优选策略的预选节点有多个,则该k8s调度器可以从这多个预选节点中随机选择一个,作为部署第一容器组的第一节点。

若该预选节点列表为空,则k8s调度器触发资源碎片整理,直至为第一容器组空出资源。

在整理碎片资源时,k8s调度器会遍历节点列表,从所述节点列表中确定出第二节点和第三节点。

具体的,k8s调度器为该节点列表中的每个节点生成对应的跳跃表(podinfoskiptable),该跳跃表中存储该节点上已部署的所有容器组所需资源的信息,且该跳跃表中的琐碎容器组按照所需资源从小到大进行排序。

需要说明的是,跳跃表是一种有序线性的数据结构,它以有序的方式在层次化的链表中保存元素。跳跃表的查找时间复杂度为O(logn),插入、删除的复杂度也为O(logn),空间复杂度为O(n),且最底层的链表中包含所有元素,因此,在本例中通过生成并使用跳跃表来提高查找的效率。

在生成跳跃表后,k8s调度器开始尝试尽可能少的移动pod来整合内存资源。即,遍历节点列表中的节点,将满足预设节点选择条件的节点确定为第一候选节点。其中,预设节点选择条件包括:所述节点的总资源大于或等于所述第一资源;以及,所述节点上已部署的容器组中,存在所需资源小于所述第一资源的容器组。

具体的,该k8s调度器将该节点列表中满足预设节点选择条件的节点确定为第一候选节点后,判断该候选节点的跳跃表中是否存在满足预设移动条件的待移动容器组,若存在,将该第一候选节点确定为第二节点;并且,当所述节点列表中任一节点的剩余可用资源满足所述待移动容器组所需的资源时,将该节点确定为所述第三节点。

其中,k8s调度器确定第一候选节点上存在满足预设移动条件的待移动容器组时,可以先确定第一候选节点上已部署的任一个容器组所占有的第二资源是否小于第一资源。例如,k8s的调度器遍历所述第一候选节点上已部署的所有容器组,直至任一容器组所占有的第二资源小于所述第一资源为止。

若第一候选节点上已部署的任一个容器组所占有的第二资源小于第一资源,则进一步确定第二资源与第一候选节点的剩余可用资源之和是否大于或等于第一资源;若是,则确定第一候选节点上存在满足预设移动条件的待移动容器组。

若不存在剩余可用资源满足所述第二资源的节点,判断所述待移动容器组移动次数是否小于预设移动次数;若所述待移动容器组移动次数不小于所述预设移动次数,则生成新增节点通知消息,以通知运维人员增加用于部署所述第一容器组的新的节点。

在一个具体的例子中,该k8s调度器可以通过定义问题的解空间树,通过回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树,遍历nodelist,以得到可行解。其中,该解空间树的根节点为问题“尽可能少的移动第二容器组(pod),即待移动容器组以部署第一容器组(newpod)”,每一个子集树的问题为“移动countofmovednode个pod以部署newpod”,其中,countofmovednode取值从1开始逐渐递增直到最大pod数。

需要说明的是,找到可行解的子集树所对应的问题中,countofmovednode的取值即为需要移动的第二容器组的数量。

具体的寻找可行解的过程如下:

k8s调度器根据深度优先算法,首先尝试寻找根结点下第一个子集树“移动一个pod以部署newpod”的可行解,此时,countofmovednode=1。

该子集树的第一层为节点列表,k8s调度器轮询节点列表中各节点上的容器组直至结束。

若当前节点(node)的总资源小于newpod所需的第一资源的大小,则跳过当前node。

若当前node的总资源大于或等于newpod所需的第一资源的大小,则尝试对当前node中现有的pod进行移动,以放下newpod。

首先k8s调度器尝试将newpod与当前node的podinfoskiptable中第一个pod进行替换操作。由于podinfoskiptable中的pod根据所需资源从小到大排列,所以这里首先考虑与第一个pod进行替换。

若该pod所需的第二资源大于或等于newpod所需的第一资源,则移动它来放下newpod后只会造成更大的问题,将它与newnode进行替换显然是无意义的,因此回溯到祖先节点,开始尝试与当前node中第一个pod的下一pod进行替换操作。

若该pod所需的第二资源小于newpod所需的第一资源,则考虑该pod所需的第二资源与当前node剩余可用资源之和是否满足newpod所需的第一资源。若不满足,则回溯到祖先节点,开始尝试与当前node中第一个pod的下一pod进行替换操作。

若满足,则将该pod移出当前容器,将newpod放入当前node,替换成功,pod移动次数加一。

此时,放置于容器中的原pod被新插入的pod替换了出来,成为了新的newpod。

k8s调度器判断节点列表中是否存在剩余可用资源大于或等于新的newpod所需的第二资源的节点,如果存在,说明找到该子集树的可行解,该解即为最优解,结束搜寻。

如果节点列表中不存在剩余可用资源大于或等于新的newpod所需的第二资源的节点,由于此时pod移动次数已等于countofmovednode,无法再进行移动来放下新的newpod,说明该子集树无可行解。则回溯至根结点,k8s调度器开始寻找第二个子集树"移动两个pod以部署新pod"的可行解,此时countofmovednode=2。

然后重复上述过程,直至找到可行解,或者直至遍历完解空间树的所有子集树为止。

若k8s调度器通过回溯整合资源找到子集树的可行解,则根据可行解移动pod至对应的节点,并启动newpod。若k8s调度器通过回溯整合资源未能找到解空间树的可行解,则通过邮件等方式向运维人员发送新增节点的通知消息,以通知运维人员增加新的节点以部署newpod。

以上已结合附图及例子对本实施例的容器组的部署方法进行了说明。该方法通过至少包括第一容器组所需的第一资源的容器组部署请求;遍历节点列表中的节点,确定是否存在第一节点,所述第一节点的剩余可用资源满足所述第一资源;若所述节点列表中不存在所述第一节点,从所述节点列表中确定出第二节点和第三节点;将所述第二节点中的第二容器组迁移至所述第三节点中,以使所述第二节点的剩余可用资源满足所述第一资源;以及,将所述第一容器组部署至已完成所述第二容器组迁移操作的第二节点。可以对已有节点上的资源碎片进行整理以部署新的容器组,避免由于存在资源碎片而导致的资源浪费。同时,在无法通过资源碎片整理部署新的容器组,即剩余可用资源确实不足的情况下,还可以主动通知运维人员增加新的节点以完成新的容器组的部署。

<装置>

本实施例提供一种容器组的部署装置,该装置例如是图4所示的容器组的部署装置4000,应用于服务器中。

如图4所示,该容器组的部署装置4000可以包括:接收模块4100,确定模块4200,迁移模块4300以及部署模块4400。

其中,接收模块4100,用于接收容器组部署请求,所述容器组部署请求中至少包括第一容器组所需的第一资源;

确定模块4200,用于遍历节点列表中的节点,确定是否存在第一节点,所述第一节点的剩余可用资源满足所述第一资源;若所述节点列表中不存在所述第一节点,从所述节点列表中确定出第二节点和第三节点;

迁移模块4300,用于将所述第二节点中的第二容器组迁移至所述第三节点中,以使所述第二节点的剩余可用资源满足所述第一资源;

部署模块4400,用于将所述第一容器组部署至已完成所述第二容器组迁移操作的第二节点。

可选地,其中,所述部署模块4400还可以用于若所述节点列表中存在所述第一节点,则响应所述容器组部署请求,以将所述第一容器组部署在所述第一节点中。

可选地,其中,所述确定模块4200具体可以用于将所述节点列表中满足预设节点选择条件的节点确定为第一候选节点;在所述第一候选节点上存在满足预设移动条件的待移动容器组时,确定该第一候选节点为所述第二节点;以及,当所述节点列表中任一节点的剩余可用资源满足所述待移动容器组所需的资源时,将该节点确定为所述第三节点。

可选地,其中,确定模块4200具体可以用于确定所述第一候选节点上已部署的任一个容器组所占有的第二资源是否小于所述第一资源;若所述第二资源小于所述第一资源,则确定所述第二资源与所述第一候选节点的剩余可用资源之和是否大于或等于所述第一资源;若所述第二资源与所述第一候选节点的剩余可用资源之和大于或等于所述第一资源,则确定所述第一候选节点上存在满足预设移动条件的容器组。

可选地,其中,所述确定模块4200具体可以用于遍历所述第一候选节点上已部署的所有容器组,直至任一容器组所占有的第二资源小于所述第一资源为止。

可选地,其中,所述确定模块4200还可以用于当所述节点列表中不存在剩余可用资源满足所述第二资源的节点,判断所述待移动容器组移动次数是否小于预设移动次数;若所述待移动容器组移动次数不小于所述预设移动次数,则生成新增节点通知消息,以通知运维人员增加用于部署所述第一容器组的新的节点。

其中,所述预设节点选择条件包括:所述节点的总资源大于或等于所述第一资源;以及,所述节点上已部署的容器组中,存在所需资源小于所述第一资源的容器组。

进一步地,容器组的部署装置4000还可以包括生成模块,用于为所述第一候选节点生成跳跃表,所述跳跃表中存储有所述节点上已部署的所有容器组所需资源的信息。其中,所述跳跃表中的所述容器组按照所需资源从小到大进行排序。

可选地,确定模块4200具体可以用于遍历所述节点列表中的节点,将符合预选条件的节点确定为预选节点;判断所述预选节点是否符合预设优选策略;若符合,将所述预选节点确定为所述第一节点;若不符合,确定所述节点列表中不存在剩余可用资源满足所述第一资源的第一节点。

其中,所述预选条件包括:节点处于可用状态,节点的当前磁盘输入输出压力小于预设压力阈值,节点的当前负载小于预设负载阈值,以及,节点的剩余可用资源大于等于所述第一资源。

其中,所述预设优选策略包括:节点上资源的消耗最小,节点上各项资源使用率最均衡,节点倾向信息表明是否适合部署所述第一容器组,节点上第一容器组的容忍性与节点的污点列表项的匹配度;节点上亲和性条目的匹配项数量;与服务器上其他容器组尽量不在同一个节点上,选择消耗最大的节点,节点标签的得分,或者,节点所需镜像得分。

本实施例的容器组的部署装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

<服务器>

本实施例中,还提供一种服务器,该服务器包括本发明装置实施例中描述的容器组的部署装置4000;或者,该服务器的为图5所示的服务器5000,包括:

存储器5100,用于存储可执行命令。

处理器5200,用于在存储器5100存储的可执行命令的控制下,执行本公开任意方法实施例中描述的方法。

<计算机可读存储介质实施例>

本实施例提供一种计算机可读存储介质,该存储介质中存储有可执行命令,该可执行命令被处理器执行时,执行本公开任意方法实施例中描述的方法。

本公开的实施例可以是装置、设备、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开实施例的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开的实施例操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,该编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开实施例的各个方面。

这里参照根据本公开实施例的方法和计算机程序产品的流程图和/或框图描述了本公开实施例的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的装置、设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,该模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

相关技术
  • 容器组的部署方法、装置及服务器
  • 一种容器组部署方法、装置、设备及存储介质
技术分类

06120112214443