在虚拟机上运行一个或多个容器的技术的制作方法

文档序号:13518264阅读:468来源:国知局
在虚拟机上运行一个或多个容器的技术的制作方法

本文描述的示例通常与能够运行一个或多个容器的虚拟机(vm)有关。



背景技术:

用于数据中心的系统虚拟化可能包括被配置为托管虚拟机(vm)的数据中心的节点或服务器。彼此相关的vm可以针对执行与提供网络服务相关联的应用来提供强大的、独立的执行环境。每个vm可以运行针对可能与其他vm安全隔离的不同的客户端的操作系统(os)。此外,除了应用执行环境之外,每个vm可能具有自己的os内核。

通常称为“容器”的os虚拟化实现(如linux容器(lxc)或docker)可能针对与vm执行环境相比具有稍微弱化的隔离的应用提供多个执行环境。容器可以经由用于进程标识符(pid)、进程间通信(ipc)、存储等的单独的命名空间来维护一些隔离。此外,通过使用多个容器,与单独的vm执行环境相比,可以减少用于新的执行环境的存储器占用空间,因为os内核可以重用于多个容器。

附图说明

图1示出了示例第一系统。

图2示出了示例写时复制方案。

图3示出了示例第一进程。

图4示出了示例第二系统。

图5示出了示例第二进程。

图6示出了装置的示例框图。

图7示出了逻辑流程的示例。

图8示出了存储介质的示例。

图9示出了示例计算平台。

具体实施方式

如在本公开中所想到的,使用容器可以针对与vm执行环境相比具有稍微弱化的隔离的应用提供多个执行环境。但是容器可以允许在数据中心中更高密度的部署(例如,使用更少的主机资源的更多的执行环境),并且当容器被初始化用于执行应用时,与虚拟机相比可能具有相对较快的提供速度。当今数据中心的典型使用可以是出于灵活性重用vm和容器技术二者,来在vm上共同托管至少一组容器。例如,诸如的大型数据中心运营商可以使用基于linux+容器+内核的vm(kvm)来在一个节点或服务器中同时托管vm和容器,以供不同的使用。不同的使用可以包括在vm内运行一组容器。

在包括在vm内运行一组容器的共同托管操作环境中,可以请求可以加强和/或放宽安全/隔离的新的操作要求或特性。例如,客户端的业务方向和/或时间业务案例需求的变化可以要求更多或更强的隔离。针对更多或更强的隔离的要求可以引起在单独的vm中运行共同托管的容器。当操作特性使两个容器在单独的vm中运行时,可以发生相反的情况。对于这种相反的情况,可以做出用于放松高隔离度的操作特性的请求,使得两个容器可以由相同的vm共同托管,从而具有较低隔离/更高密度的操作特性。作为更高密度操作特性的结果,可以使用较少的节点/服务器资源。

用于改变在高隔离度和高密度之间的操作特性的典型解决方案是使用容器迁移技术以及vm复制。作为此解决方案的一部分,将两个共同托管的容器分为两个独立的vm,以提高隔离/安全性,以首先创建第二vm,引导第二vm,准备要拆分的容器和/或其管理器/管理程序,并最终迁移要从共同托管环境中的源容器拆分的容器中的至少一个的操作状态到在第二vm处运行的目标容器。与典型的实时vm迁移不同,容器迁移可以使用预存储器复制阶段以将其整个状态从源迁移到目标容器,并且因此可以在运行在第二vm的目标容器上直接恢复。但是,此容器迁移过程通常需要引导第二vm来启动目标容器的管理器/管理程序,并且此引导可能需要相对长或不可接受的时间(例如,通常为10-30秒)。正是关于这些挑战,需要本文描述的示例。

图1示出了示例系统100。在一些示例中,如图1所示,系统100包括主机节点101。主机节点101可以是能够托管诸如vm120的多个虚拟机(vm)的节点或服务器。托管可以包括提供组合的物理资源(未示出),诸如处理器、存储器、存储装置或在主机节点101处维护或可访问的网络资源。另外,在一些示例中,主机节点101可以是具有多个互连节点/服务器的数据中心中的节点/服务器,其可以被布置为针对这些类型的基于云的服务的一个或多个客户或消费者提供基础设施即服务(iaas)、平台即服务(paas)或软件即服务(saas)的服务。

在一些示例中,如图1所示,主机节点101可以具有主机操作系统(os)内核110。主机os内核110可以被布置为实现虚拟机管理器(vmm112)。vmm112可以被配置为作为kvm或管理程序(所谓的类型2模型)来操作以管理由主机节点101托管的用于vm的各种操作和/或配置。或者在另一个实施例中,vmm112可以在主机os内核110(所谓的类型1模型)下实现,其在该图中未示出,但是该整个概念仍然可以应用并且可以适用于本公开。另外,如图1所示,访客os内核121可以支持针对单个vm120的执行环境。对于这些示例,vm120可以被布置为运行包括容器122和容器124的至少一组容器。容器122能够执行一个或多个应用(app)123,并且容器124能够执行一个或多个app125。

根据一些示例,主机节点101还可以提供资源(例如,诸如网络输入/输出设备、存储器,网络端口等的网络资源)以支持能够将输入/输出分组路由到单独的vm和/或容器的虚拟交换机150。对于这些示例,虚拟交换机150可以在vm120处通过虚拟交换机126路由网络连接,以使得容器122和124能够接收或发送与执行相应应用123和125相关联的分组。vm120还可以包括容器管理器128以促进容器122或124的管理或控制。

