一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种容器组的创建方法和装置与流程

2022-02-20 05:47:15 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种容器组的创建方法、装置、设备以及计算机可读存储介质。


背景技术:

2.应用开发完成后,通常需要将应用部署到生产环境,以供用户使用。为了提高可用性,保障用户体验,一般可以部署该应用的多个实例,以对应用请求进行负载均衡。基于此,业界提出了容器编排引擎,该容器编排引擎支持自动化部署、大规模可伸缩、应用容器化管理。以容器编排引擎为kubernetes为例,在kubernetes中可以创建多个容器,每个容器运行一个应用实例,然后通过内置的负载均衡策略,可以实现对这一组应用实例的管理、发现、访问,无需运维人员进行复杂的手工配置和处理。
3.kubernetes将集群中的节点划分为一个主节点(master)和至少一个工作节点(node)。其中,master用于控制和管理node,node用于运行应用,从而对外提供服务。具体地,master在node上创建容器组(pod),其中,pod包含至少一个容器,每个容器运行有相同应用的进程。
4.master具有原生的调度器kube-scheduler。kube-scheduler用于根据调度算法确定最优的node,然后在最优的node上创建pod,从而更加合理、充分地利用kubernetes集群的资源。其中,kube-scheduler有一个明显的特点是依次调度每个容器。在人工智能(artificial intelligence,ai)训练、大数据、高性能计算等需要多个容器同时配合执行的场景中,容器依次调度难以满足业务需求。
5.基于此,一些自定义的调度模块应运而生。这些自定义的调度模块支持同时创建多个pod,从而实现同时调度多个容器。但是,该调度模块创建的pod可用性不高,影响了服务质量。由此,业界亟需提供一种高可用的pod创建方法。


技术实现要素:

