具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
申请人经过研究发现,随着多架构集群的出现,工作负载的调度也面临着新的挑战,因为工作负载有可能会被调度至架构并不适配的节点。以Kubernetes集群为例,Kubernetes调度器在调度工作负载时并不会考虑它的容器镜像所支持的架构和节点的架构是否兼容,这也导致了以下问题:1、针对将工作负载从单架构迁移到多架构场景,比如从原来的x86集群将工作负载迁移到多架构集群,工作负载在被调度时有可能被调度至非x86节点,这将导致工作负载的镜像容器可能无法运行。若给工作负载使用的所有容器镜像重新编译以支持新的架构,存在运维工作量大,操作繁琐易错,业务容易被中断等问题。2、针对单架构环境扩容其它架构节点场景,比如集群管理员向x86集群扩容arm架构节点时,因为原有的工作负载使用的容器镜像还不支持arm架构,若给新的arm架构节点添加污点,确保正在部署中的工作负载能够正常继续部署而不被调度至arm架构节点,运维难度会大大增加,业务也有可能因为不当的操作而异常。有鉴于此,本公开实施例提供了一种工作负载的调度方法、装置、介质及电子设备。下面,首先结合图1-图3对本公开实施例提供的工作负载的调度方法进行详细说明。
图1是本公开实施例提供的一种工作负载的调度方法的流程图,该方法可以由一种包括从调度器和主调度器的电子设备来执行,具体地,该方法可以由电子设备中的从调度器来执行。该电子设备可以示例性的理解为诸如集群、手机、平板电脑、笔记本电脑、台式机、智能电视、服务器等设备。如图1所示,本实施例提供的方法包括如下步骤:
S110、在目标工作负载的创建过程中,在检测到目标工作负载满足预设条件的情况下,为目标工作负载添加调度门。
在本公开实施例中,电子设备包括从调度器和主调度器,例如, 在Kubernetes集群中,kube-scheduler即为主调度器,Kubernetes集群中需要新增一个从调度器(后文中称之为multiarch-scheduler)。从调度器能够拦截目标工作负载的创建请求,以便在目标工作负载的创建过程中,并在检测到目标工作负载满足预设条件的情况下,为目标工作负载添加调度门,以使主调度器在监测到目标工作负载上存在调度门的情况下,暂停对目标工作负载进行调度。主调度器在监听到创建完成的目标工作负载后,能够检测目标工作负载中是否存在调度门,并在检测到目标工作负载中存在调度门的情况下,暂停对目标工作负载进行调度,当然,主调度器还可以将目标工作负载标记为不可调度,以使用户获知目标工作负载当前处于暂停调度的状态。
具体地,目标工作负载可以为用户部署的任意工作负载,其中,工作负载为运行的应用程序。
具体地,调度门为用于表征工作负载暂停调度的标志。例如,在Kubernetes集群中scheduling gate即为调度门。
在一些实施例中,预设条件为空,即在目标工作负载的创建过程中,无条件为目标工作负载添加调度门。如此,用户部署的每个工作负载均可被添加调度门。
在另一些实施例中,预设条件包括目标工作负载的命名空间属于目标命名空间和/或目标工作负载的预设标签的标签内容属于目标标签内容。
可选地,该方法还可以包括:在目标工作负载的创建过程中,在检测到目标工作负载不满足预设条件的情况下,不为目标工作负载添加调度门,以使主调度器在监测到目标工作负载上不存在调度门的情况下,对目标工作负载进行调度。
可选地,在S110之前还包括:响应于用户对预设条件的配置操作,确定配置操作所配置的预设条件。
具体地,目标命名空间的具体内容、预设标签的具体标签类型、目标标签内容的具体内容,本领域技术人员可根据实际情况设置,此处不作限定。例如,在Kubernetes集群中,对于某些Pod(如特定节点的agent)不需要被拦截添加调度门,从调度器可以通过命名空间选择器和标签选择器过滤掉这些Pod,不对其添加调度门。
可以理解的是,通过设置在检测到目标工作负载满足预设条件的情况下,为目标工作负载添加调度门,有利于用户灵活设置预设条件,进而使得从调度器能够灵活地对满足预设条件的目标工作负载添加调度门,而对不满足预设条件的目标工作负载不添加调度门以使其尽快被主调度器调度。
S120、在监测到目标工作负载上存在调度门的情况下,针对目标工作负载中的每个容器镜像,检查容器镜像所支持的架构类型。
在本公开实施例中,从调度器在监听到创建完成的目标工作负载后,能够检测目标工作负载中是否存在调度门,并在检测到目标工作负载中存在调度门的情况下,针对目标工作负载中的每个容器镜像,检查容器镜像所支持的架构类型。
具体地,“检查容器镜像所支持的架构类型”的具体实施方式有多种,下面就典型示例进行说明,但并不构成对本公开实施例的限定。
在一些实施例中,检查容器镜像所支持的架构类型,包括:
S121、获取历史检查结果,其中,历史检查结果中包括历史检查过的历史容器镜像以及历史容器镜像所支持的架构类型。
具体地,历史容器镜像即历史被检查过所支持的架构类型的容器镜像。
具体地,历史容器镜像以及其所支持的架构类型的具体存储方式本邻域技术人员可根据实际情况设置,此处不作限定,例如,可通过键值对的方式进行存储。
具体地,历史检查结果可以通过下载、读取存储器等方式获取,此处不作限定。
S122、在历史检查结果中检索与容器镜像相同的历史容器镜像。
在一个示例中,S122可以包括:将容器镜像与历史检查结果中的历史容器镜像逐一进行比较,直至检索到与容器镜像相同的历史容器镜像、或者与历史检查结果中的每个历史容器镜像均比较完成。
在另一个示例中,S122可以包括:在历史检查结果中检索与容器镜像相同的历史容器镜像,包括:
在历史检查结果中检索与容器镜像的镜像注册表相同的历史容器镜像,得到第一检索结果;
在第一检索结果不为空的情况下,在第一检索结果中检索与容器镜像的镜像仓库相同的历史容器镜像,得到第二检索结果;
在第二检索结果不为空的情况下,在第二检索结果中检索与容器镜像的镜像标签相同的历史容器镜像,得到第三检索结果;
在第三检索结果不为空的情况下,获取第三检索结果中的历史容器镜像所支持的架构类型,并将其作为容器镜像所支持的架构类型;
在第一检索结果、第二检索结果、或第三检索结果为空的情况下,确定未检索到与容器镜像相同的历史容器镜像。
具体地,一个容器镜像可以划分为三部分,分别是镜像注册表、镜像仓库、以及镜像标签。例如,在Kubernetes集群中,镜像注册表、镜像仓库、以及镜像标签分别为Registry、Repository和Tag。
在存储历史检查结果时,历史容器镜像的镜像注册表可以存储在第一级缓存,镜像仓库可以存储在第二级缓存,镜像标签可以存储在第三级缓存。
具体地,第一检索结果不为空指的是其中包括至少一个历史容器镜像,第一检索结果为空指的是其中不存在历史容器镜像。对于第二检索结果、第三检索结果,此处以及后文不再赘述。
具体地,第一检索结果中的历史容器镜像的镜像注册表与容器镜像的镜像注册表相同。第二检索结果中的历史容器镜像的镜像注册表、镜像仓库与容器镜像的镜像注册表、镜像仓库均相同。第三检索结果中的历史容器镜像的镜像注册表、镜像仓库、镜像标签与容器镜像的镜像注册表、镜像仓库、镜像标签均相同,即二者完全相同。
可以理解是,在三级缓存中检索容器镜像,可减少在历史检查结果中检索容器镜像的工作量,提高检索效率。
S123、在检索到与容器镜像相同的历史容器镜像的情况下,获取与容器镜像相同的历史容器镜像所支持的架构类型,并将其作为容器镜像所支持的架构类型。
具体地,当在历史检查结果中检索到与容器镜像相同的历史容器镜像,说明该容器镜像之前被检查过所支持的架构类型,因此在历史检查结果中可以查找到该容器镜像以及其支持的架构类型。
可选地,检查容器镜像所支持的架构类型,还包括:S124、在未检索到与容器镜像相同的历史容器镜像的情况下,基于容器镜像的访问密钥构建远程镜像仓库访问凭证;基于远程镜像仓库访问凭证进入远程镜像仓库,并在远程镜像仓库中检索容器镜像所支持的架构类型。
具体地,访问密钥为用于生成远程镜像仓库访问凭证的信息。在Kubernetes集群中,ImagePullSecret即为访问密钥。
具体地,远程镜像仓库访问凭证为访问远程镜像仓库的凭据。
在一个示例中,在远程镜像仓库中检索容器镜像所支持的架构类型,包括:将容器镜像与远程镜像仓库中的待检容器镜像逐一进行比较,直至检索到与容器镜像相同的待检容器镜像。
具体地,远程镜像仓库中的每个容器镜像均为待检容器镜像。
可选地,在远程镜像仓库中检索到容器镜像所支持的架构类型后,将容器镜像以及其所支持的架构类型保存在历史检查结果中。
具体地,将容器镜像划分为镜像注册表、镜像仓库、以及镜像标签三部分,以便以三级缓存的方式存储。
可以理解的是,将容器镜像以及其所支持的架构类型保存在历史检查结果中,可使后续其它工作负载中包括该容器镜像时能够快速从检索结果中检索到该容器镜像支持的架构类型。
当然,也可以不在检索结果中检索与目标工作负载中的容器镜像相同的历史容器镜像,而是直接在远程镜像仓库中检索与目标工作负载中的容器镜像相同的待查容器镜像,本公开实施例对此不作限定。
S130、在基于目标工作负载中各容器镜像所支持的架构类型确定出兼容架构类型的情况下,基于兼容架构类型为目标工作负载添加节点亲和性标签,并为目标工作负载去除调度门,以使主调度器在监测到目标工作负载上不存在调度门的情况下,基于节点亲和性标签对目标工作负载进行调度。
在本公开实施例中,在基于目标工作负载中各容器镜像所支持的架构类型确定出兼容架构类型的情况下,从调度器可以基于兼容架构类型为目标工作负载添加节点亲和性标签,并为目标工作负载去除调度门。主调度器在监听到目标工作负载后,能够检测目标工作负载中是否存在调度门,并在检测到目标工作负载中不存在调度门的情况下,基于节点亲和性标签对目标工作负载进行调度。
具体地,兼容架构类型为目标工作负载中各容器镜像所支持的架构类型的交集。例如,目标工作负载中包括三个容器镜像,若第一个容器镜像所支持的架构类型包括x86,第二个容器镜像所支持的架构类型包括 x86和arm,第二个容器镜像所支持的架构类型包括 x86和rics-v,则兼容架构类型为 x86;若第一个容器镜像所支持的架构类型包括 x86,第二个容器镜像所支持的架构类型包括arm,第二个容器镜像所支持的架构类型包括 x86,则无兼容架构类型。
具体地,节点亲和性标签用于指示能够将目标工作负载调度到哪些节点上,其中包括可以将目标工作负载调度到架构类型为兼容架构类型的节点的指示信息。
具体地,目标工作负载被去除调度门后,主调度器可以基于预设调度策略从节点亲和性标签指示的多个节点中选取目标节点,并将目标工作负载调度至目标节点。需要说明的是,预设调度策略本领域技术人员可根据实际情况,此处不作限定。
可选地,该方法还包括:在未检查出至少一个容器镜像所支持的架构类型的情况下、或者在未确定出目标工作负载的兼容架构类型的情况下,为目标工作负载去除调度门,以使主调度器在监测到目标工作负载上不存在调度门的情况下,对目标工作负载进行调度。
可以理解的是,由于网络出错等原因均可能导致检查出错,即导致容器镜像所支持的架构类型无法被检查出,而在目标工作负载中至少一个容器镜像所支持的架构类型未被检查出时,将无法确定兼容结构类型。此外,当目标工作负载中各容器镜像所支持的架构类型的交集为空时,也无法确定出兼容架构类型。此时,为了避免目标工作负载由于长时间无法确定兼容架构类型带来的长时间无法被调度,可以直接为目标工作负载去除调度门,以使主调度器在监测到目标工作负载上不存在调度门的情况下,及时对目标工作负载进行调度。
本公开实施例,能够为目标工作负载添加调度门以使主调度器先不对目标工作负载进行调度,进而在确定出目标工作负载的兼容架构类型的情况下基于兼容架构类型为目标工作负载添加节点亲和性标签,以使主调度器在目标工作负载上不存在调度门的情况下,基于节点亲和性标签对目标工作负载进行调度,从而实现将目标工作负载调度至架构兼容的节点上,避免目标工作负载无法正常工作的问题。
下面结合一个具体示例对本公开实施例提供的工作负载的调度方法进行详细说明。当将本公开实施例提供的工作负载的调度方法应用于Kubernetes集群时,对kube-scheduler(即主调度器)无任何修改,而是增加一个multiarch-scheduler(即从调度器),利用Kubernetes的Pod Scheduling Readiness特性可在Pod(即最小工作负载单元)被创建时添加scheduling gate达到暂停调度的目的,利用Pod Mutable Scheduling Directives特性给处于暂停调度状态的Pod添加符合容器镜像架构的节点亲和性标签。图2是本公开实施例提供的一种电子设备在工作负载的调度过程中的工作流程图。图3是本公开实施例提供的从调度器在工作负载的调度过程中的工作流程图。参见图2和图3,电子设备的工作负载的调度过程主要包括以下步骤:
1、部署目标工作负载。
2、拦截目标工作负载的创建请求,为目标工作负载添加调度门。
具体地,当用户部署目标工作负载时,创建的Pod(即目标工作负载)会被multiarch-scheduler(即从调度器)在被创建之前拦截并添加scheduling gate(即调度门),然后Pod才被准入并持久化至etcd(即一种云原生分布式存储数据库)。对于某些Pod(如特定节点的代理(即agent)不需要被拦截,multiarch-scheduler支持通过命名空间和标签选择器过滤,如图3中的自动化暂停调度部分所示。
3、监听目标工作负载,在目标工作负载上存在调度门的情况下,暂停调度目标工作负载。
4、将目标工作负载标记为不可调度。
具体地,kube-scheduler(即主调度器)监视到Pod,如果scheduling gate存在,kube-scheduler将不会调度Pod,即此时Pod只是普通的资源,并标记为不可调度,以使用户能够知道;当后续scheduling gate被移除之后,kube-scheduler再开始调度Pod。
5、监听目标工作负载,在目标工作负载上存在调度门的情况下,检查目标工作负载中每个容器镜像所支持的架构类型。
具体地,multiarch-scheduler(即从调度器)监视到被创建的Pod,如果Pod中存在scheduling gate,则检查Pod中每一个容器镜像所支持的架构类型,否则说明该Pod将由kube-scheduler直接调度。如图3所示,在检查容器镜像所支持的架构类型时,首先在历史检查结果的容器镜像(即历史容器镜像)的三级缓存中查找是否存在上次镜像检查结果,若缓存中不存在则通过Pod的访问密钥构建远程镜像仓库凭证访问存储Pod中容器镜像的远程镜像仓库,检查容器镜像所支持的所有架构类型,并根据容器镜像及其所支持的架构构建三级缓存。
6、基于目标工作负载中每个容器镜像所支持的架构类型确定兼容架构类型,并基于兼容架构类型添加节点亲和性标签。
具体地,multiarch-scheduler对Pod中各个容器镜像所支持的架构类型取交集作为兼容架构类型。multiarch-scheduler添加Pod可以运行的兼容架构类型,添加kubernetes.io/arch标签(Kubernetes原生的节点架构标签)声明所支持的架构类型。若Pod中已经声明节点亲和性,由于不同节点亲和性之间为逻辑或的关系,需要在Pod声明的每个节点亲和性中添加其兼容的架构标签。
如果multiarch-scheduler检查出错(比如网络出错等)未检查出容器镜像所支持的结构类型,则移除Pod中scheduling gate,让Kubernetes调度器继续调度。
7、移除目标工作负载上的调度门。
具体地,multiarch-scheduler移除Pod中的scheduling gate。
8、监听目标工作负载,在检测到目标工作负载上不存在调度门的情况下,基于节点亲和性标签进行调度。
具体地,kube-scheduler根据节点亲和性对Pod进行调度至合适的节点。
9、添加目标工作负载的调度结果。
本公开实施例提供的工作负载的调度方法,能够高级自动化暂停调度,multiarch-scheduler实时监听Pod的创建事件,配合命名空间和标签选择器等实现用户可自定义的高级过滤特性,添加scheduling gate实现高级自动化暂停调度。还能够智能感知工作负载支持架构,multiarch-scheduler实时监听Pod的更新事件(即添加调度门),对暂停调度的Pod,通过远程镜像仓库检索和高性能缓存匹配与其容器镜像相符的架构,对结果取并集之后添加合适的节点亲和性实现多架构云原生环境下智能感知工作负载所支持的架构。还能够高性能地缓存容器镜像架构结果,multiarch-scheduler将容器镜像拆分成Registry,Repository和Tag来构建三级缓存,极大的节省内存空间,避免了无效的远程调用。具有如下优势:利用Kubernetes关键特性,对Kubernetes原生件无侵入,可自动独立运维。可实现单架构到多架构的平滑迁移,而无需额外的运维成本。降低多架构节点扩容难度,自动拦截Pod防止工作负载被调度到不支持的架构的节点上。用户在多架构环境中部署工作负载,在考虑容器镜像升级时,无需维护工作负载和节点的兼容性。降低开发人员开发难度,使其无需额外考虑多架构的支持。
图4是本公开实施例提供的一种工作负载的调度装置的结构示意图,该工作负载的调度装置可以被理解为上述电子设备或者上述电子设备中的部分功能模块。如图4所示,该工作负载的调度装置400包括:
第一添加模块410,用于在目标工作负载对应的目标工作负载的创建过程中,在检测到所述目标工作负载满足预设条件的情况下,为所述目标工作负载添加调度门;
第一检查模块420,用于在监测到所述目标工作负载上存在调度门的情况下,针对所述目标工作负载中的每个容器镜像,检查所述容器镜像所支持的架构类型;
第二添加模块430,用于在基于所述目标工作负载中各所述容器镜像所支持的架构类型确定出兼容架构类型的情况下,基于所述兼容架构类型为所述目标工作负载添加节点亲和性标签,并为所述目标工作负载去除调度门,以使主调度器在监测到所述目标工作负载上不存在调度门的情况下,基于所述节点亲和性标签对所述目标工作负载进行调度。
在本公开另一种实施方式中,所述预设条件包括所述目标工作负载的命名空间属于目标命名空间和/或所述目标工作负载的预设标签的标签内容属于目标标签内容。
在本公开又一种实施方式中,第一检查模块420包括检查所述容器镜像所支持的架构类型的第一检查子模块,第一检查子模块包括:
第一获取单元,用于获取历史检查结果,其中,所述历史检查结果中包括历史检查过的历史容器镜像以及所述历史容器镜像所支持的架构类型;
第一检索单元,用于在所述历史检查结果中检索与所述容器镜像相同的历史容器镜像;
第二获取单元,用于在检索到与所述容器镜像相同的历史容器镜像的情况下,获取与所述容器镜像相同的历史容器镜像所支持的架构类型,并将其作为所述容器镜像所支持的架构类型。
在本公开再一种实施方式中,第一检索单元具体用于,在所述历史检查结果中检索与所述容器镜像的第一级缓存相同的历史容器镜像,得到第一检索结果;
在所述第一检索结果不为空的情况下,在所述第一检索结果中检索与所述容器镜像的镜像仓库相同的历史容器镜像,得到第二检索结果;
在所述第二检索结果不为空的情况下,在所述第二检索结果中检索与所述容器镜像的镜像标签相同的历史容器镜像,得到第三检索结果;
在所述第三检索结果不为空的情况下,获取所述第三检索结果中的历史容器镜像所支持的架构类型,并将其作为所述容器镜像所支持的架构类型;
在所述第一检索结果、所述第二检索结果、或所述第三检索结果为空的情况下,确定未检索到与所述容器镜像相同的历史容器镜像。
在本公开再一种实施方式中,第一检查子模块还包括:
第一建构单元,用于在未检索到与所述容器镜像相同的历史容器镜像的情况下,基于所述容器镜像的访问密钥构建远程镜像仓库访问凭证;
第二检索单元,用于基于所述远程镜像仓库访问凭证进入远程镜像仓库,并在所述远程镜像仓库中检索所述容器镜像所支持的架构类型。
在本公开再一种实施方式中,该装置还包括:
保存模块,用于在所述在所述远程镜像仓库中检索所述容器镜像所支持的架构类型之后,将所述容器镜像以及其所支持的架构类型保存在所述历史检查结果中。
在本公开再一种实施方式中,该装置还包括:
去除模块,用于在未检查出至少一个所述容器镜像所支持的架构类型的情况下、或者在未确定出所述目标工作负载的兼容架构类型的情况下,为所述目标工作负载去除调度门,以使主调度器在监测到所述目标工作负载上不存在调度门的情况下,对所述目标工作负载进行调度。
本实施例提供的装置能够执行上述任一实施例的方法,其执行方式和有益效果类似,在这里不再赘述。
本公开实施例还提供了一种电子设备,该电子设备包括:存储器,存储器中存储有计算机程序;处理器,用于执行所述计算机程序,当所述计算机程序被所述处理器执行时可以实现上述任一实施例的方法。
示例的,图5是本公开实施例中的一种电子设备的结构示意图。下面具体参考图5,其示出了适于用来实现本公开实施例中的电子设备500的结构示意图。本公开实施例中的电子设备500可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图5所示,电子设备500可以包括处理装置(例如中央处理器、图形处理器等)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储装置508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有电子设备500操作所需的各种程序和数据。处理装置501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
通常,以下装置可以连接至I/O接口505:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置506;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置507;包括例如磁带、硬盘等的存储装置508;以及通信装置509。通信装置509可以允许电子设备500与其他设备进行无线或有线通信以交换数据。虽然图5示出了具有各种装置的电子设备500,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置509从网络上被下载和安装,或者从存储装置508被安装,或者从ROM 502被安装。在该计算机程序被处理装置501执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:
在目标工作负载对应的目标工作负载的创建过程中,在检测到目标工作负载满足预设条件的情况下,为目标工作负载添加调度门;
在监测到目标工作负载上存在调度门的情况下,针对目标工作负载中的每个容器镜像,检查容器镜像所支持的架构类型;
在基于目标工作负载中各容器镜像所支持的架构类型确定出兼容架构类型的情况下,基于兼容架构类型为目标工作负载添加节点亲和性标签,并为目标工作负载去除调度门,以使主调度器在监测到目标工作负载上不存在调度门的情况下,基于节点亲和性标签对目标工作负载进行调度。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本公开实施例还提供一种计算机可读存储介质,所述存储介质中存储有计算机程序,当所述计算机程序被处理器执行时可以实现上述任一实施例的方法,其执行方式和有益效果类似,在这里不再赘述。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。