在一些示例中,如下面更详细描述的,主机节点101的逻辑和/或特征可以(例如,vmm112)接收用于改变容器122或124中的至少一个的操作特性的请求,以使这些容器变得彼此隔离(例如,为了增加安全性)。这些容器的隔离可以通过克隆vm120的主机节点101的逻辑和/或特征来实现,以得到图1所示的第二vm作为vm120-c。vm120-c可以是vm120的单独实例。克隆之后,vm120-c可以被布置为至少在时间上与运行容器122和124的vm120并行地运行容器122和124。对于这些示例,如图1所示,vm120-c还可以包括访客os内核121-c、虚拟交换机126-c和容器管理器128-c,以支持用于容器122和124的执行环境。

根据一些示例,容器的隔离可以包括切换用于容器124的网络连接的主机节点101(例如,虚拟交换机150)的逻辑和/或特征。用于容器124的网络连接的切换可以使得与执行app125的容器124相关联的输入/输出分组从vm120处的虚拟交换机126被重路由到现在经历vm120-c处的虚拟交换机126-c以到达执行app125并且在vm120-c处运行的容器124。然而,没有网络连接被路由到执行app123并且在vm120-c处运行的容器122。此外,为了完成在vm120处容器124与容器122的隔离,诸如虚拟交换机126之类的主机节点101的逻辑和/或特征可以丢弃在切换用于容器124的网络连接之后由容器124执行的app125所生成的输出分组。此外,为了完成在vm120-d处容器122与容器124的隔离,虚拟交换机126-c可以丢弃由容器122执行的app123所生成的输出分组。由于没有分组被路由到在vm120处运行的容器124和在vm120-c运行的容器122,并且所有输出分组都从这些容器中被丢弃,因此它们可以被称为“僵尸”容器。此外,在一些示例中,容器管理器128和128-c可以彼此通信,以指示由哪些vm托管的哪些容器是僵尸容器以帮助促进该拆分过程。可替代地,vmm112的逻辑和/或特征能够在容器管理器128和128-c之间中继信息,以指示哪些容器是相应vm处的僵尸容器。

此外,如下面更详细描述的,主机节点101(例如,vmm122)的逻辑和/或特征可以实现写时复制(cow)机制,以使vm120-c最初共享与vm120相同的存储器页面以进一步减少供应时间,同时最终使用来自被供应以在vm120中运行容器122的原始分配的存储器的不同的已分配的存储器以用于在虚拟机120-c中运行容器124。cow机制可以响应于由在vm120-c处的容器124执行app125而被实现,引起对克隆的存储器页面的修改或尝试写入。

在一些示例中,vm120和120-c可以继续并行运行容器122和124。这些容器的并行运行可以使主机节点101能够从高隔离操作特性快速转换到更高密度的操作特性。对于这些示例,响应于接收到针对更高密度和更小隔离的请求,vmm112可以使用典型的容器迁移技术使容器124迁移回vm120。vmm112然后可以关闭vm120-c。

根据一些示例,不是继续运行在vm120处的僵尸容器124和在vm120-c的僵尸容器122,相应的容器管理器128和128-c可以停止用于这些僵尸容器的所有执行线程。如下面更详细描述的,分配给这些停止的容器的存储器可以被回收或分配被移除以释放存储器以用于主机节点101的其它用途。其它用途可以包括将存储器分配给其他vm、其他容器和/或其他虚拟元件,例如虚拟交换机150。

图2示出了示例写时复制(cow)方案200。在一些示例中,cow方案200可以由诸如vmm112之类的主机节点101的逻辑和/或特征来执行,以使vm120-c使用不同的已分配的存储器来运行容器124。对于这些示例,cow方案200可以包括大幅节省在vm120和120-c同时运行容器122和124的初始时刻分配的存储器占用空间或存储器。换句话说,针对最初分配或提供给vm120以用于运行容器122和124的存储器(例如,存储器页面),存储器占用空间或存储器分配被克隆。然后,响应于在vm120-c处运行的容器122或124写入或尝试修改一个或多个克隆的存储器页面,vmm112可能使得这些容器使用与向vm120的最初分配的存储器不同的存储器。此外,响应于在vm120处运行的容器122或124写入或尝试修改一个或多个克隆的存储器页面,vmm112可以使这些存储器容器也使用不同的存储器。

在一些示例中,cow方案200可以包括使用诸如扩展页表(ept)之类的多级页表。为了简化对多级页表的使用的描述,使用两级页表作为图2所示的cow方案200的示例。用于ept1的两级页表可以包括页目录条目(pde)表210和页表条目(pte)表212和214。ept1、vm120和120-c可以初始地共享存储器页面205,包括p1、p2和p3。这些存储器页面可以使用ept1用于存储器寻址。vmm112可以修改ept1以将包含在存储器页面205中的所有存储器设置为只读。当由运行在vm120或120-c处的容器执行的应用尝试写入诸如p2之类的存储器页面205时,vmm112可以将存储器页面p2的数据内容复制到存储器页面p2'。p2'可以是用于由vm120或120-c使用以运行容器122和/或124的一个或多个不同的已分配的存储器页面215的一部分。vmm112可以创建包括pde表220和pte表222的ept2用于存储器地址映射到存储器页面215。

图3示出了示例进程300。在一些示例中,进程300可以用于克隆运行容器的vm,以便隔离用于一个或多个容器的执行环境。对于这些示例,如图1所示的系统100的元件(例如,主机节点101、vmm112、虚拟交换机150、vm120或vm120-c)可以与进程300有关。另外,如图2所示的cow方案200也可以与进程300有关。然而,示例进程300不限于使用图1-2所示的系统100或cow方案200的元件的实现方式。

从进程3.1(克隆vm)开始,主机节点101(例如vmm112)的逻辑和/或特征可以克隆vm120以创建vm120-c作为vm120的单独实例。vm120-c可以被布置为至少暂时地与运行这些容器的vm120并行地运行容器122和124。在一些示例中,vm120和120-c可以在克隆进程中至少暂时地停止。如下所述,当cow机制被实现时,克隆进程还可以包括克隆所有ept分页结构以使得vm120-c至少暂时地共享与vm120相同的已分配的系统存储器。

