一种公共云容器实例创建方法与流程

文档序号:29850039发布日期:2022-04-30 07:26阅读:143来源:国知局
一种公共云容器实例创建方法与流程

1.本说明书一个或多个实施例涉及计算机应用技术领域,尤其涉及一种公共云容器实例创建方法。


背景技术:

2.容器技术是一种操作系统层虚拟化技术,利用容器技术可以在一台物理主机上虚拟出多个独立的、互不干扰的容器,每个容器都为运行在该容器内的应用提供了独立的应用运行环境。随着云计算服务的发展,有些提供云计算服务的云平台提供了公共云场景下的容器服务,用户可以在云平台创建并使用容器实例。
3.对于每个云平台上的容器实例而言,需要使其具有网络传输能力。由于云平台上的容器实例被创建在用于计算的服务器中(下文称之为计算节点),而计算节点一般不能和用户的局域网通信,因此,容器实例一般需要借助于云平台的其他云服务,比如专有网络(virtual private cloud,vpc),以通过vpc创建一个虚拟接口,使得容器实例的流量可以通过该虚拟接口传输到用户设备上。
4.而相关技术中在创建容器实例时,需要在容器实例对应的用户vpc的网段内创建一个虚拟接口,而每个虚拟接口创建时间较长,使得容器无法快速创建。


技术实现要素:

5.有鉴于此,本说明书一个或多个实施例提供一种公共云容器实例创建方法。
6.根据本说明书一个或多个实施例的第一方面,提供一种公共云容器实例创建方法,应用于计算节点,所述计算节点预先配置有容器实例管理组件及虚拟网卡管理组件;所述计算节点关联有网关集群,所述网关集群配有计算节点上的容器实例能够使用的虚拟接口,不同虚拟接口连接于配置于专有网络vpc服务器的不同用户vpc,任一虚拟接口用于使计算节点的容器实例能够访问该虚拟接口连接的用户vpc;所述方法包括:
7.容器实例管理组件接收容器实例创建请求,并根据容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求;
8.虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则;所述转发规则包括,生成的虚拟网卡发送的报文,转发至关联的服务器集群,并通过连接于该用户vpc的虚拟接口转发给用户;
9.容器实例管理组件根据容器实例创建请求,启动容器虚拟机,将获取的虚拟网卡作为启动的容器虚拟机的网卡,并在启动的虚拟机上创建容器实例。
10.根据本说明书一个或多个实施例的第二方面,提出了一种容器服务系统,所述容器服务系统包括至少一个计算节点和一个网关集群;所述计算节点用于承载容器实例,计算节点和网关集群相关联;所述网关集群配有计算节点上的容器实例能够使用的虚拟接口,不同虚拟接口连接于配置于vpc服务器的不同用户vpc,任一虚拟接口用于使计算节点的容器实例能够访问该虚拟接口连接的用户vpc;
11.所述计算节点执行:
12.容器实例管理组件接收容器实例创建请求,并根据容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求;
13.虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则;所述转发规则包括,生成的虚拟网卡发送的报文,转发至关联的服务器集群,并通过连接于该用户vpc的虚拟接口转发给用户;
14.容器实例管理组件根据容器实例创建请求,启动容器虚拟机,并将获取的虚拟网卡作为启动的容器虚拟机的网卡,并在启动的虚拟机上创建容器实例。
15.根据本说明书一个或多个实施例的第三方面,提出了一种计算节点,所述计算节点用于承载容器实例;所述计算节点预先配置有容器实例管理组件及虚拟网卡管理组件;所述计算节点关联有网关集群,所述网关集群配有计算节点上的容器实例能够使用的虚拟接口,不同虚拟接口连接于配置于专有网络vpc服务器的不同用户vpc,任一虚拟接口用于使计算节点的容器实例能够访问该虚拟接口连接的用户vpc;
16.所述计算节点中各个组件执行以下方法,实现公共云容器实例的创建:
17.容器实例管理组件接收容器实例创建请求,并根据容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求;
18.虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则;所述转发规则包括,生成的虚拟网卡发送的报文,转发至关联的服务器集群,并通过连接于该用户vpc的虚拟接口转发给用户;
19.容器实例管理组件根据容器实例创建请求,启动容器虚拟机,并将获取的虚拟网卡作为启动的容器虚拟机的网卡,并在启动的虚拟机上创建容器实例。
20.根据本说明书实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如本说明书实施例所述的公共云容器实例创建方法。
21.根据本说明书实施例的第五方面,提供一种计算机程序,所述计算机程序被运行时实现如本说明书实施例所述的公共云容器实例创建方法。
22.本说明书实施例提供一种公共云容器实例创建方法,通过为计算节点关联网关集群,并预先在网关集群上设置多个连接与不同用户vpc的虚拟接口;在计算节点上的容器实例管理组件接收到容器实例创建指令的情况下,向计算节点上的虚拟网卡管理组件发送虚拟网卡获取请求,并使得虚拟网卡管理组件生成虚拟网卡,设置转发规则,使得该虚拟网卡的流量可以转发给容器实例创建指令发起用户的vpc对应的虚拟接口,将该虚拟网卡作为启动的容器虚拟机的网卡,并在启动的容器虚拟机上创建容器实例。这样,通过使用关联的网关集群上预先配置的连接于用户vpc的虚拟接口,在创建容器实例时无需获取虚拟接口,使得容器实例创建所需要耗费的时间减少。
23.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
24.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实
施例,并与说明书一起用于解释本说明书的原理。
25.图1a是本说明书示出的一种相关技术中容器虚拟机与用户vpc通信的示意图。
26.图1b是本说明书根据一示例性实施例示出的一种中容器虚拟机与用户vpc通信的示意图。
27.图2是本说明书根据一示例性实施例示出的一种公共云容器实例创建方法的流程图。
28.图3是本说明书根据一具体实施例示出的一种计算节点的结构示意图。
29.图4是本说明书根据一示例性实施例示出的一种计算节点的一种硬件结构图。
具体实施方式
30.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的方法的例子。
31.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
32.公共云一般指的是在网络上为用户提供云计算服务的云平台。云平台会为用户提供各种各样的云计算服务,比如容器服务。通过使用容器服务,云平台用户可以在云平台上创建并使用容器实例。
33.对于公共云场景下通过容器服务所创建的容器实例而言,由于公共云会为多个用户提供容器服务,而一个计算节点(节点)上会创建多个容器实例,那么一个计算节点上可能会有不同用户的容器实例。对于云平台而言,其需要为多个用户同时提供容器服务,这就需要创建的容器实例之间互不干扰。这就使得不同的容器实例之间需要通过隔离措施隔离起来,以防不同的容器实例之间互相影响。而常用的手段便是将容器实例创建在虚拟机中,每个虚拟机中只承载一个容器实例,而虚拟机具有隔离功能,这样,不同的容器实例便通过不同的虚拟机隔离起来。
34.用于承载容器实例的虚拟机在启动时,需要使得该虚拟机具备和用户设备通信的能力,这样才能确保容器实例和用户设备之间的通信。而用于承载容器实例的服务器(下文简称为计算节点)往往不能和用户设备所在的局域网进行通信,考虑到用户设备的局域网通常是基于vpc实现的,因此,为了确保容器实例可以和用户设备进行通信,在承载容器实例的虚拟机启动时,可以通过vpc服务器来对计算节点上的虚拟接口进行设置,使得该虚拟接口连接于特定的vpc,能使得容器服务的流量,通过该虚拟接口转发给用户设备(具体的结构如图1a所示)。其中,图中所示出的vpc服务器(也可以是vpc服务器集群)中配置有多个用户的vpc。
35.而获取虚拟接口需要依赖多个部件,且整个创建链路较长,导致获取虚拟接口耗
时较长,这增加了创建容器实例的时间。而且,在需要一次性为一个用户创建多个容器实例的情况下,由于需要为每个容器实例获取一遍虚拟接口(不同容器实例的虚拟接口不同)导致容器实例并发启动能力不强。
36.针对虚拟接口获取慢的问题,考虑到在一个用户存在多个容器实例的情况下,多个容器实例和用户设备通信可以使用相同的虚拟接口,并且为了提升速度,可以预先针对每个用户的vpc,配置一个可以直通该用户vpc的虚拟接口,其中,该虚拟接口可以基于弹性网络接口(elastic network interface,eni)实现,当然也可以基于其他手段实现,本说明书在此不做限制。
37.进一步地,考虑到计算节点上的可分配的虚拟接口数量有限,如果在计算节点上设置虚拟接口,会限制单个计算节点上可承载的容器实例的数量,因此,可以为计算节点关联一个网关集群(网关集群中设备的数量可以根据实际的虚拟接口数量需求及流量负载需求进行设置),在网关集群上配置虚拟接口,每个虚拟接口连接于一个用户的vpc,这样容器实例的流量便可以通过网关集群上的虚拟接口转发给用户设备。
38.在此基础上,由于虚拟接口位于网关集群,而容器实例位于计算节点,因此需要使得流量到达网关集群时,网关集群知道要将流量转发至哪个虚拟接口。为了解决上述问题,考虑可以在计算节点上设置虚拟网卡管理组件,该组件用于管理虚拟网卡并将设置的虚拟网卡的转发规则(即该虚拟网卡转出的流量转发至哪个虚拟接口)同步至网关集群,这样,可以为每个容器实例分配一个虚拟网卡,并为该虚拟网卡设置转发规则,这样可以使得容器实例的流量转发至对应的用户设备。上述所说的计算节点和网关集群的结构如图1b所示。需要说明的是,虽然图1a和图1b中只示出了三个容器实例和两个用户vpc,但是这并不代表对于容器实例、用户vpc以及每个用户可以创建的容器实例的数量的限制。其中,图中所示出的vpc服务器(也可以是vpc服务器集群)中配置有多个用户的vpc。
39.再进一步地,考虑到不同计算节点上可能有相同用户的容器实例,如果为每个计算节点关联不同的网关集群,将会使得需要的网关集群数量很多,且不同的网关集群上可能会分别设置连接于同一vpc的虚拟接口,这样便会导致资源的浪费。因此,可以使多个计算节点连接于同一个计算节点,可以节约资源。
40.本说明书实施例通过为计算节点关联网关集群,并预先在网关集群上设置多个连接与不同用户vpc的虚拟接口;在计算节点上的容器实例管理组件接收到容器实例创建指令的情况下,向计算节点上的虚拟网卡管理组件发送虚拟网卡获取请求,并使得虚拟网卡管理组件生成虚拟网卡,设置转发规则,使得该虚拟网卡的流量可以转发给容器实例创建指令发起用户的vpc对应的虚拟接口,将该虚拟网卡作为启动的容器虚拟机的网卡,并在启动的容器虚拟机上创建容器实例。这样,通过使用关联的网关集群上预先配置的连接于用户vpc的虚拟接口,在创建容器实例时无需获取虚拟接口,使得容器实例创建所需要耗费的时间减少。
41.此外,用于承载容器实例的虚拟机在启动时,需要使得该虚拟机具备足够的存储空间,以维持容器实例的正常运行。而承载容器实例的计算节点往往不具备足够的存储空间(一般服务器只有足够安装系统的空间),那么云平台上创建的容器实例就要借助于其他可以提供云存储空间的服务。具体而言,在承载容器实例的虚拟机启动时,从提供云存储空间的服务器获取一块云存储空间,作为虚拟机的存储,以保证虚拟机的正常运行。
42.同样的,由于获取云存储空间需要从提供云存储空间的服务器获取云存储空间,跨设备的交互使得获取云存储空间的速度较慢,远不及从本地获取云存储的速度,这也增加了容器实例创建所耗费的时间。同样的,在需要一次性为一个用户创建多个容器实例的情况下,由于需要为每个容器实例获取一遍云存储空间(不同的容器实例不能共用云存储空间),这导致容器实例并发启动能力不强。
43.为了解决获取云存储空间导致的容器实例创建较慢的问题,考虑到可以预先获取一个较大的云存储空间,作为该计算节点所能使用的存储空间,在创建容器实例时,从该较大的云存储空间内未该容器实例分配一块小的云存储空间,换言之,通过将大的云存储空间作为计算节点的本地存储空间,通过划分云存储空间的方式实现了云存储空间的快速创建。
44.接下来将对本说明书提供的公共云容器实例创建方法进行详细说明。
45.本说明书实施例示出的一种公共云容器实例创建方法,应用于计算节点,所述计算节点用于承载容器实例;所述计算节点预先配置有容器实例管理组件及虚拟网卡管理组件;所述计算节点关联有网关集群,所述网关集群配有计算节点上的容器实例能够使用的虚拟接口,不同虚拟接口连接于配置于专有网络vpc服务器的不同用户vpc,任一虚拟接口用于使计算节点的容器实例能够访问该虚拟接口连接的用户vpc。
46.其中,计算节点是云平台中用于承载容器实例的服务器,其在整个系统内,作为生产容器的节点。相对应的,容器服务系统内还有管控服务器,管控服务器相当于master节点,负责管理多个计算节点,接收并处理用户发送的请求等。
47.对于容器实例来说,一个容器实例也就是一个pod,一个pod中会包括多个容器(container)。容器的生产一般需要容器实例管理组件的参与。容器实例管理组件一般包括如kublet等的负责管理运行中的pod的组件,和如containerd等的容器运行时。容器实例管理组件独立于容器虚拟机存在,计算节点上可以只设置一个容器实例管理组件,该容器实例管理组件负责管理所有容器实例。
48.网关集群和虚拟接口相关描述详见前文,在此不再赘述。
49.此外还需要说明的是,是否预先针对某个用户的vpc创建连接于该vpc的虚拟接口,可以是根据该用户是否购买过容器服务来决定,比如某个用户已经购买了容器实例,则预先创建连接于该用户vpc(如果事先无该用户的vpc,还需要创建该用户的vpc)的虚拟接口。当然还可以根据其他的方式来决定是否创建虚拟接口。
50.对公共云容器实例创建方法所应用的计算节点的结构进行整体说明后,接下来将详细描述公共云容器实例创建方法的具体步骤。公共云容器实例创建方法的具体步骤如图2所示,包括以下步骤:
51.步骤201,容器实例管理组件接收容器实例创建请求,并根据容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求。
52.步骤203,虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则;所述转发规则包括,生成的虚拟网卡发送的报文,转发至关联的服务器集群,并通过连接于该用户vpc的虚拟接口转发给用户。
53.接下来将对步骤201和步骤203进行统一的说明。
54.首先对于容器实例管理组件接收容器实例创建请求进行说明。容器实例管理组件
接收的容器实例创建请求,可以是用户设备直接发送的,也可以通过容器服务管控服务器发送的。
55.在一些情况下,容器实例管理组件无法直接处理容器实例创建请求,需要通过其他组件将容器实例创建请求转换成容器实例管理组件可以处理的指令,这种情况下,容器实例管理组件包括容器实例管理子组件和创建请求代理子组件,容器实例管理子组件一般包括如kublet等的负责管理运行中的pod的组件,和如containerd等的容器运行时(即不存在创建请求代理子组件的情况下,容器实例管理组件和容器实例管理子组件的含义等同),创建请求代理子组件对接容器服务的管控服务器,用于接收容器实例创建请求;或者创建请求代理子组件直接对接用户设备,直接接收用户设备发送的容器实例创建请求。创建请求代理子组件接收到容器实例创建请求后,将容器实例创建请求转换为容器实例管理子组件可以处理的语句,并向容器实例管理子组件发送容器实例创建请求。
56.此外,在计算节点包括资源管理层和软件层的情况下(资源管理层用于管理服务器的硬件资源,软件层用于处理容器实例创建逻辑,资源管理层和软件层是相互隔离不互通的,比如神龙服务器就是这种结构),管控服务器或者用户设备发送的请求将会先到资源管理层,而kublet和containerd一般位于软件层,这种情况下,为了使软件层的kublet和containerd接收到发送到资源管理层的容器实例创建请求,容器实例管理组件也是包括容器实例管理子组件和创建请求代理子组件的。这种情况下,所述容器实例管理子组件、虚拟网卡管理组件及容器虚拟机配置于资源管理层,所述创建请求代理子组件配置于软件层;所述资源管理层和软件层预先配置有不同的ip地址。所述容器实例管理组件接收容器实例创建请求,包括:创建请求代理子组件接收管控服务器发送的容器实例创建请求,并根据ip通信协议,向容器实例管理子组件发送容器实例创建指令。
57.换言之,创建请求代理子组件位于资源管理层,负责接收容器实例创建请求,并通过ip通信协议(当然通过其他通信协议也可以),向容器实例管理子组件发送容器实例创建指令。这种前提下,对于容器实例创建请求和容器实例创建指令的不同之处来说,有的情况下,容器实例创建请求无法直接被容器实例管理子组件解析,创建请求代理子组件负责将容器实例创建请求转换为容器实例管理子组件可以解析的容器实例创建指令,并将容器实例创建指令发送给容器实例管理子组件;而有的情况下容器实例创建请求可以被容器实例管理组件解析,创建请求代理组件可以将容器实例创建请求直接转发给容器实例管理子组件,这种情况下,容器实例创建指令和容器实例创建请求的内容是相同的。
58.为了方便下文叙述,下文中无其他说明,所述的容器实例管理组件和容器实例管理子组件等同。
59.对容器实例管理组件如何接收容器实例创建指令后,再对容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求进行说明。
60.首先说明获取虚拟网卡的原因,容器虚拟机启动时,需要提前准备好该虚拟机的网卡,因此在启动容器虚拟机前,需要获取容器虚拟机的网卡,以使得容器虚拟机可以正常和用户设备交流。
61.其次对虚拟网卡管理组件的功能进行说明,网卡是通过虚拟网卡管理组件获得的,虚拟网卡管理组件具有两个个功能,分别是维护包含若干虚拟网卡的虚拟网卡池,设置转发规则以使得某个虚拟网卡的流量可以发给网关集群上的特定接口,并将该转发规则同
步给网关集群。
62.为了方便两个个功能的执行,可以将虚拟网卡管理组件分为两个子组件,分别是虚拟网卡生成子组件(维护虚拟网卡池,负责网卡的生成及回收等)和规则设置子组件(负责生成转发规则,并同步至网关集群),并且设置转发组件,转发组件负责根据规则设置子组件设置的规则,将虚拟网卡的流量转发至对应的虚拟接口。
63.在某些情况下规则设置子组件设置的规则无法直接被转发组件执行,转发组件还负责将设置的转发规则转换成转发组件可以执行的形式,比如虚拟交换机(open vswitch,ovs)流表等。
64.此外,转发组件和规则设置子组件控制着容器实例的流量转发,考虑到在计算节点遭到攻击时,为了防止攻击扩散到用户vpc网络内的其他设备,需要通过有效的隔离手段,将两者与计算节点中的其他内容隔离起来,比如可以将规则设置子组件和转发组件配置在网络虚拟机内,以通过虚拟机的强隔离手段将两者隔离起来,防止攻击的扩散。
65.在上述情况下,所述虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则,包括:虚拟网卡生成子组件在接收到虚拟网卡获取请求后,从虚拟网卡集合中获取一个未被使用的虚拟网卡;在获取到虚拟网卡后,规则设置子组件确定网关集群内连接于发起用户的vpc的虚拟接口,并设置转发规则。
66.换言之,虚拟网卡的获取,需要先由虚拟网卡生成子组件从虚拟网卡集合(也就是上文提及的虚拟网卡生成子组件所维护的虚拟网卡池)中获取一个未被使用过的虚拟网卡,再由规则设置子组件通过设置转发规则,将该虚拟网卡与容器实例创建请求发起用户的vpc连接起来,也就是说,通过转发规则,转发组件可以将该虚拟网卡发送的流量,转发至网关集群中连接于发起用户vpc的虚拟接口,以转发至用户vpc内部,再通过vpc内的虚拟交换机或虚拟路由器等,转发给用户设备。
67.还需要说明的是,在存在创建请求代理子组件的情况下,虚拟网卡获取请求,可以是创建请求代理子组件获取的,也可以是容器实例管理子组件获取的。
68.此外进一步地,考虑到网络虚拟机内的组件和外界通信的问题(容器虚拟机的流量需要发送给转发组件进而转发到网关集群,再通过网关集群的特定虚拟接口,转发给该用户的vpc内,进而转发给用户设备),网络虚拟机如果存在ip地址,且ip地址被泄露的情况下,将会导致攻击通过网络虚拟机的ip地址进一步逃逸出去,还是会导致攻击的扩散。因此为了防止攻击扩散,考虑到网络虚拟机内的转发组件其实是网卡组成的,可以通过设置,为容器虚拟机的虚拟网卡和转发组件的网卡之间设置流表转发规则,以使得虚拟网卡的流量可以转发给转发组件。
69.在对容器实例管理组件接收容器实例创建请求,以及虚拟网卡的获取过程进行说明后,将对容器实例创建请求中所包含的内容进行说明。
70.为了完成容器实例的创建,容器实例创建请求一般包含创建容器实例请求的发起用户的用户标识,及创建配置。用户标识即表明了容器实例创建指令的发起用户的用户标识,如果容器实例创建指令不是用户直接发送给容器实例管理组件的,那么容器实例创建指令的发起用户,指的是触发发送容器实例创建指令的消息的发起用户,比如如果是用户设备向创建请求代理组件发送容器实例创建请求,创建请求代理子组件再向容器实例管理组件发送容器实例创建指令,那么容器实例创建指令的发起用户实际指的是容器实例创建
请求的发起用户。
71.而容器实例的创建配置指的是容器实例的创建所必须要的配置信息,比如容器虚拟机对应的沙箱配置,cpu及内存大小等。
72.此外,在存在创建请求代理子组件,且虚拟网卡获取请求是创建请求代理子组件发送的情况下,容器实例创建指令会比容器实例创建请求的内容多出来,会包含虚拟网卡的标识信息。
73.步骤205,容器实例管理组件根据容器实例创建指令,启动容器虚拟机,并将获取的虚拟网卡作为启动的容器虚拟机的网卡,并在启动的虚拟机上创建容器实例。
74.首先需要对容器虚拟机的概念进行解释,容器虚拟机不同于上文所述的网络虚拟机或者下文将要提到的管理虚拟机,其并非普通的虚拟机。容器虚拟机是一种为了容器服务开发的轻量级虚拟机;此外,普通的虚拟机无法被容器实例管理组件控制启动,而容器虚拟机可以被容器实例管理组件控制启动。在实际使用中,可以使用runv或者其他的虚拟机作为容器虚拟机。
75.在容器虚拟机中创建容器实例,而并非直接在宿主机内创建的理由是:由于计算节点为多个用户提供容器服务,换言之,计算节点上会存在多个不同用户的容器实例,那么就需要将不同的容器实例分割开来,以防多个容器实例互相影响,因此,考虑虚拟机具有强隔离功能,通过容器虚拟机将不同的容器实例分割开来。
76.在对容器虚拟机进行说明后,还需要对整个过程进行说明。容器虚拟机启动后,容器实例管理组件需要向容器虚拟机内的生产容器的组件(容器生产组件)发送生产指令,以控制生产容器,生产指令中至少包含上文提及的配置信息,以及获取的虚拟网卡的信息。
77.通过使用预先在网关集群配置的连接于用户vpc的虚拟接口(每个vpc对应于至少一个虚拟接口,不同vpc连接的虚拟接口不同),在创建容器实例的情况下,无需重新获取虚拟接口,提升了创建容器实例的速度,且提高了并发效率。此外,同一用户的多个容器实例可以使用同样的虚拟接口,提升了资源利用效率。
78.除了上述的方法之外,本说明书还提供了解决无法快速获取云盘造成的实例无法快速启动问题的手段。
79.具体而言,所述计算节点还预先配置了云存储空间;所述方法还包括:容器虚拟机启动时,从预先配置的云存储空间中为启动的容器虚拟机分配存储空间。
80.也就是说,预先获取了大块云存储空间,将其作为本地云存储空间使用,容器虚拟机启动时,无需重新获取新的云存储空间,只需通过从大块的云存储空间中切分出一部分作为容器虚拟机的存储,换言之,像切分本地存储空间一样切分云存储空间,即可以减少获取云存储空间所耗费的时间,实现容器实例的快速创建。
81.此外,对于容器实例管理组件而言,还存在以下问题:一个服务器上的一个容器实例管理组件可以管理多个容器实例,这种多租架构导致容器实例管理组件不可能放在某个容器虚拟机内部,也就是说容器实例管理组件一般是安装在计算节点的系统上的。而考虑到容器实例管理组件一般都是一些开源组件,如果这些开源组件本身是不可靠的,那么这些开源组件将容易受到攻击,进而影响整个计算节点的安全。而又考虑到容器实例管理组件一般都会存在一些安全漏洞,比如kublet具有一些开放端口,而这些开放端口可能会泄露敏感信息,攻击者就可能会通过这些敏感信息进行攻击。那么如果直接将开源组件安装
在计算节点中而不加任何防护措施,将会由于开源组件的安全漏洞而导致计算节点受到安全威胁(也就是说攻击容易扩散到宿主机)。
82.为了解决上述问题,考虑到虚拟机具有隔离功能,可以将容器实例管理组件安装在单独的虚拟机(为了将该单独的虚拟机与容器虚拟机、网络虚拟机区分开,将该虚拟机称之为管理虚拟机)中。此外,在容器实例管理组件包括容器实例管理子组件和创建请求代理子组件的情况下,存在上述问题的是容器实例管理子组件,被配置在管理虚拟机内的也是容器实例管理子组件。
83.也就是说为了防止在容器实例管理组件遭受攻击时,攻击被扩散至容器实例管理组件内部,容器实例管理组件被配置在了管理虚拟机内。那么在此基础上,由于容器实例管理组件被管理虚拟机隔离起来,会产生容器实例管理组件如何和其他组件通信的问题。
84.接下来将来叙述,在容器实例管理组件被配置在管理虚拟机内的情况下,容器实例管理组件如何和外界通信的问题。
85.首先,在存在创建请求代理子组件的情况下,需要解决创建请求代理子组件和容器实例管理子组件之间的通信问题。考虑到宿主机和容器实例组件所在的管理虚拟机是两个逻辑意义上的设备,可以通过设备与设备之间通信的方式来进行通信,比如通过通信协议进行通信等。以ip协议为例而言,宿主机和管理虚拟机一般都可以设置ip地址,那么可以分别给管理虚拟机和计算节点(宿主机)设置不同的局域网ip地址,以使得两者之间可以通过ip协议进行通信。
86.其次,对于容器实例管理组件和容器虚拟机而言,考虑到容器虚拟机一般是一种轻量级虚拟机,无法设置ip地址,无法通过ip协议或其他通信协议进行通信;而且在容器虚拟机未启动前,容器虚拟机不存在,也不可能通过通信协议进行通信。考虑到可以在计算节点内设置一个可以转发容器实例管理指令的组件,来将容器实例管理组件的指令转发出去(该组件后文称之为容器生产代理组件)。这样解决了容器实例管理组件的通信问题。
87.换言之,对于启动容器虚拟机的过程而言,所述计算节点还配置有容器生产代理组件;所述容器实例管理组件根据容器实例创建请求,启动容器虚拟机,包括:容器实例管理组件通过管理虚拟机的特定端口,发送容器虚拟机启动指令;容器生产代理组件监听管理虚拟机的特定端口,根据管理虚拟机的特定端口发送的容器虚拟机启动指令,控制容器虚拟机启动。
88.换言之,对于生产容器的过程而言,所述在启动的虚拟机上创建容器实例,包括:容器实例管理组件通过管理虚拟机的特定端口,发送容器生产指令;容器生产代理组件监听管理虚拟机的特定端口,接收管理虚拟机的特定端口发送的生产指令;容器生产代理组件通过容器虚拟机启动后产生的域套接字(unix domain socket),将生产指令转发给容器虚拟机,在容器虚拟机内生产容器。
89.此外,在容器虚拟机启动后,除了通过容器生产代理组件转发生产指令外,还可以通过vsock实现容器实例管理组件和容器虚拟机之间的通信。
90.换言之,所述管理虚拟机预先配置有vsock标识;所述计算节点还配置有资源分配组件;所述方法还包括:在容器虚拟机启动后,所述管理虚拟机调用资源分配组件,为启动的容器虚拟机分配vsock标识;所述在启动的虚拟机上创建容器实例,包括:所述容器实例管理组件通过vsock,在启动的虚拟机上创建容器实例。此外,除了生产容器时,容器虚拟机
需要和管理虚拟机进行通信外,容器生产完成后,管理虚拟机内的容器实例管理组件仍然可以通过vsock向容器虚拟机内的运维代理组件发送消息,从而实现容器实例管理组件对于容器实例的管理。
91.接下来将通过一具体实施例来对本说明书提供的方法进行描述。
92.如图3所示,图3示出了具体实施例中计算节点的结构,以及该方法涉及的管控服务器和计算节点之间的通信关系,需要说明的是,虽然图3中只示出了1个容器虚拟机,但是这并不代表对本说明书中计算节点可以承载的容器实例的数量的限定。图中组件均为前文中解释过的组件,对于这些组件的功能不再赘述。
93.此外,除了图中示出的组件外,管理虚拟机内部的容器实例管理组件由两部分组成,分别是kublet,和容器运行时containerd,容器虚拟机内部还包括负责将指令翻译为容器虚拟机内的容器生产组件可以执行的命令的翻译组件,翻译组件和容器生产组件共同合作生产容器;容器虚拟机内还包括运维代理组件,运维代理组件与容器实例管理组件通过vsock通信(vsock通信在图中也未示出)。
94.还需要说明的是,软件层和资源管理层的实现可以通过分隔一个计算节点的计算资源实现,也可以是软件层使用计算节点本机上的所有资源,资源管理层使用的是计算节点扩展卡的资源。
95.容器虚拟机的网卡是通过ovs流表实现的,换言之容器虚拟机的虚拟网卡通过ovs流表将该容器虚拟机的流量转发至特定的虚拟接口,进而转发给发起用户的vpc。
96.在对图3的各个名词的含义进行说明后,下面将详细叙述容器实例的生产过程。
97.首先需要说明的是,计算诶点预先关联有网关集群,并且预先挂载了一块大的云存储空间。在需要生产容器实例的时候,容器服务管控服务器向资源管理层的创建请求代理子组件发送容器实例创建请求,创建请求代理子组件在接收到容器实例创建请求后,会先与软件层的虚拟网卡生成子组件交互,生产虚拟网卡(也就是虚拟网卡生成子组件从维护的虚拟网卡池中获取一个虚拟网卡),并且通过规则设置子组件设置虚拟网卡和网关集群上的虚拟接口(每个虚拟接口和一个用户的vpc相连)的连接信息,并通过转发组件将连接信息转换成ovs流表,这样虚拟网卡的流量便可以被转发组件转发至后端的网关集群。进而创建请求代理子组件与kubele交互,将完整的创建配置交给kubele。创建请求代理子组件调用位于管理虚拟机里的kubelet,将sandbox的配置发送给containerd,这里kubele会调用资源分配组件来分配vsock cid为每个用户的虚拟机提供不同的vsock标识用于vsock通讯(用于运维通信)。管理虚拟机内的containerd调用软件层上的创建请求代理组件(具体如何调用请参见上文)进而调用容器虚拟机生产sandbox(调用容器虚拟机之前需要先拉起容器虚拟机,换言之需要先启动容器虚拟机,启动容器虚拟机的过程中需要切分计算服务器挂载的大的云存储空间,获得一块小的云存储空间,从而为容器虚拟机提供存储能力),容器虚拟机内的容器生产组件生产容器。容器虚拟机启动后,网络数据面通过网络虚拟机的的规则设置子组件与转发组件与远端网关集群进行通讯,从而使得实例具备正常网络能力。
98.与前述方法的实施例相对应,本说明书还提供了容器服务系统及计算节点实施例。
99.首先,本说明书还包括一种容器服务系统,所述容器服务系统包括至少一个计算
节点和一个网关集群;所述计算节点用于承载容器实例,计算节点和网关集群相关联;所述网关集群配有计算节点上的容器实例能够使用的虚拟接口,不同虚拟接口连接于配置于vpc服务器的不同用户vpc,任一虚拟接口用于使计算节点的容器实例能够访问该虚拟接口连接的用户vpc;
100.所述计算节点执行:
101.容器实例管理组件接收容器实例创建请求,并根据容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求;
102.虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则;所述转发规则包括,生成的虚拟网卡发送的报文,转发至关联的服务器集群,并通过连接于该用户vpc的虚拟接口转发给用户;
103.容器实例管理组件根据容器实例创建请求,启动容器虚拟机,并将获取的虚拟网卡作为启动的容器虚拟机的网卡,并在启动的虚拟机上创建容器实例。
104.上述系统中各个组件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
105.本说明书还提供一种计算节点,所述计算节点用于承载容器实例;所述计算节点预先配置有容器实例管理组件及虚拟网卡管理组件;所述计算节点关联有网关集群,所述网关集群配有计算节点上的容器实例能够使用的虚拟接口,不同虚拟接口连接于配置于专有网络vpc服务器的不同用户vpc,任一虚拟接口用于使计算节点的容器实例能够访问该虚拟接口连接的用户vpc;
106.所述计算节点中各个组件执行以下方法,实现公共云容器实例的创建:
107.容器实例管理组件接收容器实例创建请求,并根据容器创建请求向虚拟网卡管理组件发送虚拟网卡获取请求;
108.虚拟网卡管理组件接收到虚拟网卡获取请求后,生成虚拟网卡,并设置转发规则;所述转发规则包括,生成的虚拟网卡发送的报文,转发至关联的服务器集群,并通过连接于该用户vpc的虚拟接口转发给用户;
109.容器实例管理组件根据容器实例创建请求,启动容器虚拟机,并将获取的虚拟网卡作为启动的容器虚拟机的网卡,并在启动的虚拟机上创建容器实例。
110.如图4所示,图4示出了实施例计算节点的一种硬件结构图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
111.处理器1010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
112.存储器1020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
113.输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
114.通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
115.总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
116.需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
117.本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本说明书实施例所述的公共云容器实例创建方法。
118.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
119.此外,本说明书还提供一种计算机程序,所述计算机程序被运行时实现如本说明书实施例所述的公共云容器实例创建方法。
120.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
121.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1