6.本技术提供了一种容器组(pod)的创建方法,该方法利用预留字段传递至少一个可用设备的标识,以供调度模块能够根据该标识指定具体的设备,并通过预留字段传递指定的设备的标识,然后工作节点代理根据该指定的设备创建pod,而不是随机选择设备创建pod,提高了pod的可用性,进而提高了服务质量。本技术还提供了上述方法对应的装置、设备、计算机可读存储介质以及计算机程序产品。
7.第一方面,本技术提供了一种pod的创建方法。该方法利用预留字段在工作节点代理和调度模块之间传递设备的标识,从而实现根据指定的设备创建pod,为pod提供充足的资源,提高了pod的可用性,进而提高了pod中运行的应用的服务质量。而且该方法无需修改调度设备和工作节点代理之间的接口、主节点的接口等,减少了侵入式修改。
8.具体地,利用针对工作节点(node)的第一预留字段向调度模块传递第一标识集合,该第一标识集合包括至少一个可用设备的标识。对应地,调度模块可以知晓可用设备的
明细,而不仅仅是可用设备的数量。调度模块能够根据可用设备的明细为pod分配具体的设备,调度模块分配的设备的标识(第二标识集合)能够通过第二预留字段被获取,并用于创建pod。
9.在一些可能的实现方式中,利用第一预留字段向调度模块传递第一标识集合,具体可以是在针对工作节点的第一预留字段中写入第一标识集合,该第一标识集合用于被调度模块从第一预留字段中读取,从而实现传递第一标识集合。由于无需修改接口,直接通过读写数据方式实现传递第一标识集合,减少了侵入式修改。
10.在一些可能的实现方式中,利用第二预留字段获取第二标识集合,具体可以是从针对pod的第二预留字段中读取第二标识集合,该第二标识集合由调度模块写入上述第二预留字段。由于无需修改接口,直接通过读写数据方式实现传递第一标识集合,减少了侵入式修改。
11.在一些可能的实现方式中,还可以向设备插件框架(device plugin)下发第二标识集合,然后接收device plugin发送的设备路径,该设备路径用于为工作节点挂载对应的设备,从而为保障为pod提供充足的资源,并且合理地利用集群中的资源,避免资源不足或资源浪费。
12.在一些可能的实现方式中,预留字段包括注解(annotation)或标签(lable)。基于此,第一预留字段可以是第一annotation,或者第一lable,第二预留字段可以是第二annotation,或者第二lable。无论label还是annotation均可以将元数据关联到资源对象,例如将标识集合关联到node。
13.考虑到annotation中数据的大小可以是不固定的,数据可以是结构化的,也可以是非结构化的,可以采用针对node的第一annotation传递第一标识集合。当第一标识集合中数据的大小固定,数据是结构化数据时,也可以采用针对node的第一lable传递第一标识集合。
14.在一些可能的实现方式中,pod被部署在kubernetes集群,上述方法具体可以由kubernetes集群中的工作节点代理例如kubelet执行。
15.第二方面,本技术提供了一种容器组的创建方法。具体地,根据针对node的第一预留字段获取第一标识集合,该第一标识集合包括至少一个可用设备的标识,然后根据第一标识集合为pod分配设备,获得第二标识集合,该第二标识集合包括分配设备的标识,然后利用第二预留字段向工作节点代理传递第二标识集合,该第二标识集合用于工作节点代理创建pod。
16.该方法利用预留字段在工作节点代理和调度模块之间传递设备的标识,从而实现根据指定的设备创建pod,为pod提供充足的资源,提高了pod的可用性,进而提高了pod中运行的应用的服务质量。而且该方法无需修改调度设备和工作节点代理之间的接口、主节点的接口等,减少了侵入式修改。
17.在一些可能的实现方式中,根据针对node的第一预留字段获取第一标识集合,具体可以为从针对node的第一预留字段中读取第一标识集合,该第一标识集合由工作节点代理写入第一预留字段。由于无需修改接口,直接通过读写数据方式实现传递第一标识集合,减少了侵入式修改。
18.在一些可能的实现方式中,利用第二预留字段向工作节点代理传递第二标识集
合,具体可以为在针对pod的第二预留字段中写入第二标识集合,该第二标识集合用于被工作节点代理从第二预留字段中读取。由于无需修改接口,直接通过读写数据方式实现传递第一标识集合,减少了侵入式修改。
19.在一些可能的实现方式中,预留字段包括annotation或lable。其中,lable适用于长度固定的结构化数据,annotation还可以适用于长度不固定的结构化数据、长度固定的非结构化数据和长度不固定的非结构化数据。也即,待传递的标识集合长度固定,且为结构化数据时,既可以将该标识集合写入lable,也可以写入annotation;待传递的标识集合长度不固定,或者是非结构化数据时,可以将该标识集合写入annotation。
20.在一些可能的实现方式中,pod可以被部署在kubernetes集群,上述方法可以由kubernetes集群的调度模块执行。
21.第三方面,本技术提供了一种pod创建装置。该pod创建装置包括:
22.通信模块,用于利用针对node的第一预留字段向调度模块传递第一标识集合,该第一标识集合包括至少一个可用设备的标识;
23.通信模块,还用于利用第二预留字段获取第二标识集合,该第二标识集合包括调度模块根据第一标识集合为pod分配的设备的标识;
24.创建模块,用于根据第二标识集合创建pod。
25.在一些可能的实现方式中,通信模块具体用于:
26.在针对node的第一预留字段中写入第一标识集合,该第一标识集合用于被调度模块从第一预留字段中读取。
27.在一些可能的实现方式中,通信模块具体用于:
28.从第二预留字段中读取第二标识集合,该第二标识集合由调度模块写入第二预留字段。
29.在一些可能的实现方式中,通信模块还用于:
30.向设备插件框架下发第二标识集合;
31.接收设备插件框架发送的设备路径,该设备路径用于为工作节点挂载对应的设备。
32.在一些可能的实现方式中,预留字段包括注解或标签。
33.在一些可能的实现方式中,pod被部署在kubernetes集群,pod创建装置为kubernetes集群中的工作节点代理。
34.第四方面,本技术提供了一种pod创建装置。该pod创建装置包括:
35.通信模块,用于根据针对node的第一预留字段获取第一标识集合,该第一标识集合包括至少一个可用设备的标识;
36.分配模块,用于根据第一标识集合为pod分配设备,获得第二标识集合,该第二标识集合包括分配设备的标识;
37.通信模块,还用于利用第二预留字段向工作节点代理传递第二标识集合,该第二标识集合用于工作节点代理创建pod。
38.在一些可能的实现方式中,通信模块具体用于:
39.从针对node的第一预留字段中读取第一标识集合,该第一标识集合由工作节点代理写入第一预留字段。
40.在一些可能的实现方式中,通信模块具体用于:
41.在第二预留字段中写入第二标识集合,该第二标识集合用于被工作节点代理从第二预留字段中读取。
42.在一些可能的实现方式中,预留字段包括注解或标签。
43.在一些可能的实现方式中,pod被部署在kubernetes集群,pod创建装置为kubernetes集群的调度模块。
44.第五方面,本技术提供一种计算设备,计算设备包括处理器和存储器。处理器、存储器进行相互的通信。处理器用于执行存储器中存储的指令,以使得计算设备执行如第一方面或第一方面的任一种实现方式中的pod创建方法。
45.第六方面,本技术提供一种计算设备,计算设备包括处理器和存储器。处理器、存储器进行相互的通信。处理器用于执行上述存储器中存储的指令,以使得计算设备执行如第一方面或第一方面的任一种实现方式中的pod创建方法。
46.第七方面,本技术提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,该指令指示设备执行上述第一方面或第二方面的任一种实现方式中的pod创建方法。
47.第八方面,本技术提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述第一方面或第二方面的任一种实现方式中的pod创建方法。
48.本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
49.为了更清楚地说明本技术实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
50.图1为本技术实施例提供的一种pod创建方法的系统架构图;
51.图2为本技术实施例提供的一种pod创建方法的应用场景图;
52.图3为本技术实施例提供的一种pod创建方法的交互流程图;
53.图4为本技术实施例提供的一种pod创建装置的结构示意图;
54.图5为本技术实施例提供的一种pod创建装置的结构示意图;
55.图6为本技术实施例提供的一种计算设备的结构示意图;
56.图7为本技术实施例提供的一种计算设备的结构示意图。
具体实施方式
57.本技术实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
58.首先对本技术实施例中所涉及到的一些技术术语进行介绍。
59.应用(application,app),是针对用户的某种特殊应用目的所撰写的计算机程序的集合,具体可以是单一的应用程序或者多个应用程序的集合形成的应用软件。例如,应用可以是产品、订单、用户等多个应用程序的集合形成的电商系统。又例如,应用可以是编辑器等应用程序。
60.应用在开发完成后,可以被部署到生产环境(production environment)中供客户使用。其中,生产环境是指客户实际使用应用的环境,应用被部署到生产环境的过程也可以称为应用上线的过程。应用被部署到生产环境后,可以正式地提供对外服务。
61.当应用被部署到物理机或者虚拟机时,操作系统的一些更新可能损坏该应用。例如,一个操作系统的更新导致对应用的若干依赖的更新,一些不兼容的更新甚至可以导致应用运行异常。另外,如果两个或两个以上的应用共享相同的操作系统和一些相同的库文件(library,lib),则其中一个或一些应用的库文件的更新可以影响其他应用。
62.基于此,应用还可以被部署到容器(container)中。一个容器包含了完整的运行时环境。运行时环境是指除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等。这些文件统一被打包至一个称为容器镜像的包中,从而形成容器。
63.由于容器封装了运行应用所必需的相关文件,如依赖以及操作系统,因而部署在容器中的应用不会受到操作系统变更或者依赖变更的影响,保障了应用能够无中断地运行。并且,由于无需考虑操作系统差异,将容器化应用由一个环境移植到另一个环境更加灵活。
64.在一些实现方式中,应用可以被部署到一个或多个容器形成的容器组(pod)中。pod是一组容器(包括至少一个容器)的集合,在pod里面的容器可以共享网络和/或存储。考虑到pod中的容器应用具有共生性,即同时启动,同时终止,因此,一个pod中的多个容器通常部署相同应用。当应用包括多个不同的应用程序时,可以为多个应用程序分别创建pod,每个pod用于部署多个应用程序中的一个。
65.当容器数量达到一定规模时,通常可以使用容器编排工具(例如容器编排引擎)对容器进行编排,以实现自动化部署、大规模可伸缩、应用容器化管理。所谓容器编排是指对部署应用的多个容器之间的交互方式进行排布,使得容器基于设定的交互方式进行交互,以保障应用正常运行。
66.其中,容器编排工具包括多种,例如docker swarm、docker compose、kubernetes或者apache mesos等等。为了便于描述,后文以容器编排工具为kubernetes进行示例说明。本技术实施例提供的pod创建方法包括但不限于应用于kubernetes。
67.kubernetes将集群中的节点划分为一个主节点(master)和至少一个工作节点(node)。
68.其中,master上运行有与集群管理相关的一组进程,例如接口服务器(kube-apiserver)、kube控制器管理器(kube-controller-manager)和调度器(kube-scheduler)等进程。master通过这些进程可以实现对整个集群的资源管理、pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力。
69.node上运行应用的进程,从而对外提供服务。其中,应用的进程具体是在pod的容器中运行的。node上还运行有服务进程,例如代理(kubelet)、网络代理(kube-proxy)等进程,node通过这些服务进程实现pod的创建、启动、监控、重启、销毁以及负载均衡。
70.kubernetes原生支持的硬件设备时有限的,例如,kubernetes原生支持中央处理器(central processing unit,cpu),但是不支持图形处理器(graphical processing unit,gpu)、现场可编程门阵列(field programmable gate array,fpga)、高性能网络接口控制器(network interface controller,nic)以及无线带宽(infiniband,ib)设备。
plugin。
80.具体地,device plugin通过list and watch接口将第一标识集合上报至kubelet,其中,第一标识集合包括至少一个可用设备的标识。kubelet将该第一标识集合写入第一预留字段,对应地,调度模块可以从第一预留字段中读取第一标识集合。调度模块利用调度算法从第一标识集合标识的可用设备中为pod分配设备,得到第二标识集合,该第二标识集合包括调度模块根据第一标识集合为pod分配的设备的标识。然后,调度模块将第二标识集合写入第二预留字段。kubelet从第二预留字段中读取第二标识集合,将第二标识集合下发至device plugin。device plugin接收到上述第二标识集合,将第二标识集合所标识设备的路径返回至kubelet。如此,kubelet可以创建pod,并根据设备的路径挂载设备至上述pod。
81.如图2所示,master和node可以是云环境中的物理机或虚拟机。云环境具体为包括至少一个云计算设备(例如中心服务器)的计算集群。在一些实现方式中,master和node也可以是边缘环境中的物理机或者虚拟机。边缘环境具体为包括至少一个边缘计算设备(例如边缘服务器)的计算集群。在另一些实现方式中,master和node还可以是端设备或者是端设备上的虚拟机。需要说明的是,master和node可以是相同环境中的物理机或虚拟机,也可以是不同环境中的物理机或虚拟机,例如master可以是云环境中的物理机,node可以是边缘环境中的物理机。
82.调度模块以计算机程序的形式存储于master中,kubelet、device plugin以计算机程序的形式存储于node中。上述计算机程序被执行时产生相应的进程,这些进程通过交互实现本技术实施例的pod创建方法。
83.图1是以kubernetes集群包括一个master和一个node进行示例说明。在一些实现方式中,kubernetes集群可以包括多个node,如此,可以将应用分布式地部署在多个node。进一步地,kubernetes集群中也可以包括多个master,当一个master故障时,可以启用另一个master,如此可以保证高可用性。
84.接下来,将从调度模块和kubelet、device plugin等交互的角度对本技术实施例提供的pod创建方法进行详细介绍。
85.参见图3所示的pod创建方法的流程图,该方法包括:
86.s302:device plugin向kubelet上报第一标识集合。
87.第一标识集合包括至少一个可用设备的标识。其中,可用设备是指健康状态为健康的设备。设备的标识能够唯一标识设备的身份,基于此,设备的标识可以是设备编号、设备地址或者根据设备编号、设备地址等确定的字符序列。其中,设备编号、设备地址或者根据该设备编号、设备地址确定的字符序列具有唯一性。
88.第一标识集合中数据组织的形式可以是列表,也可以是文本,例如javascript对象简谱(javascript object notation,json)文本,或者是其他数据类型。为了便于描述,下面以第一标识集合中数据组织的形式为列表进行示例说明。如表1所示,第一标识集合可以为:
89.表1第一标识集合
[0090][0091][0092]
其中,表1中可用设备的标识为可用设备的编号。
[0093]
进一步地,第一标识集合也可以包括所有设备的标识,具体包括可用设备的标识和不可用设备的标识。对应地,针对每个设备,第一标识集合还记录有设备的健康状态,以便于从第一标识集合中区分可用设备的标识和不可用设备的标识。为了便于描述,下面以第一标识集合中数据组织的形式为列表进行示例说明。如表2所示,第一标识集合可以为:
[0094]
表2第一标识集合
[0095]
100210532xxxxx0301健康
…………
100210712xxxxx2408不健康
[0096]
其中,表2中设备的标识为设备的编号,设备的健康状态用于表征设备是否可用。其中,表征设备是否可用可以通过多种方式实现,例如可以分别用0和1表示设备不可用(设备健康状态为不健康)、设备可用(设备健康状态为健康)。
[0097]
当第一标识集合采用列表的形式组织数据时,device plugin可以采用list and watch接口向kubelet上报第一标识集合。当然,第一标识集合采用其他形式组织数据时,device也可以采用其他方式上报第一标识集合。
[0098]
应理解,执行本技术实施例的pod创建方法也可以不执行s302。例如,kubernetes中的扩展设备均为kubernetes原生支持的设备时,无需device plugin上报上述第一标识集合。
[0099]
s304:kubelet利用第一预留字段向调度模块传递第一标识集合。
[0100]
第一预留字段是针对node的预留字段。其中,node实质是kubernetes集群的一种资源对象。kubernetes集群提供有至少一个属性字段用于描述node这一资源对象。基于此,针对node的第一预留字段可以是node的预留属性字段。node的预留属性字段可以用于描述node的一种属性或多种属性。
[0101]
在一些实现方式中,该预留字段可以是标签(label)或者注解(annotation)等字段。其中,label和annotation均可以将元数据关联到kubernetes资源对象,例如将标识集合关联到node。
[0102]
考虑到annotation中数据的大小可以是不固定的,数据可以是结构化的,也可以是非结构化的,因此,kubelet可以采用针对node的第一annotation向调度模块传递上述第一标识集合。为了便于描述,后文均以第一预留字段为第一annotation进行示例说明,在本技术实施例其他可能的实现方式中,kubelet也可以采用其他第一预留字段,如第一label传递第一标识集合。
[0103]
具体地,kubelet可以将第一标识集合写入第一annotation。其中,kubelet可以采用键值对(key value)的结构写入上述第一标识集合至第一annotation。对应地,调度模块可以从第一annotation中读取上述第一标识集合,从而实现在kubelet和调度模块之间传
递第一标识集合。
[0104]
其中,调度模块在读取第一标识集合时,可以通过kube-apiserver进行读取。具体地,调度模块可以向kube-apiserver发送读请求,该读请求具体用于从第一annotation读取第一标识集合。kube-apiserver接收到上述读请求,利用对应的api(通常是经过封装的函数)读取第一标识集合。
[0105]
为了便于理解,下面还提供了一具体示例对写入第一标识集合的过程进行说明。
[0106]
在该示例中,kubelet在kubelet/cm/devicemanager/manager.go中,通过如下函数写入第一标识集合:
[0107]
func(m*managerimpl)writenodeannotation()
[0108]
{
[0109]
1、读取kubelet中缓存第一标识集合。
[0110]
2、获取kubelet对应node对象。
[0111]
3、在node对象的annotation字段中写入第一标识集合。
[0112]
}
[0113]
其中,nodeannotation表征针对node的第一annotation。
[0114]
调度模块读取第一标识集合的过程可以通过kube-apiserver中相应的函数实现,在此不再赘述。
[0115]
在一些可能的实现方式中,kubelet也可以通过报文方式向调度模块传递第一标识集合。具体地,kubelet可以在报文中携带上述第一预留字段,然后向调度模块发送报文,从而实现向调度模块传递第一标识集合。其中,携带上述第一预留字段的报文也可称为第一报文。
[0116]
s306:调度模块根据第一标识集合为pod分配设备,获得第二标识集合。
[0117]
调度模块可以根据至少一个node的第一标识集合确定至少一个node的资源状况,根据该资源状况确定将pod分配至目标node。具体地,调度模块可以从可分配资源大于需求资源的node中确定目标node,将pod分配至上述目标node。其中,资源可以是计算资源、网络资源、存储资源等资源中的一种或多种。
[0118]
接着调度模块可以利用调度算法从目标node的可分配资源中为pod分配资源,该资资源为node关联的设备的资源,由此实现为pod分配设备。调度模块根据分配的设备的标识获得第二标识集合。该第二标识集合包括调度模块根据第一标识集合为pod分配的设备的标识。
[0119]
与第一标识集合类似,第二标识集合中的标识可以是设备编号、设备地址或者根据设备编号、设备地址确定的字符序列等等。第二标识集合中的数据可以采用列表、文本(如json文本)或者其他类型进行组织。
[0120]
s308:调度模块利用第二预留字段向kubelet传递第二标识集合。
[0121]
第二预留字段是针对pod的预留字段。其中,pod也是kubernetes集群的一种资源对象。kubernetes集群提供有至少一个属性字段用于描述pod这一资源对象。基于此,针对pod的第二预留字段可以是pod的预留属性字段。pod的预留属性字段可以用于描述pod的一种属性或多种属性。
[0122]
在一些可能的实现方式中,预留字段可以是lable或者annotation等字段。label
和annotation均可以将pod和第二标识集合关联。为了便于描述,本技术以第二预留字段为第二annotation进行示例说明。
[0123]
具体地,调度模块可以将第二标识集合写入针对pod的第二annotation,对应地,kubelet从针对pod的第二annotation中读取上述第二标识集合,如此实现了在调度模块和kubelet之间传递第二标识集合。其中,调度模块写入第二标识集合至第二annotation时,可以采用key value形式写入。
[0124]
其中,调度模块在写入第二标识集合时,也可以通过kube-apiserver进行写入。具体地,调度模块可以向kube-apiserver发送写请求,该写请求具体用于向第二annotation写入第二标识集合。kube-apiserver接收到上述写请求,利用对应的api(通常是经过封装的函数)写入第二标识集合。
[0125]
下面还提供了一具体示例对写入第二标识集合的过程进行说明。
[0126]
在该示例中,kubelet在kubelet/cm/devicemanager/manager.go中,通过如下函数读取第二标识集合:
[0127]
func(m*managerimpl)readpodannotation(podid)
[0128]
{
[0129]
1、通过podid获取pod信息。
[0130]
2、读取pod annotaion字段中第二标识集合。
[0131]
}
[0132]
其中,podannotation表征针对pod的第二annotation。
[0133]
调度模块写入第二标识集合的过程具体通过kube-apiserver中的相应函数实现,在此不再赘述。
[0134]
在一些可能的实现方式中,调度模块也可以通过报文方式向kubelet传递第二标识集合。具体地,调度模块可以在报文中携带上述第二预留字段,然后向kubelet发送报文,从而实现向kubelet传递第二标识集合。其中,携带上述第二预留字段的报文也可称为第二报文。
[0135]
第一报文和第二报文可以是不同的报文。第一报文用于通过第一预留字段传递第一标识集合,第二报文用于通过第二预留字段传递第二标识集合。
[0136]
在一些可能的实现方式中,第一报文和第二报文也可以是同一报文。具体地,该第一报文携带第一预留字段和第二预留字段。其中,kubelet发送第一报文时,第二预留字段可以为空值或者默认值等等,调度模块接收到该第一报文,在第一报文中的第二预留字段填入第二标识集合,然后向kubelet返回处理后的报文。
[0137]
s310:kubelet根据第二标识集合创建pod。
[0138]
具体地,kubelet可以创建pod,将第二标识集合标识的设备挂载至上述pod。其中,kubelet挂载设备时,可以先向device plugin发送第二标识集合,device接收到该第二标识集合,可以获取第二标识集合所标识设备的路径,然后向kubelet返回上述路径。kubelet可以根据该路径挂载设备。如此,实现了调度模块创建pod时指定设备,提高pod可用性。
[0139]
在一些实现方式中,kubelet可以在接收到创建pod的命令时,根据第二标识集合创建pod。其中,创建pod的命令中携带有pod的标识podid和需求的设备的数量。创建pod的命令具体是调度模块生成,并通过kubeapiserver下发至kubelet。如此,kubelet根据该命
令以及第二标识集合创建标识为podid的pod。
[0140]
基于上述内容描述,本技术实施例提供了一种pod创建方法。在该方法中,kubelet利用针对node的第一预留字段向调度模块传递第一标识集合,调度模块根据该第二标识集合为pod分配设备,获得第二标识集合,然后调度模块利用针对pod的第二预留字段向kubelet传递第二标识集合,如此,kubelet根据第二标识集合所标识的设备创建pod。一方面实现了调度模块能够指定设备用于创建pod,保障pod的高可用性,另一方面无需修改kubelet和master之间的接口、master api接口,减少了对kubernetes的侵入式修改,减少了部署应用的工作量,降低了部署成本,提高了部署效率。
[0141]
图3所示实施例是以kubernetes场景为例进行示例说明。在其他可能的实现方式中,工作节点代理可以是除了kubelet之外的其他代理。工作节点代理和调度模块可以通过annotation等预留字段传递第一标识集合和第二标识集合,从而实现根据指定设备创建pod,保障pod的高可用性,而且无需修改node和master之间接口,以及master的api接口,减少了侵入性修改。
[0142]
上文结合图1至图3对本技术实施例提供的pod创建方法进行了详细介绍,下面将结合附图对本技术实施例提供的装置、设备进行介绍。
[0143]
参见图4所示的pod创建装置的结构示意图,该装置400包括:
[0144]
通信模块402,用于利用第一预留字段向调度模块传递第一标识集合,该第一标识集合包括至少一个可用设备的标识;
[0145]
通信模块402,还用于利用第二预留字段获取第二标识集合,第二标识集合包括调度模块根据第一标识集合为pod分配的设备的标识;
[0146]
创建模块404,用于根据第二标识集合创建pod。
[0147]
在一些可能的实现方式中,通信模块402具体用于:
[0148]
在第一预留字段中写入第一标识集合,该第一标识集合用于被调度模块从第一预留字段中读取。
[0149]
在一些可能的实现方式中,通信模块402具体用于:
[0150]
从第二预留字段中读取第二标识集合,该第二标识集合由调度模块写入第二预留字段。
[0151]
在一些可能的实现方式中,通信模块402还用于:
[0152]
向设备插件框架下发第二标识集合;
[0153]
接收设备插件框架发送的设备路径,该设备路径用于为工作节点挂载对应的设备。
[0154]
在一些可能的实现方式中,预留字段包括注解或标签。
[0155]
在一些可能的实现方式中,pod被部署在kubernetes集群,pod创建装置400为kubernetes集群中的工作节点代理,例如kubelet。
[0156]
根据本技术实施例的pod创建装置400可对应于执行本技术实施例中描述的方法,并且pod创建装置400的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
[0157]
参见图5所示的pod创建装置的结构示意图,该装置500包括:
[0158]
通信模块502,用于根据第一预留字段获取第一标识集合,该第一标识集合包括至
少一个可用设备的标识;
[0159]
分配模块504,用于根据第一标识集合为pod分配设备,获得第二标识集合,该第二标识集合包括分配设备的标识;
[0160]
通信模块502,还用于利用第二预留字段向工作节点代理传递第二标识集合,该第二标识集合用于工作节点代理创建pod。
[0161]
在一些可能的实现方式中,通信模块502具体用于:
[0162]
从第一预留字段中读取第一标识集合,该第一标识集合由工作节点代理写入第一预留字段。
[0163]
在一些可能的实现方式中,通信模块502具体用于:
[0164]
在第二预留字段中写入第二标识集合,该第二标识集合用于被工作节点代理从第二预留字段中读取。
[0165]
在一些可能的实现方式中,预留字段包括注解或标签。
[0166]
在一些可能的实现方式中,pod被部署在kubernetes集群,pod创建装置500为kubernetes集群的调度模块。
[0167]
根据本技术实施例的pod创建装置500可对应于执行本技术实施例中描述的方法,并且pod创建装置500的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
[0168]
本技术实施例还提供了一种计算设备600。该计算设备600可以是笔记本电脑、台式机等端侧设备,也可以是云环境或边缘环境中的计算机集群。该计算设备600具体用于实现如图4所示实施例中pod创建装置400的功能。
[0169]
图6提供了一种计算设备600的结构示意图,如图6所示,设备600包括总线601、处理器602、通信接口603和存储器604。处理器602、存储器604和通信接口603之间通过总线601通信。
[0170]
总线601可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0171]
处理器602可以为中央处理器(central processing unit,cpu)。存储器604可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,ram)。存储器604还可以包括非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,rom),快闪存储器,硬盘驱动器(hard disk drive,hdd)或固态驱动器(solid state drive,ssd)。
[0172]
通信接口603用于与外部通信。例如,利用针对node的第一预留字段向调度模块传递第一标识集合,利用针对pod的第二预留字段获取第二标识集合,向设备插件框架下发第二标识集合等等。
[0173]
存储器604中存储有可执行代码,处理器602执行该可执行代码以执行前述pod创建方法。
[0174]
具体地,在实现图4所示实施例的情况下,且图4实施例中所描述的pod创建装置400的各模块为通过软件实现的情况下,执行图4中的创建模块404功能所需的软件或程序
代码存储在存储器604中。通信模块功能通过通信接口603实现。通信接口603利用针对node的第一预留字段向调度模块传递第一标识集合,然后利用针对pod的第二预留字段获取第二标识集合,将第二标识集合通过总线601传输至处理器602,处理器602执行存储器604中存储的各模块对应的程序代码,如创建模块404对应的程序代码,以执行根据第二标识集合创建pod。
[0175]
在一些可能的实现方式中,通信接口603利用针对node的第一预留字段向调度模块传递第一标识集合,具体可以是在针对node的第一预留字段中写入第一标识集合,该第一标识集合用于被调度模块从第一预留字段中读取。
[0176]
在一些可能的实现方式中,通信接口603利用针对pod的第二预留字段获取第二标识集合,具体可以是从针对pod的第二预留字段中读取第二标识集合,第二标识集合由调度模块写入第二预留字段。
[0177]
在一些可能的实现方式中,通信接口603还用于:
[0178]
向设备插件框架下发第二标识集合;
[0179]
接收设备插件框架发送的设备路径,设备路径用于为工作节点挂载对应的设备。
[0180]
对应地,处理器604根据第二标识集合创建pod时,可以先创建pod,然后根据设备插件框架发送的设备路径挂载相应的设备。
[0181]
本技术实施例还提供了另一种计算设备700。该计算设备700可以是笔记本电脑、台式机等端侧设备,也可以是云环境或边缘环境中的计算机集群。该计算设备700具体用于实现如图5所示实施例中pod创建装置500的功能。
[0182]
图7提供了一种计算设备700的结构示意图,如图7所示,设备700包括总线701、处理器702、通信接口703和存储器704。处理器702、存储器704和通信接口703之间通过总线701通信。其中,总线701、处理器702、通信接口703、存储器704的功能和具体实现参见图6所示实施例相关内容描述,在此不再赘述。
[0183]
具体地,在实现图5所示实施例的情况下,且图5实施例中所描述的pod创建装置500的各模块为通过软件实现的情况下,执行图5中的分配模块504功能所需的软件或程序代码存储在存储器704中。通信模块502功能通过通信接口703实现。通信接口703根据针对node的第一预留字段获取第一标识集合,接着将第一标识集合通过总线701传输至处理器702,处理器702执行存储器704中存储的各模块对应的程序代码,如分配模块504对应的程序代码,以执行根据第一标识集合为pod分配设备,获得第二标识集合的步骤。通信接口703再利用针对pod的第二预留字段向工作节点代理传递第二标识集合,其中,第二标识集合用于工作节点代理创建pod。
[0184]
在一些可能的实现方式中,通信接口703在根据针对node的第一预留字段获取第一标识集合时,具体可以从针对node的第一预留字段中读取第一标识集合,该第一标识集合由工作节点代理写入第一预留字段。
[0185]
在一些可能的实现方式中,通信接口703在利用针对pod的第二预留字段向工作节点代理传递第二标识集合,具体可以是在针对pod的第二预留字段中写入第二标识集合,该第二标识集合用于被工作节点代理从上述第二预留字段中读取。
[0186]
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本技术可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专
用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本技术而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、rom、ram、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,训练设备,或者网络设备等)执行本技术各个实施例所述的方法。
[0187]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
[0188]
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solid state disk,ssd))等。
[0189]
以上所述,仅为本技术的具体实施方式。熟悉本技术领域的技术人员根据本技术提供的具体实施方式,可想到变化或替换,都应涵盖在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献