移动到进程3.2(交换网络连接),主机节点101(诸如,虚拟交换机150)的逻辑和/或特征可以切换在vm120处运行的容器124的网络连接,以使得与执行app125的容器124相关联的输入/输出分组从vm120被重路由到vm120-c。在路由信息改变之后,vmm112可以使vm120和120-c恢复运行共同托管的容器122和124。

移动到进程3.3(丢弃输出分组),被提供给vm120(例如虚拟交换机126)的逻辑和/或特征可以丢弃在网络连接的切换到vm120-c之后由在vm120上运行的容器124执行的app125所生成的输出分组。由于没有输入/输出分组被路由到或自用于容器124的vm120,在一些示例中,在vm120处于这种类型的操作状态的情况下,容器124可以被认为是僵尸容器。

移动到进程3.4(丢弃输出分组),提供给vm120-c(例如虚拟交换机126-c)的逻辑和/或特征可以丢弃由在vm120-c上运行的容器122执行的app123所生成的输出分组。由于没有输入/输出分组被路由到用于容器122的vm120-c,在一些示例中,在vm120-c处处于这种类型的操作状态的同时,容器122也可以被认为是僵尸容器。

移动到进程3.5(实现cow机制),主机节点101(诸如vmm112)的逻辑和/或特征可以实现类似于cow方案200的cow机制。在一些示例中,vmm112可以使vm120-c响应于由容器124执行的app125写入到一个或多个克隆的存储器页面来使用不同已分配的存储器以用于运行容器124。vmm112还可以使vm120响应于由容器122执行的app123对一个或多个克隆的存储器页面的写入而使用不同的已分配的存储器以用于运行容器122。在vm120-c处的僵尸容器122和vm120处的僵尸容器124也可以尝试写入克隆的存储器页面,直到已经处理了用于容器124的网络连接的切换之后接收的所有输入分组。cow机制可能用于或不用于这些僵尸容器的这些写入。在一些示例中,如在进程3.3-3.5周围的虚线框所示,由vm120、vm120-c或主机节点101上的逻辑和/或特征所描述的各种动作可以并行发生。

移动到进程3.6(密度请求),主机节点101(诸如vmm122)的逻辑和/或特征可以接收用于再次将容器122和124的操作特性改变为更高密度操作特性之一的请求。在一些示例中,较高密度的操作特性可以使得容器的隔离结束。

移动到进程3.7(迁移容器),主机节点101(例如,vmm112)的逻辑和/或特征或相应虚拟机120和120-c的容器管理器128和128-c可以使在vm120-c上运行的容器124迁移回vm120。对于这些示例,迁移回到vm120可以响应于针对在主机节点101处每个vm要运行的容器的密度增加的请求。典型的容器迁移技术可以用于包括实时迁移技术,在容器124实时迁移回到vm120期间,使得app125能够由容器124以不间断的方式执行。

移动到进程3.8(丢弃输出分组),提供给vm120-c(例如,虚拟交换机126-c)的逻辑和/或特征可以丢弃由在容器122(如果有)和容器124处执行的两个app123和125所生成的输出分组。

移动到进程3.9(停止容器),提供给vm120-c(例如容器管理器128-c)的逻辑和/或特征可以随后停止针对app123和125的所有执行线程,这可能引起有效地停止容器122和124在vm120-c上运行。

移动到进程3.10(回收/删除已分配的存储器),主机节点101(诸如,vm112)的逻辑和/或特征然后可以回收或移除被分配给在vm120-c上运行的容器122和124的存储器。该进程随后结束。

图4示出了示例系统400。在一些示例中,如图4所示,系统400可以包括通过网络140与目的地主机节点401耦合的主机节点101。对于这些示例,网络140可以是内部网络的一部分,其将主机节点101与包括目的地主机节点401的各种其他主机节点通信地耦合。这些互连的主机节点可以是向一个或多个客户或顾客提供网络服务的数据中心的一部分。

根据一些示例,可能发生对vm120的克隆,引起vm120-d运行执行app125的容器124,并且vm120运行执行app123的容器122,如上文针对图1-3所提到的。如下面更详细地描述的,对vm120的这种克隆可以是细粒度工作负载平衡过程的一部分,其还包括将vm120-c迁移到目的地主机节点401。对于这些示例,在相应vm120和120-c处的僵尸容器124和122可以被关闭,随后将vm120-c迁移到目的地主机节点401以释放存储器和/或其他供应资源(例如,处理,网络,存储等)。释放的存储器和/或其他供应的资源可以包括曾经用于在vm120处运行时支持执行app125的容器124的那些资源。

在一些示例中,主机节点101处的vmm112和诸如迁移管理器412和迁移管理器413之类的目的地主机节点401处的vmm412的逻辑和/或特征可以有助于将vm120-c从主机节点101迁移到目的地主机节点401。然后可以提供目的地节点401处的资源以支持vm120-c,例如虚拟交换机450,以及vm120-c在运行执行app125的容器124时可能使用的存储器、处理或存储资源。对于这些示例,运行容器124的vm120-c的迁移可以响应于将app125暴露给更大的供应资源池以处理输入/输出分组的需要。在其他示例中,vm120-c的迁移可以响应于执行app123的容器122在vm120处运行时以由于vm120-c的迁移而具有更多的资源可用的需要,vm120-c一旦被放置在主机节点101上则通过执行app125的容器124移除资源需求。

图5示出了示例进程500。在一些示例中,进程500可以用于克隆运行容器的vm,以便隔离用于一个或多个容器的执行环境,并且还将运行隔离容器的vm迁移到目标主机节点以用于工作负载再平衡。这样就有可能减少虚拟机实时迁移的占用空间,例如当分配的网络带宽不足以迁移具有预期的服务关闭要求的共同托管vm120时。在这种情况下,拆分共同托管容器可以满足严格的网络带宽要求。对于这些示例,如图1和4所示的系统100或400的元件(诸如,主机节点101、目的地主机节点401、虚拟交换机150、vm120、vm120-c或迁移管理器412)可以与进程400相关。然而,示例进程500不限于使用如图1或4的系统100或400的元件的实现方式。

