扩展进程中的KUBERNETES应用程序接口的制作方法

文档序号:28660879发布日期:2022-01-26 20:03阅读:74来源:国知局
扩展进程中的KUBERNETES应用程序接口的制作方法
扩展进程中的kubernetes应用程序接口
技术领域
1.本公开的方面涉及容器编排引擎,更具体地,涉及控制器的部署和操作。


背景技术:

2.容器编排引擎(诸如redhat
tm openshift
tm
模块)可以是用于开发和运行容器化应用的平台,并且可以允许应用和支持这些应用的数据中心从仅有的几台机器和应用扩展到服务于数百万客户的数千台机器。容器编排引擎可以提供基于图像的部署模块用于创建容器,并且可以存储一个或多个图像文件用于创建容器实例。许多应用实例可以在单一主机上的容器中运行,而不需要对彼此的进程、文件、网络等的可见性。尽管容器可以用于任意的工作负载,但每个容器可以提供应用的单一功能(经常称为“服务”)或组件,诸如网络服务器或数据库。


技术实现要素:

3.本公开涉及一种用于扩展进程中容器编排引擎api的方法。该方法包括:由处理设备将在运行时间在群集中创建的一个或多个定制资源定义crd控制器中的每一个编译到相应的隔离模块中以生成一个或多个隔离模块,其中,一个或多个隔离模块都被托管在服务中;监视由所述一个或多个crd控制器中的每一个所服务的应用程序接口api事件;以及响应于检测到由所述一个或多个crd控制器中的crd控制器所服务的api事件,执行所述crd控制器相应的隔离模块。
4.本公开还涉及一种系统,其包括存储器以及处理设备,其可操作地耦接到所述存储器,所述处理设备用于执行上述方法。
5.本公开还涉及一种非暂时性计算机可读介质,其上存储有指令,所述指令当由处理设备执行时,使得所述处理设备执行上述方法。
附图说明
6.所描述的实施例及其优点可以通过参考以下描述连同附图来最好地理解。在不偏离所描述的实施例的精神和范围情况下,这些附图不限制由本领域技术人员对所描述的实施例可能进行的形式和细节上的任何改变。
7.图1是示出根据本公开的一些实施例的示例系统的框图。
8.图2a是示出根据本公开的一些实施例的示例系统的框图。
9.图2b是示出根据本公开的一些实施例的示例系统的框图。
10.图3是示出根据本公开的一些实施例的示例系统的框图。
11.图4是示出根据本公开的一些实施例的示例系统的框图。
12.图5是根据本公开的一些实施例的用于使用隔离模块扩展进程中的容器编排引擎api的方法的流程图。
13.图6是根据本公开的一些实施例的用于使用隔离模块扩展进程中的容器编排引擎
api的方法的流程图。
14.图7是根据本公开的一些实施例的可以执行本文描述的操作中的一个或多个的示例计算设备的框图。
具体实施方式
15.诸如kubernetes之类的容器编排引擎可以使用定制资源定义(crd)进行扩展。crd声明并定义新的定制资源(cr),该资源可以由控制器选取以执行一些有意义的动作(为cr服务),诸如提供外部系统。这些crd可以用作系统的扩展点,并且在许多情况下,期望具有多个精确范围的crd以适当地抽象kubernetes群集的操作关注点。
16.每个crd都需要它自己的控制器,该控制器是需要在群集上运行的pod的进程。因为扩展不一定在群集实例化时应用,所以每个控制器存在于从kubernetes核心api的主协调器(例如,kube-controller-manager)单独的服务(应用)中。这些服务运行在它们自己新创建的部署中,因此,crd的每一组至少需要新的pod(如果多个控制器被构建到单一服务中),并且在最坏的情形下,每个crd都需要单独的pod。每个pod都会分配多个cpu、存储器和其他资源。当每个pod都变得高度可用时,资源的成本就会被放大。这个问题会加重,因为这些pod中的许多将闲置大段时间,没有工作要做。
17.可以通过将更多数量的控制器打包到相同服务中来节省资源。例如,可以将knative控制器静态地编译到单一服务中。然而,这种编译发生在构建时间,而不是在运行时间,因此不允许动态扩展。
18.本公开通过使用处理设备将在运行时间在群集中创建的一个或多个定制资源定义(crd)控制器中的每一个编译到相应的隔离模块中以生成一个或多个隔离模块来解决上述及其他缺陷。一个或多个隔离模块可以全部托管在相同服务(例如,控制器管理器服务)中,这可以包括隔离模块运行时间,以经由它们相应的隔离模块便于crd控制器的执行。隔离模块运行时间还可以提供用于管理crd控制器的生命周期和便于服务和隔离模块之间的通信的接口。在接收到其中crd控制器已被编译的隔离模块时,接口可以利用crd控制器的控制器元数据更新服务的通知组件(informer),以使接口能够监视由crd控制器服务的应用程序接口(api)事件。响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,通知组件可以向接口指示已经检测到事件以及该事件所属的crd控制器。接口可以执行crd控制器的相应隔离模块,使得crd控制器可以服务检测到的事件。以这种方式,crd控制器在它们相应的隔离模块未执行的同时不在后台运行(例如,作为后台进程),并且可以在它们相应的隔离模块的执行时从其非活动状态转换到活动状态。
19.图1是示出示例系统100的框图。如图1所示,系统100包括计算设备110,以及多个计算设备130。计算设备110和130可以经由网络140彼此耦接(例如,可以操作性地耦接、通信性地耦接,可以彼此通信数据/消息)。网络140可以是公共网络(例如,互联网)、私有网络(例如,局域网(lan)或广域网(wan)),或其组合。在一个实施例中,网络140可以包括有线或无线基础设施,其可以由一个或多个无线通信系统提供,诸如与网络140连接的wifi
tm
热点和/或可以使用各种数据处理设备、通信塔(例如蜂窝塔)实施的无线载波系统等。在一些实施例中,网络140可以是l3网络。网络140可以携载计算设备110和计算设备130之间的通信(例如,数据、消息、分组、帧等)。每个计算设备可以包括硬件,诸如处理设备115(例如,处理
器、中央处理单元(cpu))、存储器120(例如,随机存取存储器120(例如,ram)、存储设备(例如,硬盘驱动器(hdd)、固态驱动器(ssd)等)和其他硬件设备(例如,声卡、视频卡等)。在一些实施例中,存储器120可以是能够存储数据的持久性存储装置。持久性存储装置可以是本地存储单元或远程存储单元。持久性存储装置可以是磁存储单元、光学存储单元、固态存储单元、电子存储单元(主存储器)或类似的存储单元。持久性存储装置也可以是单片/单一设备或一组分布式设备。存储器120可以被配置为数据的长期存储,并且可以在计算设备110的电源开/关循环之间保留数据。
20.每个计算设备可以包括具有可编程处理器的任何合适类型的计算设备或机器,例如包括,服务器计算机、台式计算机、笔记本电脑、平板计算机、智能手机、机顶盒等。在一些示例中,计算设备110和130中的每一个可以包括单一机器,或者可以包括多台相互连接的机器(例如,配置在群集中的多个服务器)。计算设备110和130可以由共同的实体/组织实施,或者可以由不同的实体/组织实施。例如,计算设备110可以由第一公司/企业操作,并且一个或多个计算设备130可以由第二公司/企业操作。计算设备110和计算设备130中的每一个可以执行或包括操作系统(os),诸如计算设备110的主机os 210和130的主机os 211,如下文更详细地讨论。计算设备110和130的主机os可以管理其他组件(例如,软件、应用等)的执行和/或可以管理对计算设备的硬件(例如,处理器、存储器、存储设备等)的访问。在一些实施例中,在计算设备130可以各自实施计算节点(例如,作为容器编排引擎的一部分)的同时,计算设备110可以实施控制面(例如,作为容器编排引擎的一部分)。
21.在一些实施例中,容器编排引擎214(本文称为容器主机214),诸如redhat
tm openshift
tm
模块,可以在计算设备110的主机os 210和计算设备130的主机os 211上执行,如本文将进一步详细讨论。容器主机模块214可以是用于开发和运行容器化应用的平台,并且可以允许应用和支持这些应用的数据中心从仅有的几台机器和应用扩展到服务于数百万客户的数千台机器。容器主机214可以提供基于图像的部署模块用于创建容器,并且可以存储一个或多个图像文件用于创建容器实例。许多应用实例可以在单一主机上的容器中运行,而不需要对彼此的进程、文件、网络等的可见性。在一些实施例中,尽管容器可以用于任意的工作负载,但每个容器可以提供应用的单一功能(经常称为“微服务”)或组件,诸如网络服务器或数据库。以这种方式,容器主机214提供了一起工作的较小的解耦单元的基于功能的架构。
22.容器主机214可以包括存储驱动器(未示出),诸如overlayfs,以管理图像文件的内容,包括图像文件的只读层和可写层。存储驱动器可以是联合文件系统类型,其允许开发人员将一个文件系统叠加在另一个文件系统的顶部。更改可以被记录在上面的文件系统中,而下面的文件系统(基础图像)保持未被修改。以这种方式,多个容器可以共享文件系统映像,其中基础图像是只读介质。
23.可以由容器主机214或注册服务器存储图像文件。在一些实施例中,图像文件可以包括一个或多个基础层。可以由多个容器共享图像文件。当容器主机214创建新容器时,它可以在底层基础层的顶部添加新的可写(例如,存储器中)层。然而,底层图像文件保持不变。基础层可以定义运行时间环境以及对容器化应用运行所必需的数据包和实用程序。因此,图像文件的基础层每个可以包括容器配置的静态快照,并且可以是永不修改的只读层。任何改变(例如,由在容器上运行的应用程序要写入的数据)可以在随后(上)层(诸如内存
中的层)中实施。在内存中的层中所做的改变可以通过创建新的分层图像来保存。
24.虽然容器图像是可以部署容器的基本单元,但容器主机214可以与之一起工作的基本单元被称为pod。pod可以指在单一主机上一起部署的一个或多个容器,以及可以被定义、部署和管理的最小的计算单元。每个pod被分配它自己内部的ip地址,并且因此可以拥有它的整个端口空间。用户(例如,经由容器主机模块214)可以定义pod的入口点脚本,以指示pod将它自身配置为具有它自己的ip地址和模拟网络堆栈的唯一模拟计算节点并与控制面的内部api通信。pod内的容器可以共享其本地存储和网络连接。在一些实施例中,pod具有其被定义,被分配到节点上运行,以及运行直到它们的(多个)容器退出或基于它们的策略和退出代码而被移除的生命周期。尽管pod可以包含一个或多于一个容器,但pod是用户可以部署、缩放和管理的单一单元。容器主机214的控制面215可以包括控制器215a-d,其中一个或多个控可以是,例如,复制控制器,指示一次需要运行多少个pod复制,并且可以用于自动缩放应用程序以适应其当前需求。
25.根据其性质,容器化应用程序与其中它们运行的操作系统以及通过扩展的它们的用户是分离的。控制面215可以通过定义控制与容器化应用的通信的网络策略(例如,对于群集131内的服务的传入的http或https请求),将应用暴露于内部和外部网络。
26.容器主机214的典型部署可以包括控制面215和工作节点131的群集,其包括工作节点131a和131b(也称为计算机器)。工作节点131可以运行启动和管理容器、pod和其他对象所需的容器主机214的方面。例如,工作节点可以是提供在环境中运行容器所需的处理能力的物理服务器。例如,工作者节点也可以被实施为虚拟服务器、逻辑容器或gpu。
27.控制面215可以包括暴露对象的rest api(未示出)(例如,kubernetes api),以及读取那些api、向对象应用改变、并向对象报告状态和/或回写的控制器218和219。对象可以是容器主机214中的持久性实体,其用以表示群集131的状态(例如,部署、复制集和pod)。控制面215可以运行api服务器216(例如,kubernetes api服务器),其验证和配置对象(诸如例如,pod、服务和控制器)的数据,以及为群集131的共享状态提供焦点。控制面215还可以运行调度器服务(未示出),该调度器服务考虑pod的资源需求,诸如cpu或内存,以及群集的健康,然后将pod调度到适当的工作节点131。
28.控制器218和219可经由api服务器216观察群集131的状态,并寻找事件,该事件对应于资源的期望状态(例如,创建、更新、删除)或群集(例如,pod或节点片(die))的改变。然后,控制器218和219可以对群集131进行改变,以确保当前状态与由观察到的资源所描述的期望状态相匹配(称为协调)。例如,每个控制器218和219观察和协调某些对象类型,如由控制器的元数据所定义的,该元数据包括控制器将观察/协调的对象类型和它使用的特定类过滤器(如果适用)。控制器218和219在对象被写入后通过观察对象类型然后从事件中触发协调来启动对象。在对象被创建/更新/删除之后,观察该对象类型的控制器将接收对象已被改变的通知,并且它们可以读取群集131的状态以查看已改变的内容(而不是依赖用于该信息的事件)。例如,当用户希望扩展部署时,可以向api服务器216发送具有新的期望配置的请求。api服务器216相应地发布由观察该部署的部署控制器读取的改变。因此,部署控制器创建一个或多个pod以符合新定义。新的pod创建本身就是新的改变,api服务器216也可以将其向所有事件监听者广播。因此,如果存在应该在新pod的创建时得到触发的任何动作,则可以对它们进行自动注册。
29.控制面215还可以包括主状态存储(未示出),其存储群集131的持久性主状态(例如,etcd存储)。控制面215还可以包括控制器管理器(诸如例如,kubernetes-控制器-管理器(本文称为“控制器管理器217”))服务,其包括针对对象的变化(诸如复制、命名空间)查看etcd存储的一组通知组件217a和“服务账号”控制器对象,然后使用api来强制指定的状态。控制器管理器217可以托管多个核心控制器218。例如,一个控制器218可以咨询调度器服务并确保正确数量的pod正在运行。另一控制器218可以监视pod,并且如果pod发生故障,可以通知并响应。另一控制器218将服务连接到pod,因此请求将进入正确的端点。仍然有其他控制器218可以创建账户和api访问令牌等。控制器管理器217可以包括通知组件217a,以通过api事件来驱动每个控制器218的协调循环。
30.rest api可以使用称为定制资源定义(crd)的特殊对象来扩展。crd对象在群集中定义了新的、唯一的对象类型,并允许api服务器处理其整个生命周期。定制资源(cr)对象(以下称为定制资源,或cr)是从由群集管理员已经添加到群集的crd中创建的,允许所有群集用户将新对象类型添加到项目中。当群集管理员向群集添加新的crd时,api服务器通过创建新的restful资源路径(例如,api扩展)作出反应,该路径可以由整个群集或单一项目(命名空间)访问,并开始为指定的cr服务。
31.每个cr都需要观察/协调cr的特定对象类型的控制器(协调器),以利用它执行一些有意义的功能。例如,当etcdcluster crd被创建时,对应的控制器可以取用对应的etcdcluster cr对象并利用其部署etcd群集。观察/协调cr对象(本文也称为服务cr对象)的控制器在本文可以称为crd控制器,诸如图1中示出的crd控制器219。当创建crd时,可以与crd一起创建能够服务对应cr的crd控制器。例如,crd控制器可以是定义为新操作者(使用例如操作者sdk)的一部分的定制控制器,或者包括在从群集外的源(使用例如operatorhub)拉取的操作者中。每个crd控制器219可以包括通知组件(例如,通知组件220a和220b),以驱动协调循环,以及“协调”功能(例如,221a和221b),该功能取用这些事件并基于它们执行一些操作。然而,因为诸如crd的扩展不在群集启动时应用,所以crd控制器219每个被托管在与控制器管理器217分离的服务(未示出)中。因为每个这种服务在其自身的部署中执行,所以至少对于每一组crd需要新的pod,并且在某些情形下,对于每个crd需要单独的pod。这在资源消耗方面造成了相当大的成本,特别是当pod的可用性很高时。虽然多个knative控制器可以构建在一个二元中,但这种编译发生在构建时,而不是运行时,因此不适合诸如operatorhub之类的机制。
32.本公开的实施例通过以下来克服这个问题:在从与群集的其余部分被实例化(例如,在运行时间)时分开的时间将每个crd控制器219编译到相应的隔离模块中,并且一旦它们相应的api扩展被安装到群集131中就动态地发动crd控制器219。事实上,每个crd控制器219被编译为与群集131的封装分离的编译过程的一部分。尽管本公开的实施例是关于作为示例隔离模块的网络组装模块(wasm)来描述的,但隔离模块可以是任何合适的模块,诸如golang插件(本文称为“go-plugin”),或任何其它合适的隔离模块。
33.wasm定义了可执行程序的可移植二进制代码格式、对应的文本汇编语言以及用于便于这种可执行程序与其主机环境之间的交互的接口。wasm代码在低级虚拟机内运行,该虚拟机模仿可以在其上运行的处理设备的功能。wasm是可移植的,并且支持用各种编译语言编写的可执行程序,诸如golang、c++和rust。换句话说,大范围语言的程序都可以被编译
到wasm。此外,虽然wasm对其执行环境假定了某些先决条件,但它们被设计为在各种操作系统和指令集架构上有效执行。
34.因为每个wasm在使用故障隔离技术从主机运行时间隔离的虚拟机内执行,所以编译到wasm中的应用在从它们的主机环境的其他部分的隔离下执行,不通过适当的api,就无法逃离wasm的“沙箱”。
35.每个crd控制器219可以是一个相对自包含的代码实体,其包括通过api事件驱动协调循环的通知组件220,以及“协调”功能221,其取用这些事件并基于它们执行一些操作(例如,服务它们)。这种自包含的性质允许它们可以像任何其他程序一样被编译到wasm中。图2a和图2b示出了根据本公开的一些实施例的系统200。
36.在由用户/开发人员对crd控制器219的创建之后,用户/开发人员可以利用语言工具和代码生成组件将crd控制器219编译成wasm模块224。这种组件的示例可以包括代码生成器,用于通过在逐个功能级别上的并行编译从crd控制器219的代码生成优化的机器代码。例如,与crd控制器219一样,wasm模块224可以被定义为新的操作者(使用例如操作者sdk)的部分,或被包括在从群集外的源(使用例如操作者hub)拉取的操作者中。托管在控制器管理器217上的安装器控制器(未示出)可以发挥功用,从例如operatorhub拉取新创建的隔离模块并将其挂载到控制器管理器217中。安装器控制器本身可以托管在控制器管理器217上,或者可以托管在分离的服务上。在一些实施例中,安装器控制器也可以被编译到wasm中或到其他适当的隔离模块中。在一些实施例中,新创建的隔离模块224可以直接挂载到控制器管理器217中,就像它是文件一样。更具体地说,容器主机214可以创建其中放入新创建的隔离模块224的kubernetes卷(volume),并将该卷直接挂载到控制器管理器217中。当控制器管理器217引导启动时,可以读取该卷并启动隔离模块224。
37.如图2a所示,控制器管理器217可以充当每个crd控制器219的主机,并且可以包括经由它们相应的wasm 224便于crd控制器219中的每一个的执行的wasm运行时间(未示出)。wasm运行时间可以包括接口(wasm接口223),该接口包括用于便于wasm224和它们的主机环境(例如,控制器管理器217)之间的交互的一组api。这些api可以在控制器管理器217和每个wasm 224之间提供i/o(例如,代表每个相应的crd控制器219)。例如,wasm接口223可以是任何适当的接口,诸如webassembly系统接口(wasi)。wasm运行时间还可以提供从底层os和/或运行模块的主机应用(例如,控制器管理器217)的wasm 224的各个执行的隔离,从而隔离每个crd控制器219的故障模式。例如,当wasm运行时间执行wasm224中的功能时,它可以将功能的结果(例如,成功/失败)提供回控制面215。然而,在故障的情况下,该故障不会传播到主机应用(例如,控制器管理器217)。因此,如果单一crd控制器219崩溃,也不会导致其他crd控制器219随之崩溃,主机应用也不会随之崩溃。
38.wasm接口223可以管理所有crd控制器219的生命周期,以及经由它们相应的wasm 224管理控制器管理器217和每个crd控制器219之间的通信。更具体地,在获得其中编译了新定义的crd控制器219a(例如,如上文所讨论的,使用operator sdk或使用operatorhub从群集外的源拉取)的新的wasm 224a时,wasm接口223可以挂载wasm 224a,并在wasm224a和控制器管理器217之间提供i/o。
39.如上文所讨论,当生成新的crd控制器219a时,它包括描述crd控制器219a要服务的事件类型的控制器元数据。因为通知组件217a是可编程组件,当wasm接口223挂载其中执
行新crd控制器219a的wasm 224a时,它可以利用crd控制器219a的控制器元数据更新通知组件217a,以向通知组件217a指示新挂载的crd控制器219a将服务的事件的类型。当通知组件217a取得crd控制器219a所服务的类型的事件,它可以确定crd控制器219正在服务于该事件类型,并且告知wasm接口223已经取得属于crd控制器219a的事件。以这种方式,当任何类型的事件由通知组件217a取得时,它可以确定哪个crd控制器219正在服务于该事件类型,并且告知wasm接口223,已经取得属于该crd控制器219的事件。wasm接口223可以执行相关crd控制器219已被编译到其中的wasm 224。以这种方式,一旦它们的新api扩展被安装到群集131中,就可以动态地启动每个crd控制器。通知组件217a可以包括一组事件队列(未示出),其允许每个定制资源实例的事件的串行处理。例如,让部署控制器并行地服务于改变图像的事件和放大pod的事件,可以导致部署的不一致状态。该组事件队列允许通知组件217a通过定制资源基础在定制资源上串行地处理事件。在一些实施例中,该组事件队列还可以帮助去除复制(deduplicate)冲突事件。
40.如在图2a中可以看到,群集131的crd控制器219可以运行在单一主机服务(例如,控制器管理器217)中,其在接收到新的api事件时执行正确的wasm 224(对应于服务该api事件类型的crd控制器219的wasm模块224)。这样,每个crd控制器219可以像功能一样动态地使用(例如,按需使用),并且不在后台连续运行。这种方案显著地降低了对存储器和cpu资源的开销,因为crd控制器219仅在实际需要它们时才从其非活动状态中被“唤醒”并且被执行。crd控制器219也都被托管在相同服务中,这就移除了各个依赖的crd控制器219之间相互通信的需要,并减少了网络开销。如果托管这些crd控制器219的服务是控制器管理器217,这也可以移除与kubernetes本身通信的网络流量需要。这种方案显著地减少了由向群集添加新扩展所累积的存储器和cpu资源的开销。
41.在一些实施例中,垂直自动伸缩器(未示出)可以用以监视其上正在执行控制器管理器217的pod的资源消耗。例如,随着更大数量的wasm被添加到控制器管理器217中,可能需要调整资源消耗。例如,额外的处理设备资源可能需要可用于控制器管理器217,以便其处理添加的负载。这避免了水平自动缩放的需要,这将涉及额外的crd控制器的创建,而这因为crd控制器是单线程所以是不可能的。虽然关于wasm进行了描述,但如图2b所示,可以利用任何适当的隔离模块。
42.在一些实施例中,每个crd控制器219(例如,其隔离模块)可以被托管在与控制器-管理器217分离的特殊服务上,其中核心控制器218仍然可以被托管。图3示出了系统300,其中crd控制器219可以被托管在与控制器管理器217分离的特殊控制器管理器服务222上,其中核心控制器218仍然可以被托管。系统300可以类似于关于图2a和图2b描述的系统200发挥功用。当crd控制器219被托管在特殊控制器管理器服务222上时,每个crd219的生命周期可以直接由容器编排引擎214管理,并且可以实现更高的隔离水平。
43.虽然图2a是关于wasm描述的,但可以使用任何合适的隔离模块。图4示出了本公开的实施例的系统400,其中隔离模块被实施为go插件。golang是静态类型的、编译的编程语言,并且用golang编写的程序可以包括程序包。go插件可以是具有输出功能和变量的程序包,这些功能和变量可以被编译为共享对象库(例如,在编译时产生共享对象库文件),这些共享对象库可以在运行时间被动态加载和绑定。go插件可以允许使用这些共享对象库的模块化程序的创建。
44.系统400可类似于关于图2a和图2b描述的系统200操作,但可以利用go插件424而不是wasm。更具体地,在新crd控制器419a的创建时,用户/开发人员可以将crd控制器419a编译到go插件424a中,并将go插件424a提供给控制器管理器417(例如,如上文所讨论的经由operatorsdk或operatorhub)。golang接口423可以挂载go插件424a并在go插件424a和控制器管理器417之间提供i/o。
45.当生成新的crd控制器419a时,它包括描述crd控制器要服务什么类型事件的控制器元数据。因为通知组件417a是可编程组件,当golang接口423挂载运行新crd控制器419a的go插件424a时,它可以利用crd控制器419a的控制器元数据更新通知组件417a,以向通知组件417a指示新挂载的crd控制器419a将服务的事件的类型。如上文关于图2a和图2b讨论的那样,以这种方式,当某种类型的事件由通知组件417a取得时,它可以确定哪个crd控制器419正在服务于该事件类型,并告知golang接口423,已经取得属于该crd控制器419的事件。golang接口423可以执行相关crd控制器419已经被编译到其中的go插件424。应当注意的是,go插件不提供如上文关于图2a中的wasm所讨论的故障隔离。
46.图5是根据本公开的一些实施例的用于使用隔离模块扩展进程中的kubernetes api的方法500的流程图。方法500可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、处理器、处理设备、中央处理单元(cpu)、片上系统(soc)等)、软件(例如,在处理设备上运行/执行的指令)、固件(例如,微代码)或其组合。在一些实施例中,方法500可以由计算设备(例如,图2a和图2b中示出的计算设备110)执行。
47.在块505处,计算设备110可以将一个或多个定制资源定义(crd)控制器219中的每一个编译到相应的网络组装模块(wasm)224中,并将wasm224中的每一个提供给控制器管理器217(例如,如上文所讨论的经由operatorsdk或operatorhub)。一个或多个wasm 224可以被托管在单一服务(例如,控制器管理器217)中。因此,控制器管理器217可以充当每个crd控制器219的主机,并且可以包括便于每个wasm 224的执行的wasm运行时间(未示出)。wasm运行时间可以包括接口(wasm接口223),该接口包括用于便于wasm224和它们的主机环境(例如,控制器管理器217)之间的交互的一组api。这些api可以在控制器管理器217和每个wasm224之间提供i/o(例如,代表每个相应的crd控制器219)。例如,wasm接口223可以是任何适当的接口,诸如webassembly系统接口(wasi)。wasm运行时间还可以提供从底层os和/或运行模块的主机应用(例如,控制器管理器217)的wasm 224的各个执行的隔离,从而隔离每个crd控制器219的故障模式。例如,当wasm运行时间执行wasm 224中的功能时,它可以将功能的结果(例如,成功/失败)提供回控制面215。然而,在故障的事件中,该故障不会传播到主机应用(例如,控制器管理器217)。因此,如果单一crd控制器219崩溃,则不会导致其他crd控制器219随之崩溃,主机应用程序(例如,控制器管理器217)也不会随之崩溃。
48.在块510处,计算设备110可使用通知组件217a监视由一个或多个crd控制器中的每一个所服务的应用程序接口(api)事件。
49.在块515处,响应于检测到由一个或多个crd控制器219中的特定crd控制器219所服务的api事件,计算设备110可以执行特定crd控制器219对应的wasm 224。
50.图6是根据本公开的一些实施例的用于使用由隔离模块接口管理的隔离模块扩展进程中的kubernetes api的方法600的流程图。方法600可以由处理逻辑执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑、处理器、处理设备、中央处理单元(cpu)、
片上系统(soc)等)、软件(例如,在处理设备上运行/执行的指令)、固件(例如,微代码)或其组合。在一些实施例中,方法600可以由计算设备(例如,图2a和图2b中示出的计算设备110)执行。
51.还参考图2b,在由用户进行新crd和对应的crd控制器219a的创建时,在块605处,计算设备110可使用任何适当的语言工具和代码生成组件将crd控制器219a编译到相应的隔离模块224a中。这种组件的示例可以包括代码生成器,用于通过在逐个功能级别上的并行编译从crd控制器219的代码生成优化的机器代码。crd控制器219a的编译可以由用户发起,并且计算设备110可以将隔离模块224a和该crd控制器219a的任何相关联的控制器元数据提供给控制器管理器217(例如,如上文讨论的,经由operatorsdk或operatorhub)。在其中利用javascript来定义crd控制器219a的一些实施例中,计算设备110可以将crd控制器219a直接提供给控制器管理器217,该控制器管理器217可以将crd控制器219a编译到相应的隔离模块224a中。响应于接收到隔离模块224a,隔离模块接口223可以挂载隔离模块224a并在隔离模块224a和控制器管理器217之间提供i/o。以这种方式,一个或多个隔离模块224可以托管在单一服务(例如,控制器管理器217)中。因此,控制器管理器217可以充当每个crd控制器219的主机,并且可以包括便于每个wasm 224的执行的隔离模块运行时间(未示出)。
52.在块610处,计算设备110可以利用crd控制器219a的控制器元数据更新控制器管理器217的通知组件217a,从而通知组件217a可以基于控制器元数据监视由crd控制器219a所服务的api事件。如上文所讨论,当生成新的crd控制器219a时,它包括描述crd控制器219a要服务的事件类型的控制器元数据。由于通知组件217a是可编程组件,当隔离模块接口223挂载运行新crd控制器219a的隔离模块224a时,它可以利用crd控制器219a的控制器元数据更新通知组件217a,以向通知组件217a指示新挂载的crd控制器219a将服务的事件的类型。
53.在块615处,当某一类型的事件由通知组件217a取得时,它可以确定哪个crd控制器219正在服务于该事件类型,并告知隔离模块接口223,已经取得属于该crd控制器219的事件。通知组件217a可以包括一组事件队列(未示出),其允许每个定制资源实例的事件的串行处理。例如,让部署控制器并行地服务于改变图像的事件和放大pod的事件,可以导致部署的不一致状态。该组事件队列允许通知组件217a通过定制资源基础在定制资源上串行地处理事件。在一些实施例中,该组事件队列还可以帮助去除复制(deduplicate)冲突事件。隔离模块接口223可以执行相关crd控制器219a已被编译到其中的隔离模块224。如在图2b中可以看到,群集131的crd控制器219可以运行在单一服务(例如,控制器管理器217)中,该服务在接收到新的api事件时执行正确的隔离模块224(与服务于该api事件类型的crd控制器对应的隔离模块)。以这种方式,每个crd控制器219可以像功能一样使用(例如,按需使用),并且不在后台连续运行。这种方案显著地降低了对存储器和cpu资源的开销,因为crd控制器219仅在实际需要时被“唤醒”并且被执行。
54.图7示出了以计算机系统700的示例形式的机器的图形表示,在该计算机系统700内的指令集用于使得机器执行本文讨论的用于扩展进程中的kubernetes api的方法中的任何一个或多个。更具体地,机器可以在一个或多个定制资源定义(crd)控制器被创建时,将它们中的每一个编译到相应的隔离模块中,诸如网络组装模块(wasm)。一个或多个隔离
模块可以全部托管在相同服务(例如,控制器管理器服务)中,该服务可以包括隔离模块运行时间以便于crd控制器的编译。隔离模块运行时间还可以提供用于管理crd控制器的生命周期和便于服务和隔离模块之间的通信的接口。在将crd控制器编译到隔离模块中时,接口可以利用crd控制器的控制器元数据更新服务的通知组件,以使接口能够监视由crd控制器服务的应用程序接口(api)事件。响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,通知组件可以向接口指示已经检测到事件以及该事件属于的crd控制器。接口可以执行crd控制器的相应隔离模块,使得crd控制器可以服务检测到的事件。以这种方式,当crd控制器相应的隔离模块未执行时,crd控制器不会在后台运行(例如,作为后台进程)。
55.在替换实施例中,该机器可以连接(例如,联网)到局域网(lan)、内网、外网或互联网中的其他机器。该机器可以在客户端-服务器网络环境中以服务器或客户端的机器操作,或者在点对点(或分布式)网络环境中作为对等机。该机器可以是个人计算机(pc)、平板电脑、机顶盒(stb)、个人数字助理(pda)、蜂窝电话、网络设备、服务器、网络路由器、交换机或网桥、集线器、接入点、网络接入控制设备,或者能够执行指定该机器要采取的动作的一组指令(顺序或其他)的任何机器。此外,虽然只示出了单一机器,但术语“机器”也应被认为包括单独或联合执行一组(或多组)指令以执行本文讨论方法中的任何一个或多个的机器的任何集合。在一个实施例中,计算机系统700可以代表服务器。
56.示范性计算机系统700包括处理设备702、主存储器704(例如,只读存储器(rom)、闪存、动态随机访问存储器(dram))、静态存储器706(例如,闪存、静态随机访问存储器(sram)等)和数据存储设备718,它们经由总线730彼此通信。在本文描述的各种总线上提供的信号中的任何一个都可以与其他信号进行时间复用,并在一个或多个公共总线上提供。此外,电路组件或块之间的互连可以被示出为总线或作为单一信号线。总线中的每一个可以可替换地是一个或多个单一信号线,并且单一信号线中的每一个可以可替换地是总线。
57.计算设备700还可以包括网络接口设备708,其可以与网络720通信。计算设备700还可以包括视频显示单元710(例如,液晶显示器(lcd)或阴极射线管(crt))、字母数字输入设备712(例如,键盘)、光标控制设备714(例如,鼠标)和声信号产生设备716(例如,扬声器)。在一个实施例中,视频显示单元710、字母数字输入设备712和光标控制设备714可以组合到单一组件或设备(例如,lcd触摸屏)中。
58.处理设备702表示一个或多个通用处理设备,诸如微处理器、中央处理单元等等。更特别地,处理设备可以是复杂指令集计算(cisc)微处理器、精简指令集计算机(risc)微处理器、超长指令字(vliw)微处理器、或实施其它指令集的处理器、或实施指令集组合的处理器。处理设备702也可以是一个或多个专用处理设备,例如专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、网络处理器等等。处理设备702被配置为执行api扩展指令725,用于执行本文讨论的操作和步骤。
59.数据存储设备718可以包括机器可读存储介质728,其上存储着一组或多组api扩展指令725(例如,软件),其体现了本文所描述的功能的方法中的任何一个或多个。api扩展指令725还可以在由计算机系统700执行期间完全或至少部分地驻留在主存储器704内或处理设备702内;主存储器704和处理设备702还构成机器可读存储介质。api扩展指令725还可以经由网络接口设备708通过网络720发送或接收。
60.如本文所描述,机器可读存储介质728还可以用以存储指令,以执行用于确定是否存在可以服务crd的控制器的方法。虽然机器可读存储介质728在示范性实施例中被示出为单一介质,但术语“机器可读存储介质”应被视为包括存储一组或多组指令的单一介质或多个介质(例如,集中式或分布式数据库,或相关联的缓存和服务器)。机器可读介质包括以由机器(例如计算机)可读的形式(例如软件、处理应用)存储信息的任何机制。机器可读介质可以包括但不限于磁性存储介质(例如,软盘);光学存储介质(例如,cd-rom);磁光存储介质;只读存储器(rom);随机存取存储器(ram);可擦除可编程存储器(例如,eprom和eeprom);闪存;或适合存储电子指令的另一类型的介质。
61.示例1是一种方法,包括:由处理设备将在运行时间在群集中创建的一个或多个定制资源定义(crd)控制器中的每一个编译到相应的隔离模块中以生成一个或多个隔离模块,其中,一个或多个隔离模块都托管在服务中;监视由一个或多个crd控制器中的每一个所服务的应用程序接口(api)事件;以及响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,执行该crd控制器的相应的隔离模块。
62.示例2是示例1的方法,还包括:利用一个或多个crd控制器中的每一个的控制器元数据更新通知组件,其中,通知组件基于一个或多个crd控制器中的每一个的控制器元数据,对由一个或多个crd控制器中的每一个所观察到的/所协调的api事件执行监视。
63.示例3是示例2的方法,还包括:响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,将该crd控制器的指示发送到隔离模块接口,其中隔离模块接口使用一组api执行crd控制器相应的隔离模块,该组api便于一个或多个隔离模块中的每一个和服务之间的输入/输出操作。
64.示例4是示例1的方法,其中,一个或多个隔离模块中的每一个都与该服务隔离。
65.示例5是示例1的方法,其中,服务包括在容器编排引擎的控制面上执行的控制器管理器服务。
66.示例6是示例1的方法,其中,服务包括在与容器编排引擎的控制面上执行的控制器管理器服务分离的服务。
67.示例7是示例1的方法,还包括:使用垂直自动伸缩器(autoscaler)监视在其上托管一个或多个隔离模块的pod的资源消耗;以及响应于确定需要额外的资源,向pod分配额外资源。
68.示例8是一种系统,其包括:存储器;以及可操作地耦接到该存储器的处理设备,该处理设备用于:将在运行时间在群集中创建的一个或多个定制资源定义(crd)控制器中的每一个编译到相应的隔离模块中以生成一个或多个隔离模块,其中,一个或多个隔离模块都托管在服务中;监视由一个或多个crd控制器中的每一个所服务的应用程序接口(api)事件;以及响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,执行该crd控制器中的相应的隔离模块。
69.示例9是示例8的系统,其中,处理设备还用于:利用一个或多个crd控制器中的每一个的控制器元数据更新通知组件,其中,通知组件基于一个或多个crd控制器中的每一个的控制器元数据对由一个或多个crd控制器的中的每一个所观察/所协调的api事件执行监视。:
70.示例10是示例9的系统,其中,处理设备还用于:响应于检测到由一个或多个crd控
制器中的crd控制器所服务的api事件,将该crd控制器的指示发送到隔离模块接口,其中,该隔离模块接口使用一组api执行该crd控制器相应的隔离模块,该组api便于一个或多个隔离模块中的每一个和服务之间的输入/输出操作。
71.示例11是示例8的系统,其中,一个或多个隔离模块中的每一个都与该服务隔离。
72.示例12是示例8的系统,其中,服务包括在容器编排引擎的控制面上执行的控制器管理器服务。
73.示例13是示例8的系统,其中,服务包括从与在容器编排引擎的控制面上执行的控制器管理器服务分离的服务。
74.示例14是示例8的系统,其中,处理设备还用于:使用垂直自动伸缩器监视在其上托管一个或多个隔离模块的pod的资源消耗;以及响应于确定需要额外的资源,向pod分配额外资源。
75.示例15是一种系统,包括存储器;以及处理设备,其可操作地耦接到存储器,该处理设备用于:响应于crd控制器的创建,将crd控制器编译到相应的隔离模块中,该相应的隔离模块与一个或多个其他隔离模块一起托管在服务上;利用crd控制器的控制器元数据更新服务的通知组件,通知组件基于控制器元数据监视由crd控制器所服务的应用程序接口(api)事件;以及响应于检测到由crd控制器所服务的api事件,通过隔离模块接口,执行crd控制器相应的隔离模块,其中,在相应的隔离模块不执行的同时,crd控制器不作为后台进程运行。
76.示例16是示例15的系统,其中,crd控制器的控制器元数据指示由crd控制器所服务的api事件。
77.示例17是示例16的系统,其中,处理设备还用于:响应于检测到由crd控制器所服务的api事件,将该crd控制器的指示发送到隔离模块接口,其中,隔离模块接口使用一组api执行该crd控制器相应的隔离模块,该组api便于隔离模块和服务之间的输入/输出操作。
78.示例18是示例15的系统,其中,隔离模块将crd控制器与服务隔离。
79.示例19是示例15的系统,其中,服务包括在容器编排引擎的控制面上执行的控制器管理器服务。
80.示例20是示例15的系统,其中,隔离模块包括网络组装模块(wasm)。
81.示例21是示例15的系统,其中,处理设备还用于:使用垂直自动伸缩器监视在其上托管隔离模块的pod的资源消耗;以及响应于确定需要额外的资源,向pod分配额外资源。
82.示例22是一种非暂时性计算机可读介质,具有存储其上的指令,该指令当由处理设备执行时,使得处理设备:响应于crd控制器的创建,由处理设备将crd控制器编译到相应的隔离模块中,该相应的隔离模块与一个或多个其他隔离模块一起托管在服务上;利用crd控制器的控制器元数据更新服务的通知组件,通知组件基于控制器元数据监视由crd控制器服务的应用程序接口(api)事件;以及响应于检测到由crd控制器所服务的api事件,通过隔离模块接口,执行crd控制器相应的隔离模块,其中,在相应的隔离模块不执行的同时,crd控制器不作为后台进程运行。
83.示例23是示例22的非暂时性计算机可读介质,其中,crd控制器的控制器元数据指示由crd控制器所服务的api事件。
84.示例24是示例23的非暂时性计算机可读介质,其中,处理设备还用于:响应于检测到由crd控制器所服务的api事件,将该crd控制器的指示发送到隔离模块接口,其中,隔离模块接口使用一组api执行该crd控制器相应的隔离模块,该组api便于隔离模块和服务之间的输入/输出操作。
85.示例25是示例22的非暂时性计算机可读介质,其中,隔离模块将crd控制器与服务隔离。
86.示例26是示例22的非暂时性计算机可读介质,其中,服务包括在容器编排引擎的控制面上执行的控制器管理器服务。
87.示例27是示例22的非暂时性计算机可读介质,其中,隔离模块包括网络组装模块(wasm)。
88.示例28是示例22的非暂时性计算机可读介质,其中,处理设备还用于:使用垂直自动伸缩器监视在其上托管隔离模块的pod的资源消耗;以及响应于确定需要额外的资源,向pod分配额外资源。
89.示例29是一种装置,其包括:用于将在运行时间在群集中创建的一个或多个定制资源定义(crd)控制器中的每一个编译到相应的隔离模块中以生成一个或多个隔离模块的部件,其中,一个或多个隔离模块都托管在服务中;用于监视由一个或多个crd控制器中的每一个所服务的应用程序接口(api)事件的部件;以及用于响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,执行该crd控制器的相应的隔离模块的部件。
90.示例30是示例29的装置,还包括:用于利用一个或多个crd控制器中的每一个的控制器元数据更新通知组件的部件,其中,通知组件基于一个或多个crd控制器中的每一个的控制器元数据,对由一个或多个crd控制器中的每一个所观察到的/所协调的api事件执行监视。
91.示例31是示例30的装置,还包括:用于响应于检测到由一个或多个crd控制器中的crd控制器所服务的api事件,将该crd控制器的指示发送到隔离模块接口的部件,其中隔离模块接口使用一组api执行crd控制器相应的隔离模块,该组api便于一个或多个隔离模块中的每一个和服务之间的输入/输出操作。
92.示例32是示例29的装置,其中,一个或多个隔离模块中的每一个都与服务隔离。
93.示例33是示例29的装置,其中,服务包括在容器编排引擎的控制面上执行的控制器管理器服务。
94.示例34是示例29的装置,其中,服务包括在容器编排引擎的控制面上执行的控制器管理器服务。
95.示例35是示例29的装置,其中,一个或多个隔离模块中的每一个都包括网络组装模块(wasm)。
96.除非另有特别说明,诸如“接收”“路由”“更新”“提供”等等的术语是指由计算设备执行或实施的动作和过程,其操纵并将在计算设备的寄存器和存储器内表示为物理(电子)量的数据转换为在计算设备存储器或寄存器或其他这种信息存储、传输或显示设备内类似表示为物理量的其他数据。另外,本文中使用的术语“第一”“第二”“第三”“第四”等是在不同要素当中作为区分的标签,并且不一定根据其数字指定具有顺序意义。
97.本文描述的示例还涉及用于执行本文描述的操作的装置。该装置可以是为所需目
的而专门构造的,或者其可以包括由存储在计算设备中的计算机程序选择性地编程的通用计算设备。这种计算机程序可以存储在计算机可读的非暂时性存储介质中。
98.本文描述的方法和例示性示例与任何特定的计算机或其他装置没有内在联系。可以根据本文描述的教导使用各种通用系统,或者可以证明构建更专门的装置来执行所需的方法步骤是方便的。各种这些系统的所需结构将出现如上文的描述中所阐述的那样。
99.上文的描述旨在例示性,而非限制性。尽管已经参照具体的例示性示例描述了本公开,但将认识到,本公开并不限于所描述的示例。本公开的范围应参照权利要求以及权利要求授予的等同物的全部范围来确定。
100.如本文所使用的,单数形式“一”“一个”和“该”意在也包括复数形式,除非上下文清楚地指示其他。将进一步理解,术语“包括”“组成”“包含”和/或“涵盖”在本文使用时,指明所陈述的特征、整体、步骤、操作、元素和/或组件的存在,但不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其分组的存在或添加。因此,本文使用的术语仅用于描述特定实施例的目的,而不是为了限制。
101.还应注意的是,在一些替换实施例中,所指出的功能/行为可以在图中指出的顺序之外发生。例如,取决于所涉及的功能/行为,连续示出的两个图实际上可以基本上同时执行,或者有时可以以相反的顺序执行。
102.虽然以特定的顺序描述方法操作,但应当理解,可以在描述的操作之间执行其他操作,描述的操作可以被调整从而它们在稍微不同的时间发生,或者描述的操作可以分布在系统中,该系统允许以与处理相关的各种间隔发生处理操作。
103.各种单元、电路或其他组件可以被描述或宣称为“配置为”或“可配置为”执行任务或多个任务。在这种上下文中,短语“配置为”或“可配置为”通过指示单元/电路/组件包括在操作期间执行任务或多个任务的结构(例如,电路)来暗示结构。因此,即使在指定的单元/电路/组件当前未操作(例如,未开启)时,也可以说单元/电路/组件被配置为执行任务,或可配置为执行任务。利用“配置为”或“可配置为”语言使用的单元/电路/组件包括硬件—例如,存储可执行的程序指令以实施操作的电路、存储器等。详述单元/电路/组件“配置为”执行一个或多个任务,或“可配置为”执行一个或多个任务。此外,“配置为”或“可配置为”可以包括通用结构(例如,通用电路),该通用结构由软件和/或固件(例如,fpga或执行软件的通用处理器)操纵,以能够执行待解决的(多个)任务的方式操作。“配置为”还可以包括调整制造过程(例如,半导体制造设施)以制造适应于实施或执行一个或多个任务的设备(例如,集成电路)。“可配置为”明确地意指不适用于空白介质、未编程处理器或未编程通用计算机、或未编程可编程逻辑设备、可编程门阵列或其它未编程设备,除非伴随着赋予未编程设备被配置为执行所公开的(多个)功能的能力的编程介质。
104.为了解释的目的,上述描述已经参照具体实施例进行了描述。然而,上述例示性讨论并不是为了详尽或将本发明限制在所公开的精确形式中。鉴于上述教导,许多修改和变体是可能的。选择和描述这些实施例是为了最好地解释实施例的原理及其实际应用,从而使本领域其他技术人员能够最好地利用这些实施例和可能适合于所设想的特定用途的各种修改。因此,本实施例被认为是例示性的,而不是限制性的,并且本发明不限于本文给出的细节,而是可以在所附权利要求的范围和等效物内进行修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1