从进程5.1(克隆vm)开始,主机节点101(诸如vmm112)的逻辑和/或特征可以克隆vm120以创建vm120-c作为vm120的单独实例。vm120-c可以被布置为至少暂时地与运行这些容器的vm120并行地运行容器122和124。

移动到进程5.2(交换网络连接),主机节点101(诸如虚拟交换机150)的逻辑和/或特征可以切换用于在vm120处运行的容器124的网络连接,以使得与执行app125的容器124相关联的输入/输出分组至少暂时地从vm120被重路由到vm120-c。

移动到进程5.3(丢弃输出分组),提供给vm120(例如,虚拟交换机126)的逻辑和/或功能,可以丢弃在网络连接切换到vm120-c之后由运行在vm120的容器124执行的app125所生成的输出分组。由于没有输入/输出分组被路由到或自用于容器124的vm120,在一些示例中,在vm120处处于这种类型的操作状态时,容器124可以被认为是僵尸容器。

迁移到进程5.4(丢弃输出分组),提供给vm120-c(例如虚拟交换机126-c)的逻辑和/或特征可以丢弃由在vm120-c处运行的容器122执行的app123所生成的输出分组。由于没有输入/输出分组被路由到用于容器122的vm120-c,在一些示例中,在vm120-c处处于这种类型的操作状态时,容器122也可以被认为是僵尸容器。

移动到进程5.5(停止僵尸容器)时,被提供给虚拟机120(例如容器管理器128)的逻辑和/或特征可以停止针对由僵尸容器124执行的app125的所有执行线程。这可以有效地停止僵尸容器124运行在vm120处。

迁移到进程5.6(回收/移除容器已分配的存储器),主机节点101(诸如vm112)的逻辑和/或特征然后可以回收或移除被分配给在vm120上运行的容器124的存储器。

移动到进程5.7(停止僵尸容器),被提供给vm120-c(例如容器管理器128-c)的逻辑和/或特征可以停止针对由僵尸容器122执行的app123的所有执行线程。这可以有效地停止僵尸容器122在vm120-c上运行。

移动到进程5.8(回收/移除容器已分配的存储器),主机节点101(诸如vm112)的逻辑和/或特征可以回收或移除被分配给在vm120-c上运行的容器122的存储器。

移动到进程5.9(初始化vm迁移),主机节点101(诸如迁移管理器412)的逻辑和/或特征可以发起vm120-c到目的地主机节点401的vm迁移。在一些示例中,迁移管理器412可以使用迁移管理器413在主机目的地节点401处初始化vm迁移。

移动到进程5.10(vm迁移),与迁移管理器413协作的迁移管理器412可以使分配给vm120-c的用于运行容器124和执行app125的存储器页面以及操作状态通过网络140迁移的到目的地主机节点401。在一些示例中,vm120-c的迁移可以是实时vm迁移,其可以引起app125的执行的简要关闭,因为vm120-c和容器124的操作状态信息被迁移到目的地主机节点401以用于在目的地主机节点401处恢复app125的执行。

移动到进程5.11(回收/移除容器和vm分配的存储器和其他资源),主机节点101(例如vm112)的逻辑和/或特征可以回收或移除被分配给在vm120-c处运行的容器122的存储器。vm112还可以回收或移除被分配给vm120-c的存储器以及被分配用于支持主机节点101上的vm120-c的其他供应的资源。然后进程结束。

图6示出了装置600的示例框图。虽然图6所示的装置600在某些拓扑中,具有有限数量的元件,但是可以理解的是,装置600可以针对给定的实施方式根据需要在替代拓扑中包括更多或更少的元件。

根据一些示例,装置600可以由电路620所支持,所述电路620被维护在被布置或提供以托管多个虚拟机的主机节点/服务器上。电路620可以被布置为执行一个或多个软件或固件实现的模块或部件622-a。值得注意的是,本文所使用的“a”和“b”和“c”以及类似的指示符旨在是表示任何正整数的变量。因此,例如,如果实现方式设置a=7的值,则用于部件622-a的完整的一组软件或固件可以包括部件622-1、622-2、622-3、622-4、622-5、622-6或622-7。所呈现的示例不受本上下文的限制,并且通篇使用的不同变量可以表示相同或不同的整数值。此外,这些“部件”中的至少一些可以是存储在计算机可读介质中的软件/固件,并且尽管部件在图6中示出为分立的框,但这并不将这些部件限制为存储在不同的计算机可读介质部件(例如,独立存储器等)中。

根据一些示例,电路620可以包括用于实现以下逻辑和/或特征的处理器或处理器电路,所述逻辑和/或特征可以包括被布置为便于对运行容器的集合的vm的克隆或者对vm/容器在主机节点/服务器之内或之间的迁移的一个或多个部件。如上所述,电路620可以是可以包括处理核心或元件的主机节点/服务器(例如,主机节点101)处的电路的一部分。包括一个或多个处理核心的电路可以是各种可商购的处理器中的任何一种,包括但不限于处理器;应用,嵌入式和安全处理器;处理器;ibm和cell处理器;core(2)corei3、corei5、corei7、xeon处理器;以及类似的处理器。根据一些示例,电路620还可以包括专用集成电路(asic),并且至少一些部件622-a可以被实现为asic的硬件元件。

根据一些示例,装置600可以是被配置为托管第一vm的节点的一部分,所述第一vm被布置为运行至少一组容器,所述至少一组容器包括能够单独地执行相应的第一应用和第二应用的第一容器和第二容器。对于这些示例,装置600可以包括克隆部件622-1。克隆部件622-1可由电路620执行以克隆第一vm以得到第二vm,所述第二vm被布置为至少暂时地与被布置为在第一vm处运行的第一和第二容器并行地运行第一容器和第二容器。对第一vm的克隆可以响应于经由隔离请求605接收到的隔离请求。

在一些示例中,装置600还可以包括重路由部件622-2。重路由部件622-2可以由电路620执行以切换用于被布置为在第一vm处运行的第二容器的网络连接,以使与能够执行第二应用的第二容器相关联的输入/输出分组从第一vm被重路由到第二vm。对于这些示例,输入/输出分组可以包括在输入/输出分组610中。这些输入/输出分组可以包括由第二应用生成的输入请求分组和得到的输出响应分组。

根据一些示例,装置600还可以包括丢弃部件622-3。丢弃部件622-3可以由电路620执行,并且可以包括第一丢弃部件,其用于丢弃在网络连接的切换之后由被布置为在第一vm处运行的第二容器执行的第二应用所生成的输出分组。丢弃部件622-3还可以包括第二丢弃部件,其用于由电路执行以用于丢弃由被布置为在第二vm处运行的第一容器执行的第一应用所生成的输出分组。

在一些示例中,装置600还可以包括复制部件622-4。复制部件622-4可以由电路620执行以实现cow机制,以使得第二vm响应于由第二容器执行的第二应用写入到一个或多个克隆的存储器页面来使用不同的已分配的存储器来运行第二容器。cow机制还可以使得第一vm响应于由第一容器执行的第一应用写入到一个或多个克隆的存储器页面而使用不同的已分配的存储器来运行第一容器。对于这些示例,cow机制可以类似于cow方案200,并且可以包括在cow机制630中。

根据一些示例,装置600还可以包括停止部件622-5。停止部件622-5可以由电路620执行,并且可以包括用于停止第一容器在第二vm处运行的第一停止部件和用于由电路执行以用于停止第二容器在第一vm处运行的第二停止部件。对于这些示例,停止第一容器和第二容器可以包括停止针对由这些容器执行的应用的所有执行线程。

在一些示例中,装置600还可以包括回收部件622-6。回收部件622-6可以由电路620执行以分别回收或移除被分配用于在第二vm和第一vm处运行第一容器和第二容器的已分配的存储器。对于这些示例,可以将回收或移除的已分配的存储器包括在回收/移除已分配的存储器635中。这种资源的释放可以响应于已经被包括在密度请求615中的工作负载平衡请求。

根据示例,装置600还可以包括迁移部件622-7。迁移部件622-7可由电路620执行以使第二vm被迁移到目的地节点。对于这些示例,第二vm到目标节点的迁移可以是实时迁移,并且用于到目的地节点的该实时迁移的信息可以被包括在vm迁移640中。而且,在一些示例中,迁移部件622-7能够使隔离的容器被迁移回托管容器的原始vm。对于这些示例,迁移部件622-7可以响应于可包括在密度请求(诸如密度请求615)中的节点的操作特性的改变而使第二容器从第二vm迁移到第一vm。容器迁移可以是实时迁移,并且可以通过容器迁移645来初始化。密度请求615除了引起迁移部件622-7使得第二容器的容器迁移之外,还可以使克隆部件622-1针对容器迁移使得第一容器和第二容器被布置为仅由第一vm运行。

本文包括代表用于执行所公开的架构的新颖方面的示例性方法的一组逻辑流程。虽然为了简化说明的目的,本文所示的一种或多种方法被示出和描述为一系列动作,但是本领域技术人员将理解和意识到,所述方法不受动作顺序的限制。一些动作可以根据其以与本文所示和所描述的其他动作不同的顺序发生和/或同时发生。例如,本领域技术人员将理解和意识到,方法可以替代地被表示为一系列相互关联的状态或事件,例如在状态图中。此外,新颖的实现方式可能不需要方法中所示出的所有动作。

逻辑流程可以用软件、固件和/或硬件来实现。在软件和固件实施例中,可以通过存储在至少一个非暂时计算机可读介质或机器可读介质(例如光学、磁性或半导体存储)上的计算机可执行指令来实现逻辑流程。实施例不受本上下文的限制。

图7示出了逻辑流程700的示例。逻辑流程700可以表示由本文所描述的一个或多个逻辑、特征或设备(例如装置600)执行的操作中的一些或全部。更具体地,逻辑流程700可以是由至少克隆部件622-1、重路由部件622-2或丢弃部件622-3实现的。

根据一些示例,框702处的逻辑流程700可以通过节点处的电路来克隆第一vm,所述第一vm被布置为运行至少一组容器,所述容器包括第一容器和第二容器,所述第一容器和第二容器能够单独地执行相应的第一和第二应用,克隆以得到第二vm,所述第二vm被布置为至少暂时地与在第一vm处运行的第一和第二容器并行地运行第一和第二容器。对于这些示例,克隆部件622-1可以克隆第一vm。

在一些示例中,框704处的逻辑流程700可以切换用于在第一vm处运行的第二容器的网络连接,以使与执行第二应用的第二容器相关联的输入/输出分组从第一vm被重路由到第二vm。对于这些示例,重路由部件622-2可以使得网络连接被切换。

根据一些示例,框706处的逻辑流程700可以丢弃在切换网络连接之后由在第一vm处运行的第二容器执行的第二应用所生成的输出分组。对于这些示例,包括在丢弃部件622-3中的第一vm处的第一丢弃部件可以使得输出分组被丢弃。

在一些示例中,框706处的逻辑流程700可以丢弃由在第二vm处运行的第一容器执行的第一应用所生成的输出分组。对于这些示例,包括在丢弃部件622-3中的第二vm处的第二丢弃部件可能使得输出分组被丢弃。

图8示出了存储介质800的示例。存储介质800可以包括制品。在一些示例中,存储介质800可以包括任何非暂时性计算机可读介质或机器可读介质,诸如光学、磁性或半导体存储。存储介质800可以存储各种类型的计算机可执行指令,诸如用于执行逻辑流程700的指令。计算机可读或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移动存储器或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。计算机可执行指令的示例可以包括任何合适类型的代码,例如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、面向对象的代码、可视代码等。这些示例不限于此。

图9示出了示例计算平台900。在一些示例中,如图9所示,计算平台900可以包括处理部件940、其他平台部件950或通信接口960。根据一些示例,计算平台900可以在节点/服务器中实现。节点/服务器能够通过网络耦合到其他节点/服务器,并且可以是数据中心的一部分,所述数据中心包括多个网络连接的节点/服务器,这些网络连接的节点/服务器被布置为托管vm,所述vm被布置为运行能够单独地执行一个或多个应用的容器。

根据一些示例,处理部件940可以执行用于装置600和/或存储介质800的处理操作或逻辑。处理部件940可以包括各种硬件元件、软件元件或两者的组合。硬件元件的示例可以包括设备、逻辑器件、部件、处理器、微处理器、电路、处理器电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(asic)、可编程逻辑器件(pld),数字信号处理器(dsp)、现场可编程门阵列(fpga)、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件元件的示例可以包括软件部件、程序、应用、计算机程序、应用程序、设备驱动程序、系统程序、软件开发程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定是否使用硬件元件和/或软件元件来实现示例可以根据任何数量的因素而变化,例如期望的计算速率、功率电平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束,如给定示例所希望的。

在一些示例中,其他平台部件950可以包括公共计算元件,诸如一个或多个处理器、多核处理器、协处理器、存储器单元、芯片组、控制器、外围设备、接口、振荡器、定时设备、视频卡、音频卡、多媒体输入/输出(i/o)部件(例如数字显示器)、电源等。存储器单元的示例可以包括但不限于以一个或多个更高速存储器单元形式的各种类型的计算机可读和机器可读存储介质,诸如只读存储器(rom)、随机存取存储器(ram)、动态ram(dram)、双数据速率dram(ddram)、同步dram(sdram)、静态ram(sram)、可编程rom(prom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪速存储器、诸如铁电聚合物存储器的聚合物存储器、双向存储器、相变或铁电存储器、氧化硅-氧化物-氮化物-氧化物-氧化硅(sonos)存储器、磁卡或光卡、诸如独立磁盘冗余阵列(raid)驱动器之类的设备阵列、固态存储器设备(例如,usb存储器)、固态驱动器(ssd)以及适于存储信息的任何其它类型的存储介质。

在一些示例中,通信接口960可以包括用于支持通信接口的逻辑和/或特征。对于这些示例,通信接口960可以包括根据各种通信协议或标准来进行操作以通过直接或网络通信链路或信道进行通信的一个或多个通信接口。直接通信可以经由使用在一个或多个行业标准(包括后代和变体)中描述的通信协议或标准(例如与pcie规范相关联的标准)来发生。网络通信可以经由使用诸如由ieee颁布的一个或多个以太网标准中描述的通信协议或标准来发生。例如,一个这样的以太网标准可以包括ieee802.3。网络通信也可以根据一个或多个openflow规范(如openflow硬件抽象api规范)来发生。

如上所述,计算平台900可以在数据中心的服务器/节点中实现。因此,如本文所描述的计算平台900的功能和/或特定配置可以在计算平台900的各种实施例中被包括或省略,如针对服务器/节点所适当期望的。

可以使用分立电路、专用集成电路(asic)、逻辑门和/或单芯片架构的任何组合来实现计算平台900的部件和特征。此外,计算平台900的特征可以使用微控制器、可编程逻辑阵列和/或微处理器或前述的任何组合来适当地实现。注意,硬件、固件和/或软件元件可以在本文被统称为或单独地称为“逻辑”或“电路”。”

应当意识到,图9的框图中示出的示例性计算平台900可以表示许多潜在实现的一个功能描述性示例。因此,在附图中描绘的块功能的划分、省略或包含不会推断用于实现这些功能的硬件部件、电路、软件和/或元件将必须在实施例中被划分、省略或包括。

至少一个示例的一个或多个方面可以通过存储在至少一个机器可读介质上的代表性指令来实现,所述指令表示处理器内的各种逻辑,当通过机器、计算设备或系统读取时,使得机器、计算设备或系统制造用于执行本文描述的技术的逻辑。称为“ip核”的这种表示可以存储在有形的、机器可读介质上,并被提供给各种客户或制造设施以加载到实际制造逻辑或处理器的制造机器中。

可以使用硬件元件、软件元件或两者的组合来实现各种示例。在一些示例中,硬件元件可以包括设备、部件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(asic)、可编程逻辑器件(pld)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、存储单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。在一些示例中,软件元件可以包括软件部件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定示例是否是使用硬件元件和/或软件元件实现的可以根据任何数量的因素而变化,诸如所需的计算速率、功率电平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束,如针对给定实现方式所期望的。

一些示例可以包括制品或至少一种计算机可读介质。计算机可读介质可以包括用于存储逻辑的非暂时性存储介质。在一些示例中,非暂时性存储介质可以包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等等。在一些示例中,逻辑可以包括各种软件元件,诸如软件部件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、api、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。

根据一些示例,计算机可读介质可以包括用于存储或维护指令的非暂时性存储介质,所述指令当由机器、计算设备或系统执行时,使得机器、计算设备或系统根据所述的示例来执行方法和/或操作。指令可以包括任何合适类型的代码,例如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码等。指令可以根据预定义的计算机语言、方式或语法来实现,以用于指示机器、计算设备或系统执行某一功能。指令可以使用任何合适的高级、低级、面向对象、可视、编译和/或解释的编程语言来实现。

可以使用表达“一个示例”或“示例”及其衍生词来描述一些示例。这些术语意味着结合该示例描述的特定特征、结构或特性包括在至少一个示例中。在说明书中的各个地方的短语“在一个示例中”的出现不一定都指代同一示例。

可以使用表达“耦合”和“连接”以及它们的衍生词来描述一些示例。这些术语不一定是意在作为彼此的同义词。例如,使用术语“连接”和/或“耦合”的描述可以指示两个或更多个元件彼此直接物理或电接触。然而,术语“耦合”也可以意味着两个或更多个元件彼此不直接接触,但仍然彼此协作或交互。

以下示例涉及本文公开的技术的其它示例。

示例1.一种示例装置可以包括节点处的电路,该电路被配置为托管被布置为运行至少一组容器的第一vm,所述至少一组容器包括能够单独地执行相应的第一应用和第二应用的第一容器和第二容器。该装置还可以包括克隆部件,其由电路执行以用于克隆第一vm以得到第二vm,所述第二vm被布置为至少暂时地与被布置为在第一vm处运行的第一和第二容器并行地运行第一容器和第二容器。该装置还可以包括重路由部件,其由电路执行以用于切换用于被布置为在第一vm处运行的第二容器的网络连接,以使与能够执行第二应用的第二容器相关联的输入/输出分组从第一vm被重路由到第二vm。该装置还可以包括第一丢弃部件,其由电路执行以用于丢弃在网络连接的切换之后由被布置为在第一vm处运行的第二容器执行的第二应用生成的输出分组。该装置还可以包括第二丢弃部件,其由电路执行以用于丢弃由被布置为在第二vm处运行的第一容器执行的第一应用生成的输出分组。

示例2.示例1的装置还可以包括复制部件,其由电路执行以用于实现cow机制,以使第二vm响应于由第二容器执行的第二应用写入到一个或多个克隆的存储器页面而使用不同的已分配的存储器用于运行第二容器。

示例3.示例2的装置,复制部件可以被包括在能够管理第一和第二vm的虚拟机管理器中。

示例4.根据示例2的装置,克隆部件可以响应于针对第一或第二容器中的至少一个容器的操作特性的变化而克隆第一vm,以使第一容器与第二容器隔离。

示例5.示例4的装置,操作特性的变化可以基于接收到针对隔离的请求,所述针对隔离的请求引起第一和第二应用由被布置为在单独的vm上运行的容器来执行的要求。

示例6.示例1的装置还可以包括第一停止部件,其由电路执行以用于停止第一容器在第二vm处运行。装置还可以包括第二停止部件,其由电路执行以用于停止第二容器在第一vm处运行。该装置还可以包括回收部件,其由电路执行以用于回收或移除被分配用于分别在第二和第一vm处运行第一和第二容器的已分配的存储器。

示例7.示例6的装置还可以包括迁移部件,其由电路执行以用于使第二vm迁移到目的地节点。对于这些示例,回收部件可以在将第二vm迁移到目的地节点之后,回收或移除被分配用于在第二vm处运行第二容器的已分配的存储器。

示例8.根据示例7的装置,迁移部件可以使得第二vm响应于用于平衡节点和目的地节点之间的工作负载的工作负载平衡请求而迁移到目的地节点。

示例9.示例6的装置还可以包括迁移部件,其由电路执行以用于使被布置为在第二vm处运行的第二容器从第二vm迁移到第一vm。对于这些示例,第一丢弃部件可以使得如下的输出分组被丢弃:在第二容器从第二vm迁移到第一vm期间当第一和第二容器运行于第二vm处时由第一和第二容器执行的第一和第二应用所生成的输出分组。此外,对于这些示例,第二停止部件可以在迁移之后停止第一和第二容器在第二vm处运行。

示例10.根据示例9的装置,迁移部件可以使得被布置为在第二vm处运行的第二容器响应于针对节点的操作特性的变化而被迁移到第一vm,所述针对节点的操作特性的变化使得克隆部件使第一和第二容器被布置为仅由第一vm运行。

示例11.根据示例10的装置,操作特性的变化可以基于由克隆部件接收到针对被布置为在节点处的每个vm上运行的容器的密度增加的请求。

示例12.示例1的装置还可以包括耦合到电路以呈现用户界面视图的数字显示器。

示例13.一种示例性方法可以包括通过节点处的电路来克隆被布置为运行至少一组容器的第一vm,所述至少一组容器包括能够单独地执行相应的第一和第二应用的第一容器和第二容器,克隆以得到第二vm,第二vm被布置为至少暂时地与在第一vm运行的第一和第二容器并行地运行第一和第二容器。该方法还可以包括切换用于在第一vm处运行的第二容器的网络连接,以使与执行第二应用的第二容器相关联的输入/输出分组从第一vm被重路由到第二vm。该方法还可以包括丢弃在切换网络连接之后由在第一vm处运行的第二容器执行的第二应用生成的输出分组。该方法还可以包括丢弃由在第二vm处运行的第一容器执行的第一应用生成的输出分组。

示例14.示例13的方法还可以包括使用cow机制来使得第一vm响应于由第一容器执行的第一应用写入到一个或多个克隆的存储器页面而使用不同的已分配的存储器用于运行第一容器。

示例15.示例14的方法还可以包括,响应于针对第一或第二容器中的至少一个容器的操作特性的变化而克隆第一vm,以使第一容器与第二容器隔离。

示例16.示例15的方法,操作特征的变化可以基于接收到针对隔离的请求,所述针对隔离的请求引起使得第一和第二应用由在单独的vm上运行的容器执行的要求。

示例17.示例13的方法还可以包括停止在第二vm处运行的第一容器。该方法还可以包括停止在第一vm处运行的第二容器。该方法还可以包括回收存储器或移除被分配用于分别在第二vm和第一vm处运行第一和第二容器的已分配的存储器。

示例18.示例17的方法还可以包括使第二vm迁移到目的地节点。该方法还可以包括在将第二vm迁移到目的地节点之后,回收存储器或移除被分配用于在第二vm处运行第二容器的已分配的存储器。

示例19.根据示例18的方法,将第二vm迁移到目的地节点可以响应于用于平衡节点和目的地节点之间的工作负载的工作负载平衡请求。

示例20.示例17的方法还可以包括将在第二vm运行的第二容器迁移到第一vm。该方法还可以包括丢弃如下的输出分组:在将第二容器从第二vm迁移到第一vm期间,由在第二vm处运行的第一和第二容器执行的第一和第二应用生成的输出分组。该方法还可以包括在迁移之后停止在第二vm处运行的第一容器和第二容器。

示例21.根据示例20的方法,迁移可以使得运行在第二vm处的第二容器响应于针对节点的操作特性的变化而被迁移到第一vm,所述针对节点的操作特性的变化使得第一和第二容器返回到仅由第一vm运行。

示例22.示例21的方法,操作特性的变化可以基于接收到针对在节点处每个vm上运行的容器的密度增加的请求。

示例23.至少一个机器可读介质的示例可以包括多个指令,所述指令响应于由服务器处的系统执行,可以使系统执行根据示例13至22中任一个的方法。

示例24.一种示例装置可以包括用于执行示例13至22中任一个的方法的单元。

示例25.至少一个机器可读介质的示例可以包括多个指令,所述指令响应于由节点处的系统执行,可以使系统克隆被布置为运行至少一组容器的第一vm,所述至少一组容器包括第一容器和第二容器,第一容器和第二容器能够单独地执行相应的第一和第二应用。克隆可以得到第二vm,所述第二vm被布置为至少暂时地与被布置为在第一vm处运行的第一和第二容器并行地运行第一和第二容器。所述指令还可以使系统切换用于被布置为在第一vm处运行的第二容器的网络连接,以使与能够执行第二应用的第二容器相关联的输入/输出分组从第一vm被重路由到第二vm。所述指令还可以使系统丢弃在网络连接的切换之后由被布置为在第一vm处运行的第二容器执行的第二应用所生成的输出分组。所述指令还可以使得系统丢弃由被布置为在第二vm上运行的第一容器执行的第一应用生成的输出分组。

示例26.示例25的至少一个机器可读介质,指令还可以使系统实现cow机制,以使得第二vm响应于由第二容器执行的第二应用写入到一个或多个克隆的存储器页面而使用不同的已分配的存储器用于运行第二容器。

示例27.示例26的至少一个机器可读介质,所述指令还可以使所述系统响应于针对所述第一或第二容器中的至少一个的操作特性的变化来克隆所述第一vm,以使所述第一容器与第二容器隔离。

示例28.示例27的至少一个机器可读介质,操作特性的变化可以基于接收到针对隔离的请求,所述针对隔离的请求引起使第一和第二应用由被布置为在单独的vm上运行的容器执行的要求。

示例29.示例25的至少一个机器可读介质,指令还可以使系统停止第一容器在第二vm处运行。指令还可以使系统停止第二容器在第一vm上运行。指令还可能使得系统回收或移除被分配用于分别在第二vm和第一vm处运行第一容器和第二容器的已分配的存储器。

示例30.示例29的至少一个机器可读介质,指令还可以使系统使第二vm迁移到目的地节点。所述指令还可以使所述系统在将所述第二vm迁移到所述目的地节点之后,回收或移除被分配用于在所述第二vm处运行所述第二容器的已分配的存储器。

示例31.示例30的至少一个机器可读介质,所述指令还可以使得系统响应于用于平衡节点和目的地节点之间的工作负载的工作负载平衡请求而将第二vm迁移到目的地节点。

示例32.示例29的至少一个机器可读介质,指令还可以使系统将被布置为在第二vm处运行的第二容器迁移到第一vm。所述指令还可以使系统使得如下的输出分组被丢弃:在所述第二容器从所述第二vm迁移到第一vm期间当所述第一和第二容器在所述第二vm处运行时由所述第一和第二容器执行的所述第一和第二应用所生成的输出分组。指令还可以使系统在迁移之后停止第一容器和第二容器在第二vm上运行。

示例33.示例32所述的至少一个机器可读介质,所述指令可以使所述系统响应于针对所述节点的操作特性的变化而将所述第二容器迁移到所述第一vm,所述针对所述节点的操作特性的变化使所述第一和第二容器由系统被布置为仅由第一vm运行。

示例34.示例33的至少一个机器可读介质,操作特性的变化可以基于如下指令,用于使得系统响应于接收到针对在节点处增加密度的请求而增加被布置为在节点处每个vm运行的容器的密度。

要强调的是,本公开的摘要被提供以符合37c.f.r.第1.72(b)节,要求可以让读者快速确定技术公开的实质的摘要。应理解的是,摘要不用于解释或限制权利要求的范围或含义。此外,在前面的详细描述中,可以看出,为了简化本公开的目的,在单个实施例中将各种特征组合在一起。这种公开的方法不应被解释为反映所要求保护的实施例要求比每个权利要求中明确叙述的更多特征的意图。相反,如以下权利要求所反映的那样,本发明的主题在于少于所公开的示例的所有特征。因此,以下权利要求被并入详细描述中,其中每个权利要求独立地作为单独的示例。在所附权利要求中,术语“包括(including)”和“其中(inwhich)”分别用作各自术语“包括(comprising)”和“其中(wherein)”的通俗英语等同词。此外,术语“第一”、“第二”、“第三”等仅用作标签,并不意图对其对象施加数字要求。

尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上述具体特征或动作。相反,上述具体特征和动作被公开为实现权利要求的示例形式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1