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

容器化应用清单和虚拟持久卷的制作方法

2021-10-24 03:58:00 来源:中国专利 TAG:容器 持久 清单 虚拟

容器化应用清单和虚拟持久卷


背景技术:

1.容器是一种虚拟化。容器可以包括与依赖项和库一起被封装的应用。容器化应用可以使用或生成持久数据。
附图说明
2.下文将参考以下附图来描述各种示例。
3.图1描绘了创建虚拟持久卷的一个示例系统,虚拟持久卷将多个不同的底层存储聚合并且被呈现给容器化应用。
4.图2描绘了根据与容器化应用的清单的信息相匹配的应用数据存储库简档来修改虚拟持久卷的一个示例系统。
5.图3描绘了包括根据所标识的应用数据存储库简档来修改虚拟持久卷的一个示例方法。
6.图4描绘了包括根据所标识的应用数据存储库简档来修改虚拟持久卷的另一示例方法。
7.图5描绘了具有机器可读介质的一个示例系统,机器可读介质包括指令,指令包括根据所标识的应用数据存储库简档来修改虚拟持久卷的指令。
8.图6描绘了具有机器可读介质的另一示例系统,机器可读介质包括指令,指令包括根据所标识的应用数据存储库简档来修改虚拟持久卷的指令。
具体实施方式
9.容器技术是计算虚拟化范例,其中应用与依赖项和库一起被封装在容器中,以提供隔离的环境以供运行应用。这样的应用可以被称为容器化应用。许多容器可以在单个操作系统的顶部运行,但是每个容器与其他容器固有地是隔离的。以该方式,容器范例可以被理解为虚拟化操作系统。容器可能比其他形式的虚拟化(诸如虚拟化硬件的虚拟机)更轻量。例如,每个虚拟机可以具有操作系统内核的其自己的副本,而与此相反,多个容器可以共享操作系统内核。
10.容器化应用可能需要存储以保留持久数据。容器编排器(诸如kubernetes)可以提供针对容器供应某一存储的能力。然而,存在许多类型的存储,包括但不限于对于容器是本地的存储、对于容器是远程的存储、硬件(例如本地附接的驱动)的存储、软件定义(例如文件系统、虚拟化或容器化存储、经由api所呈现的存储等)的存储或具有前述方面的组合的存储。先前供应容器存储时所做的努力可能无法提供容器环境的用户和管理员想要的级别的存储配置灵活性和数据服务。例如,容器编排器可以被限于针对应用供应一个类型的存储。其他类型的系统可能会尝试将多个卷连结在一起成为单个卷,但是这样的连结可能不具有在不中断用户对数据的访问的情况下提供某些数据服务的灵活性。
11.附加地,持久存储可以使用预定义的存储类而被供应用于容器化应用。但是,特别是当容器化应用的存储需求随时间变化时,这些存储类可能无法针对容器化应用被定制或
被优化。
12.为了解决上述技术挑战,本文描述的示例涉及存储虚拟化系统及其策略引擎,存储虚拟化系统及其策略引擎从容器编排器读取虚拟持久卷被分配至的容器化应用的清单。与清单的信息相匹配的应用数据存储库简档被标识。应用数据存储库简档在许多如下简档之中,该简档基于专业知识和/或测试和分析而被预配置有针对各种类型和配置的应用所选择的存储参数。被附接到容器化应用的虚拟持久卷然后根据所标识的应用数据存储库简档而被修改。因为虚拟持久卷从容器化应用提取底层存储,持久存储的性质可以以对容器化应用透明且无中断的方式而被更改为进一步更新的应用为中心的存储策略。
13.现在参考附图,图1描绘了支持并参与容器环境120的示例计算系统100。计算系统100包括处理资源102,该处理资源102可以包括微控制器、微处理器、(多个)中央处理单元核、专用集成电路(asic)、现场可编程门阵列(fpga)等。计算系统100包括机器可读介质104,其可以是非瞬态的并且包括随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、闪存、硬盘驱动器等。
14.处理资源102可以执行被存储在机器可读介质104上的指令105(即,编程或软件代码)以执行计算系统100的功能,诸如提供容器编排器122和容器化存储系统130,如将在下面进一步描述的。更特别地,容器化存储虚拟化系统130的每个组件可以被实现为可执行指令105,包括数据服务提供方134、存储虚拟化器136、卷管理器138、适配器139、策略引擎142和容器存储接口api 144。容器化应用124、容器化应用126和容器存储接口插件128也可以被实现为被包括在可执行指令105中的指令。附加地或备选地,处理资源102可以包括用于执行本文所描述的功能性的电子电路装置。
15.计算系统100还可以包括其他硬件组件,诸如物理存储106。物理存储106可以包括任何物理存储设备,诸如硬盘驱动器、固态驱动器等、或者多个这样的存储设备(例如,磁盘阵列),并且可以被本地附接(即,安装)在计算系统100中。在一些实施方式中,物理存储106可以作为块存储设备而被访问。
16.在一些情况下,计算系统100还可以包括本地文件系统108,其可以被实现为物理存储106上的层。例如,操作系统107可以在计算系统100上被执行(借助于执行与操作系统相关的某些指令105的处理资源102)并且操作系统107可以提供文件系统108以将数据存储在物理存储106上。
17.计算系统100可以例如经由有线和/或无线网络与诸如计算系统110之类的其他计算系统通信。其他计算系统可以类似于计算系统100,并且各自可以至少包括处理资源和机器可读介质。计算系统100和110可以各自执行软件(即,处理资源102执行某些指令105)以部署容器编排器122的节点。换言之,容器编排器122可以具有集群架构,该集群架构包括加入集群中的计算系统的容器编排器节点。容器编排器122充当用于跨计算系统的集群来部署和管理容器化应用的平台。容器编排器122、从中部署的容器化应用、以及其他容器资源(诸如容器存储)被视为在容器环境120内。相反,其他元件可以在容器环境120外部运作,诸如计算系统100的本地文件系统108和操作系统107。
18.在图1中,为了说明的目的,容器化应用124和126经由容器编排器122而被本地部署在计算系统100上。因此,可以说应用124、126远程于其他节点,诸如计算系统110。容器化应用124、容器化应用126可以表示微服务,用户应用等,并且有时可以被简称为容器。容器
环境120还可以托管对于集群中的其他计算系统而言是本地的容器化应用(未示出)。
19.容器编排器122还部署了容器化存储虚拟化系统130,其将在下面被更详细地描述。在图1的示例中,容器化存储虚拟化系统130也在计算系统100及其处理资源102上本地执行。在一些实施方式中,尽管未在图1中描绘出集群中的其他计算系统的其他容器化存储虚拟化系统,但是它们也被包括在容器环境120中。例如,容器化存储虚拟化系统130可以充当具有集群架构的存储虚拟化平台中的节点,其中多个容器化存储虚拟化系统(其中至少一些可以在不同且分离的物理计算系统上执行)协作来存储和管理存储虚拟化层中的数据。
20.容器编排器122还可以包括标准化的容器存储接口123。容器存储接口123具有插件架构,并且可以使用多个可用容器存储接口插件128中对应的一个来从存储源中供应持久卷形式的存储。“供应”存储可以指的是分配一定量的存储容量并使该分配对消耗方可用的过程。插件128可以由各种厂商提供,并且可以将关联的存储系统暴露(即,使其可供使用和/或消耗)给容器存储接口123。插件的非限制性示例包括块协议插件(例如,基于互联网小型计算机系统接口或iscsi协议)、文件协议插件(例如,基于网络文件系统或nfs协议、通用互联网文件系统或cifs协议、服务器消息块或smb协议)、公共云持久卷插件和基于任何其他存储类型的其他插件(例如,定制驱动)。为了方便起见,在本文中可以将插件128中的个体插件称为插件128(例如,块协议插件128或文件协议插件128)。插件128可以按照该插件所要求的在容器环境120中进行安装和设置过程(例如,填充凭证或其他配置细节)。在一些情况下,一个或多个插件128可以作为容器化应用运行。但是,通过插件128供应的持久卷可能限于与该插件相对应的单一类型的存储。相反,本文所公开的容器化存储虚拟化系统130有利地可用于创建混合多个底层存储类型的持久卷。
21.容器化存储虚拟化系统130(也被称为存储虚拟化系统130)在一个或多个容器内运行,并且可以以可执行指令105来实现。如将变得明显的,存储虚拟化系统130在请求的应用和通过容器存储接口123供应的存储的一个或多个分配之间提供了额外的存储虚拟化层。存储虚拟化系统130包括数据路径132和控制平面140。数据路径132包括数据服务提供方134、存储虚拟化器136以及卷管理器138。数据路径132还可以包括用于访问本地存储(即,存储虚拟化系统130被托管在其上的同一计算系统100上的存储)的存储适配器139,诸如用于装载本地物理存储106的块适配器、用于访问作为块设备的本地文件系统108的堆栈文件和块适配器、或者其他存储适配器。
22.控制平面140包括策略引擎142和容器存储接口api(应用编程接口)144。在存储虚拟化系统130的初始化阶段期间,控制平面140可以从管理员或容器编排器122接收容器环境120中的可用容器存储接口插件128的列表。控制平面140还可以确认可用于数据路径132以用于安装本地存储的存储适配器139。控制平面140还可以维护与那些可用插件128中的每个相关联的存储的特性的列表,诸如性能特性(例如,延时、iops或每秒的输入/输出操作等)、安全特性(例如,加密、隔离等)、数据保护特性(例如,可用的raid或独立磁盘冗余阵列、级别)、成本特性(例如,每gb的美元)或其他特性。
23.现在将在为容器化应用124、容器化应用126提供存储的上下文中描述数据路径功能132和控制平面功能140的功能性。诸如应用124之类的容器化应用可以从容器编排器122请求存储。例如,应用124可能需要持久卷来存储数据。在一些实施方式中,应用124可以用
请求传递一个或多个要求,诸如容量要求、性能要求(例如,延时、iops等)、数据保护要求(例如,raid级别)、成本要求(例如,每gb的美元)、安全性要求、分层要求(例如,指定的冷和热存储量)或其他要求。在一些实施方式中,容器编排器122可以响应于该请求而维护被称为编排器持久卷的存储抽象。
24.容器编排器122可以使用容器存储接口123来通过控制平面140的容器存储接口api 144将请求发送到存储虚拟化系统130(其中接口144充当服务器)。以这种方式,容器化存储虚拟化系统130可以被理解为充当到容器编排器122的存储提供方。在一些实施方式中,控制平面140可以将标识符指派给请求,使得每个请求可以被单独地标识,特别是关于将以本文所描述的方式为每个请求供应的存储。
25.容器编排器122的策略引擎142分析请求,以确定哪些类型的存储满足该请求的要求。例如,控制平面140可以具有以下一种或多种可用于存储供应的类型:物理存储106、本地文件系统108、远程存储系统160、虚拟化的存储162或公共云存储164。另外,所描绘的存储类型中的多于一个的存储类型可能存在,但是为了清楚起见没有被示出。例如,多个远程存储160可以是可用的,从远程存储160供应存储的分配。
26.如图1中所描绘的远程存储系统160可以表示文件系统(例如,网络附接的存储或nas、文件服务器)、块存储系统(例如,存储区域网络或san、存储设备)或远程于计算系统100并且因此也远程于容器化存储虚拟化系统130的任何其他类型的存储系统。例如,远程可以意味着计算系统100经由网络连接等与远程存储系统160通信。
27.虚拟化的存储162可以表示虚拟环境中的任何现有持久卷,诸如容器环境120中的持久卷,包括独立于容器化存储虚拟化系统130的通过容器存储接口123供应的容器存储。在一些示例中,虚拟化的存储162可以表示由除系统130之外的另一容器存储虚拟化系统(例如,被托管在与计算系统100不同的节点上)所供应的容器存储。在一些示例中,虚拟化的存储162可以表示由基于虚拟机或管理编程(hypervisor)的软件定义的存储平台所提供的存储。
28.策略引擎142可以确定混合的前述存储类型。例如,策略引擎142可以将请求与可用的存储类型进行比较以标识最接近的匹配。为了说明,该请求可以要求一定量的高速存储和一定量的低成本、归档类存储。策略引擎可以确定物理存储106满足高速存储要求(例如,部分地由于本地性并且在该示例中是高速介质)并且块存储设备160满足低成本归档类要求。关于例如图2,本文进一步描述了策略引擎142的附加示例实施方式。
29.随后,控制平面140利用适配器139和/或容器存储接口插件128以确定的混合来供应每种存储类型,并获取每个供应的存储的安装点。安装点允许由消耗方访问所供应的存储,诸如下面将描述的数据路径132。
30.作为本地供应的示例,控制平面140可以使用来自适配器139的块适配器供应来自物理存储106的分配,并获取本地块安装点170(例如,本地主机设备安装点)以访问该分配。作为另一示例,控制平面140可以使用堆栈文件和块适配器供应来自本地文件系统108的分配,并且获取本地文件系统安装点172作为块设备(即,“文件作为块设备”)以访问该分配。
31.为了经由插件128供应存储,控制平面140经由容器存储接口api 144与存储接口123进行通信,以请求插件128从其关联的存储中供应分配并提供安装点返回到控制平面140。作为示例,假设远程存储系统160表示远程块设备(例如,计算系统100外部的san存储
阵列),则控制平面140可以(经由144和123)请求块协议插件128(例如,基于iscsi协议)从块类型远程存储系统160供应分配,并提供远程卷安装点174(例如,iscsi目标和lun或逻辑单元号)以访问该分配。作为另一示例,远程存储系统160可以表示远程文件设备(例如,nas文件服务器),并且控制平面140可以(经由144和123)请求文件协议插件128(例如,基于nfs协议)从文件类型远程存储系统160供应分配,并提供远程卷安装点174(例如,nfs下的ip地址和导出名称)以访问该分配。在一些实施方式中,代替使用适配器139,控制平面140可以利用块协议插件128从物理存储106进行供应,或者利用文件协议插件128从本地文件系统108进行供应。
32.作为通过插件进行供应的另一示例,控制平面140可以(经由144和123)请求与虚拟化的存储162相匹配的插件128从虚拟化的存储162供应分配并提供虚拟化存储安装点176以访问该分配。作为另一示例,控制平面140可以(经由144和123)请求公共云插件128从公共云存储164供应分配。作为回报,公共云插件128可以提供公共云持久卷安装点178以访问该分配。
33.尽管图1描绘了本地块安装点170、本地文件系统安装点172、远程卷安装点174、虚拟化存储安装点176和公共云持久卷安装点178,但是更多的或更少的安装点和安装点的任何组合可以由控制平面140请求并经由适配器139或插件128而被获取。在各种情况下,多个本地块安装点170、多个本地文件系统安装点172、多个远程卷安装点174、多个虚拟化存储安装点176和/或多个公共云持久卷安装点178可以由控制平面140请求并获取。此外,存储系统160和远程安装点174可以分别表示相同或不同类型的远程存储中的一个或多个及其安装点,包括块、文件或其他类型的可远程访问的存储。由控制平面140请求并获取的存储安装点的特定组合可以取决于来自容器化应用124的存储请求,并且更特别地,可以取决于策略引擎142对该存储请求的处理。
34.一旦根据策略引擎142已由控制平面140获取了一个或多个存储安装点(例如170、172、174、176或178),控制平面140就传递所获取的安装点到数据路径132。例如,通过将安装点与请求标识符相关联,控制平面140可以将安装点标识为与特定请求相关联。如将描述的,数据路径132消耗并混合安装点以创建由安装点180呈现给请求的容器化应用124的虚拟持久卷156。以这种方式,与所获取的安装点相对应的所分配的存储(例如,170、172、174、176或178)可以被称为虚拟持久卷156的底层存储。因此,容器化应用124读取数据并将数据写入虚拟持久卷156。在描述虚拟持久卷156的创建之前,将首先描述数据路径132的操作方面。
35.数据路径132包括存储虚拟化器136,其维护基于对象的存储虚拟化层150。存储虚拟化层150的目的是将数据被存储在哪里(即,经由安装点170、172、174、176和/或178访问的存储分配)与数据如何被呈现给数据的消耗方(例如,容器化应用124)解耦。以这种方式,可以在底层存储的任何混合上执行诸如迁移、备份、快照、复制、去重复、压缩等之类的数据服务,并且对数据的消耗方减少干扰、最小化干扰甚至不造成干扰。
36.存储虚拟化层150的一方面是:存储虚拟化器136将数据作为“对象”存储在对象存储库152中。更特别地,对象存储库152可以存储不同类型的对象,包括数据对象和元数据对象。包括文件和/或目录的与容器化应用124相关的数据由一个或多个数据对象组成。元数据对象特别是可以以有用和有序的方式用于组织数据对象,如下所述。在一些实施方式中,
对象存储库中的每个数据对象可以是固定量的数据,诸如4或8千字节的数据,并且元数据对象也可以是固定量的数据,诸如1千字节的数据。
37.基于对象的存储虚拟化层150可以不同于块级别存储(例如,在san中实现并经由诸如iscsi或光纤通道之类的存储协议来呈现的)和文件级别存储(例如,管理文件层次中的数据并经由诸如nfs或smb/cifs之类的文件级协议来呈现的文件系统),但是基于对象的存储虚拟化层150可以作为块或文件级别存储协议的基础(例如,通过经由安装点180、182的抽象,如下所述)。
38.存储虚拟化器136维护对象索引154,该对象索引154针对对象存储库152中的每个对象(数据对象和元数据对象)跟踪签名、物理地址和引用计数器。使用诸如sha

1、sha

256、md5等哈希函数,对象的签名可以是该对象的内容的加密摘要。因此,签名也可以被称为基于内容的签名。对象索引154中的引用计数器是指跨存储虚拟化层150中的所有虚拟持久卷(包括156、158)引用关联对象的次数。
39.对象索引154中的物理地址是指对象的实际物理位置。在一些示例中,虽然对象存储库152可以被理解为用于描述存储虚拟化层150内的对象的存储的存储构造,但是也可以理解,对象在物理地址处被物理地存储在底层存储上。因为数据路径132可以消耗多个存储安装点,所以特定的安装点可以是物理地址的一部分。另外,物理地址可以包括在给定安装点的存储分配内的位置。例如,如果安装点属于物理存储106,则物理地址可以包括逻辑块号。如果安装点属于公共云存储164,则物理地址可以在对应的托管提供方的语法中包括对云对象的引用。卷管理器138被配置为执行对指定物理地址的数据读取和写入,指定物理地址诸如被存储在对象索引154中的物理地址。
40.在一些实施方式中,容器化存储虚拟化系统130可以利用在对象的实际物理位置和对象索引154之间的间接附加层。在这样的实施方式中,卷管理器138可以将控制平面140提供的每个安装点处的底层存储分配指派和/或划分为区域(或者也被称为微型卷)。通过与对象签名相关联地在对象索引154中存储虚拟地址而不是物理地址,并维护将给定虚拟地址映射到区域并因此映射到对应的底层存储的区域表,可以实现间接附加层。因此,为了基于虚拟地址对对象进行访问,卷管理器138可以首先使用区域表和虚拟地址的第一部分来标识由虚拟地址所针对的区域,然后使用虚拟地址的第二部分来在区域内对对象进行定位。以这种方式,通过仅更新区域表中的区域标识符,而不是更新对数据对象的大量内存或持久引用(即,对象索引154中的每个受影响的地址)并重新生成各种逻辑地址、索引和在管理存储系统时所利用的其他数据结构,可以以高效的方式执行诸如区域之间的迁移和分层之类的某些数据服务。
41.在存储虚拟化层150内,存储虚拟化器136维护由对象存储库152返回的一个或多个虚拟持久卷。在一些实施方式中,容器化应用将以一对一的关系与虚拟pv相关联。例如,在图1的示例图示中,容器化应用124与虚拟pv 156相关联,并且容器化应用126与虚拟pv 158相关联。在一些实施方式中,每个虚拟pv由容器编排器122映射到由容器编排器122维护的对应的编排器持久卷,并且请求的容器化应用124访问虚拟pv 156的存储,其是经由编排器持久卷来访问的。
42.在其他情况下,容器化应用和虚拟pv可以以一对多、多对一或多对多的关系相关联。仅出于说明的目的,现在将参考虚拟pv 156来描述虚拟pv,但是应当理解,类似的描述
可以应用于诸如虚拟pv 158之类的其他虚拟pv和未示出的其他虚拟pv。
43.在一种实施方式中,虚拟持久卷156可以是存储在对象存储库152中的元数据对象和数据对象的组织,其中该组织通过关联的基于内容的签名使数据对象向上与根对象分层地相关。在示例中,虚拟pv 156可以是默克尔树(也被称为哈希树)或任何其他层次布置(例如,有向无循环图等)。在层次默克尔树的情况下,数据对象可以位于任何分支的最低树级别(也被称为叶级别,其距离根对象最远)处,并且这样的数据对象可以被称为叶数据对象。如上所述,数据对象构成了容器化应用124的数据,诸如文件和目录。
44.在层次布置内,父对象是指包括子对象的签名作为其内容的对象。例如,叶级别数据对象的父对象是元数据对象,其存储其子叶级别数据对象的签名作为其内容。以这种方式,将每个级别处的对象的签名收集在层次布置中更高的下一级别处的父对象中,直到到达根对象为止。因此,根对象也是元数据对象,其存储相应子对象的签名作为内容。从另一角度看,层次布置在从根对象到叶级别的方向上扩张——在任何给定级别处的元数据对象都可以扩张到由预定义分支因子所指示的多个子节点。元数据对象可能能够存储至少等于层次布置的分支因子的数量的签名,使得其可以保存所有子对象的签名。
45.虚拟pv的数据中的任何变化(即新数据、修改的数据、删除的数据)都将转换为一个或多个叶级别数据对象的内容中的变化,这将促使那些变化的数据对象的基于内容的签名的变化,这将引起内容和签名变化通过父节点向上传播到根对象。因此,在给定时间点处的虚拟pv 156(也被称为时间快照)可以由其根对象唯一地标识,并且更特别地,由其根对象签名来标识。
46.虚拟pv 156的另一方面是,在一些实施方式中,来自容器化应用124之中的给定文件或目录可以被存储在虚拟pv 156内的对应子树布置中。换言之,虚拟pv 156可以被标记成子树,每个子树对应于容器化应用124的相应文件或目录。
47.因为文件和目录由一个或多个数据对象组成,并且那些数据对象通过引用关联的数据对象签名而被布置在虚拟pv 156及其子树中,所以在一些实施方式中,每个数据对象都可以物理地被存储在对象存储库152中仅一次,并在虚拟pv 156中的多个元数据对象中或在存储虚拟化层150中的任何其他虚拟pv(例如158)中由其相应的签名被引用。因此,可以由存储虚拟化器136这种方式对数据进行去重复。类似地,元数据对象可以被存储一次,并且由对应的签名多次引用。在存储虚拟化层150中引用数据对象或元数据对象的次数可以被记录在对象索引154的对应的引用计数器中。在一些实施方式中,与后处理的或近线去重复相反,可以在写操作期间内联地执行数据的去重复,并且可以以这种方式将数据的存储描述为在存储虚拟化层150中以及在虚拟pv 156、158之间进行本机地去重复。
48.在安全性是考虑因素的用例中,包括在多租户场景中,可以针对每个敏感的安全域利用分离的对象存储库。因此,敏感数据可以被隔离到受保护的对象存储库,而无需参与不在安全域内的其他虚拟pv的去重复。
49.为了使容器化应用124访问虚拟pv 156,数据路径132可以提供安装点180。数据路径132可以提供多种类型的安装点中的任何类型的安装点,包括但不限于块类型安装点(例如,与iscsi兼容)、文件类型安装点(例如,在用户空间或fuse接口中的文件系统、或者与nfs、smb或cifs兼容)、键/值共享安装点(例如,nosql卷或与amazon s3兼容的api)以及其他类型的安装点。以这种方式,可以将安装点理解为有助于完成存储访问抽象,因为向容器
化应用124提供容器化应用124所需的任何类型的存储访问(例如,文件协议或块协议等),而不管构成虚拟pv 156的底层存储类型如何(例如,不管是基于软件的还是基于硬件的、块还是文件、本地还是远程等)。
50.安装点的类型,即抽象的类型,可以是用户选择的,或者可以根据请求存储的容器化应用124而被预定义(即,基于容器编排器122所指示的容器化应用的类等等)。可以经由在控制平面140处接收到的存储请求将抽象的类型指示给容器化存储虚拟化系统130。
51.在图1的示例中,以类似于上面针对容器化应用124的虚拟pv 156的安装点180所描述的方式,容器化存储虚拟化系统130还可以向容器化应用126提供安装点182,以访问响应于从容器化应用126到容器编排器122的存储的请求而创建的虚拟持久卷158。虚拟pv 156和虚拟pv 158都可以包括用于组织相应数据集的相应默克尔树,而对象存储库152以去重复的方式存储虚拟pv 156和158的数据。
52.在操作中(即,在虚拟pv 156被创建并且安装点180被提供给应用124之后),存储虚拟化系统130可以对经由安装点180的来自容器化应用124的指向虚拟pv 156的输入/输出(i/o)请求提供服务。例如,为了服务通过安装点180接收的读取请求,存储虚拟化器136可以标识由读取请求寻址的虚拟pv中的数据对象的签名(即,其可以包括:基于读取请求的地址遍历虚拟pv的默克尔树结构),并从对象索引154中确定那些数据对象签名的物理地址。在一些实施方式中,数据对象的物理地址可以指定存储数据对象的底层存储分配的安装点(例如,安装点170、172、174、176或178中的一个或多个)。然后,经由卷管理器138的存储虚拟化系统可以使用物理地址(或者如上所述,使用虚拟地址和区域表)读取数据对象,并且通过安装点180将读取的数据返回到容器化应用124。
53.为了服务写入请求,在示例实施方式中,存储虚拟化器136可以从容器化应用124接收要被写入到虚拟pv 156的数据,基于内容的签名来检查数据是否包括对于对象存储库152而言是新的任何数据对象,并将新的数据对象(即,数据存储库中尚不存在的数据对象)写入到对象存储库。在一些实施方式中,存储虚拟化器136可以在写入对象存储库152之前压缩新的数据对象。写入对象存储库152的过程特别是可以涉及控制对哪个底层存储分配(例如106、108、160、162或164)写入新的数据对象。在一些实施方式中,容器化应用可以在写入请求中指示向哪个底层存储分配写入数据。在一些实施方式中,可以默认将新的数据写入到虚拟pv 156的本地存储部分,诸如本地附接的物理存储106,其可以提供针对频繁访问而优化的“热”层存储。在一些实施方式中,容器化应用可以指示用于写入数据的特定策略或服务级别协议,并且存储虚拟化系统可以确定哪个底层存储分配满足该策略或sla。然后,存储虚拟化系统利用与该底层存储分配相对应的安装点(例如170、172、174、176或178)来写入数据对象。存储虚拟化系统还将数据对象的签名添加到虚拟pv 156的元数据对象。
54.在虚拟pv 156中表示由根对象签名进行本机去重复和唯一标识的数据可以实现高效的数据服务,包括由数据服务提供方134提供的那些数据服务。例如,数据服务提供方134可以执行但不限于基于快照的备份、复制、迁移、分层、基于冗余的数据保护(例如,独立节点的冗余阵列,也被称为rain;或raid)或其他能力。数据服务提供方134可以以对于容器化应用124透明或非干扰的方式利用虚拟pv 156执行数据服务。例如,可以在不修改安装点180的情况下执行数据服务,并且在一些数据服务的情况下,无需来自用户、容器化应用124或容器编排器122的输入或指令(例如,配置细节、设置命令等)。此外,在一些示例中,数据
服务提供方134可以主要在存储虚拟化层150处操纵数据,使得以与不同的底层存储装载和虚拟pv 156的特定组成无关的方式执行数据服务。换言之,数据服务提供方134可以以非干扰的方式一致地执行一组公共的数据服务,而不管是什么类型的底层存储构成虚拟pv 156。借助于例如虚拟pv 156使底层存储与容器化应用124解耦,可以使前述技术益处成为可能。
55.例如,数据服务提供方134可以执行高效的基于快照的备份数据服务。在一些实施方式中,通过从根对象开始以自上而下的迭代方式比较对象签名来查找不同的元数据和数据对象,可以高效地实现层次布置的虚拟pv 156的时间快照之间的差异。例如,在备份虚拟pv 156的当前状态(即,当前快照)的操作中,当前快照可以在主系统(例如,计算系统100)上,并且先前备份的较旧快照可能已经存在于备份系统(例如,计算系统110)上。在该示例中,可以通过以先前描述的方式比较快照的签名来确定当前快照和较旧快照之间的差异,并且可以搜索备份系统以确定在备份系统上(即,在备份系统的对象存储库中)是否已经存在不同的元数据或数据对象。仅将那些不存在的元数据或数据对象从主系统复制到备份系统,从而减少数据业务量并改善了备份时间。在其他实施方式中,基于快照的备份可以以类似方式在备份系统之外或者代替备份系统在相同主系统上进行。
56.例如,可以在不干扰容器化应用124的情况下根据调度执行基于快照的备份。此外,基于快照的备份可以主要在软件虚拟化层150处执行,从而避免了直接管理每个个体底层存储的复杂性。与备份过程类似,恢复过程也可以继续如下操作:比较要被恢复的元数据或数据对象与已存在于恢复目标上的对象,并且仅传输在恢复目标上不存在的数据。
57.数据服务提供方134也可以执行迁移操作。迁移可以在虚拟pv 156内的不同底层存储之间移动数据对象,包括在不同本地存储之间、在本地与远程存储之间、在不同远程存储之间、在不同公共云存储之间、在公共云存储与非公共云存储(本地或远程)之间、或在底层存储的其他组合之间移动数据对象。通过将移动的数据对象的新物理地址与对象索引154中未变化的基于内容的签名相关联,在存储虚拟化层150处处理迁移,从而使迁移对于容器化应用124是透明的。
58.作为另一示例,数据服务提供方134可以将虚拟pv 156迁移到不同的计算系统。例如,在一些情况下,使用虚拟pv 156将虚拟pv 156迁移到接近工作负载可能是有用的。在示例场景下,出于负载平衡或其他原因,容器编排器122可以将容器化应用124移动到不同的计算系统(例如,例如从源计算系统100到目的地计算系统110),并且虚拟pv 156可能需要被迁移到接近容器化应用124。在一些实施方式中,存储虚拟化系统130可以将虚拟pv 156的管理迁移到目的地计算系统110上的另一存储虚拟化系统,其中容器化应用124已被迁移到其上。数据服务提供方134还可以迁移虚拟pv 156中的一些数据,诸如将对计算系统100而言是本地的数据对象(例如,在底层物理存储106上)迁移到不同计算系统110的物理存储,这对于维护虚拟pv 156的存储本地性和其他性能特性可能是有用的。这样的迁移可能涉及标识目的地计算系统110是否已经具有要被迁移的元数据或数据对象的副本,并且仅传输目的地计算系统110上不存在的数据对象。同时,相同的安装点180可以针对容器化应用124被维护并且不被干扰。
59.数据服务提供方134还可以在虚拟pv 156内执行数据分层,也就是说,在可以提供不同特性并遵守不同存储策略的不同类型的底层存储之间移动数据。例如,如先前所述,可
以借助于将虚拟pv 156的组成存储分配指派和/或划分到不同区域来实现分层。在某些触发条件下,数据服务提供方134(在一些实施方式中与卷管理器138相结合)可以将数据对象从一个区域移动到另一区域,并相应地更新区域表。示例触发条件可以包括:数据的增加的安全状态,其可以使数据服务提供方134将该数据从公共云存储164移动到非云存储106、108、160或162;数据的老化,这可以使数据服务提供方134将该数据移动到归档类的存储(例如,远程存储160);最近对数据的频繁访问,这可以使数据服务提供方134将该数据移动到高性能存储(例如,本地物理存储106);或其他类型的条件。借助于在存储虚拟化层150处对数据进行移动和管理,可以跨任何类型的底层存储执行数据分层,而不干扰安装点180或容器化应用124。
60.数据服务提供方134还可以支持基于冗余的数据保护。例如,数据服务提供方134可以提供raid数据保护。例如,数据服务提供方134(在一些实施方式中与卷管理器138相结合)可以跨底层存储分配或在底层存储分配内创建raid集(例如,在本地物理存储106包括一组驱动器的情况下)。数据服务提供方134可以具有软件raid控制器或与硬件raid控制器协作,以根据raid方案将虚拟pv 156的对象写入raid集,raid方案诸如raid 1、raid5或raid 6。
61.数据服务提供方134还可以通过复制或镜像虚拟pv 156(为便于讨论,也被称为主虚拟pv)的数据来提供rain数据保护,以与rain架构原则保持一致地达到数据保护和高可用性的目的。在一些实施方式中,数据服务提供方134可以一开始当数据进入到存储虚拟化层150中时复制或镜像数据作为来自容器化应用124的写入请求。在一些实施方式中,复制的数据可以形成虚拟pv复制,相对于对计算系统110而言是本地的主虚拟pv,该虚拟pv复制可以具有类似于虚拟pv的形式(例如,包括默克尔树),并且可以对不同计算系统110上的不同存储虚拟化系统而言是本地的并且可以由其来进行管理。附加地或备选地,虚拟pv复制可以由与构成主虚拟pv 156的底层存储不同和/或分离的底层存储构成。因此,如果主虚拟pv上的数据是不可恢复的,则可以使用故障转移过程从虚拟pv复制中恢复数据。
62.总而言之,借助于容器化存储虚拟化系统130将各种类型的存储聚合到虚拟持久卷中,该虚拟持久卷可以被示为任何数目的可用存储抽象,容器存储数据路径可以是从端到端高度虚拟化的。因此,容器化应用的用户可以在请求底层存储的任何组成以适应应用的性能需求(或其他需求)时被提供高度的灵活性,同时还能够使用适合于该应用的任何类型的抽象来消耗存储。此外,可以与底层存储的组成无关并且与被用来呈现虚拟pv的存储访问抽象的类型无关地提供一致的存储服务集。
63.图2描绘了包括策略引擎242的一个示例系统。图2还描绘了其他元件,包括容器编排器222、容器存储接口223、容器化应用224、数据路径232、容器存储接口api 244、和一个或多个存储插件(例如,存储插件a 228

1、存储插件b 228

2、存储插件c 228

3)。在一些实施方式中,图2的前述元件可以被视为存在于同一容器环境内。图2的策略引擎242和元件(即,222、223、224、232、244、228

1、228

2、228

3)可以各自被实现为硬件或硬件和编程的任意组合,以实现本文所述的其相应功能性。例如,编程可以是非瞬态机器可读介质上存储的可执行指令,并且硬件可以包括用于取回和/或执行那些指令的处理资源。例如,这样的机器可读介质和处理资源可以在很多方面分别类似于图1的机器可读介质104和处理资源102。硬件也可以包括电子电路装置或逻辑。
64.容器编排器222在许多方面可以与上述容器编排器122类似。容器编排器222可以用作用于部署和管理容器化应用的平台,诸如容器化应用224,容器化应用224可以类似于上述容器化应用124、容器化应用126。
65.容器编排器222可以包括容器存储接口223,容器存储接口223可以类似于上述容器存储接口123。容器存储接口223可以使插件能够向容器编排器222和相关联的容器环境暴露(即,使其可供使用和/或消耗)存储系统。例如,存储a插件228

1可以将存储系统229

1暴露给容器编排器222,存储b插件228

2可以将存储系统229

2暴露给容器编排器222,并且存储c插件228

3可以将存储系统229

3暴露给容器编排器222。插件228

1、插件228

2和插件228

3(也通常被称为(多个)插件228)可以类似于上述插件128,并且存储系统229

1、存储系统229

2和存储系统229

3中的任一个(也通常被称为存储、(多个)存储类型、或(多个)存储系统229)可以是本地存储设备(例如,本地附接的磁盘驱动)、本地或远程存储阵列、软件定义的存储、云存储等,并且可以类似于上述存储系统或存储类型中的任一个,诸如物理存储106、本地文件系统108、远程存储系统160、虚拟化存储162或公共云存储164。
66.对于在容器编排器222处部署的存储插件228,容器编排器222可以维护被称为存储类的对象,对象包括描述相关联存储229的参数(例如,以键/值对的形式)。存储类可以描述所提供的存储的特性(例如,通过容器存储接口223作为持久卷可供应),并且所描述的特性可以包括服务质量级别、备份策略、容量、成本、性能(例如,iops、延时)、冗余、恢复时间目标(rto)、恢复点目标(rpo)或其他度量。不同的存储类可以描述不同的存储产品(offering)。在一些情况下,与一个供应商相关联的存储229可以具有多个存储类。来自不同供应商的不同存储229可以具有不同的存储类。由于不同的存储类可以使用不同的参数,因此存储类在供应商之间甚至在供应商内可能是非标准化的。
67.在图2中,存储a插件228

1可以具有至少一个相关联的存储a存储类226

1,存储b插件228

2可以具有至少一个相关联的存储b存储类226

2,并且存储c插件228

3可以具有至少一个相关联的存储c存储类226

3。存储类(诸如存储a存储类226

1、存储b存储类226

2和存储c存储类226

3)在本文中通常被称为(多个)存储类226。尽管在图2中描绘了三个存储插件228、三个存储系统229和三个存储类226作为示例,但是在各种实施方式中可以存在或使用更多或更少的存储插件、存储系统和/或存储类。
68.在一些实施方式中,策略引擎242可以形成存储虚拟化系统的至少一部分。例如,策略引擎242可以用作或形成图1的容器化存储虚拟化系统130的一部分,并且更具体地,可以用作或形成图1的控制平面140和/或策略引擎142的一部分。如将描述的,策略引擎242可以用于将控制平面操作虚拟化来向容器化应用(例如,应用224)提供由一个或多个类型的可用存储支持的虚拟持久卷,以满足策略目标,等等,尽管可用的存储类型由非标准化存储类来描述。此外,如将描述的,策略引擎242可以鉴于相关联的应用来智能地管理虚拟持久卷,以实现以应用为中心的存储策略。
69.策略引擎242可以包括一个或多个元素和/或与一个或多个元素交互,一个或多个元素的每个元素可以被实现为硬件或硬件和编程的任意组合,以实现如本文所述的其相应功能性。在一些实施方式中,策略引擎242可以包括调度器246、发现代理248、包括供应器252的虚拟pv管理器250、卷区域和复制管理器254、容器存储接口映射256、和/或数据路径管理器258。在一些实施方式中,策略引擎242可以经由容器存储接口api 244来与容器存储
接口223通信(例如,双向通信),容器存储接口api 244可以类似于上述容器存储接口api 144。在一些实施方式中,策略引擎242可以例如经由数据路径管理器258来与数据路径232通信,数据路径232可以类似于上述数据路径132。
70.发现代理248可以确定在容器环境中什么插件228以及相关联的存储229可用。附加地,发现代理248可以取回与所发现的(多个)插件228和存储229相对应的存储类226,并且将所取回的存储类226寄存到策略引擎242。例如,发现代理248可以通过查询容器编排器222或容器存储接口223来收集有关插件228、存储229和存储类226的前述信息。
71.在一些实施方式中,发现代理248可以在策略引擎242所属的存储虚拟化系统的启动时或初始化阶段期间操作和/或可以在存储虚拟化系统运行的同时定期性地操作。作为例示,容器环境的非限制性示例可以包括三到六个类型的存储插件228。在各种实施方式中,针对每个插件228可以存在一个或多个存储类。
72.如上所述,由策略引擎242寄存的存储类226可能是非标准化的。换言之,不同的存储类可以使用不同的参数,或更具体地,对于被定义为键/值对的参数使用不同的键和/或不同的值。策略引擎242可以利用公共模式(common schema)260来将每个存储类226转换为对应的存储简档。例如,存储a存储类226

1可以被转换为存储a简档262

1,存储b存储类226

2可以被转换为存储b简档262

2,依此类推。存储简档(诸如存储a存储简档262

1和存储b存储简档262

2)在本文中通常被称为(多个)存储简档262。在一些实施方式中,公共模式260可以基于例如管理员对存储类226的了解而被手动编码。公共模式260可以被理解为供应商特定存储类参数和公共语言之间的映射。在一些实施方式中,如下所述,公共模式260的公共语言可以与虚拟pv存储类227的创建相关地被设计。在一些实施方式中,因为存储简档262不被预期在转换之后被更改,所以存储简档262可以是静态的。
73.为了例示,如果存储a存储类226

1和存储b存储类226

1中的相同性能级别分别具有值a和值b,并因此被转换为存储a简档262

1和存储b简档262

2中的相同性能级别值x,则公共模式260可以是有用的。因此,存储简档262

1和存储简档262

2(分别从存储类226

1和存储类226

2转换的)使用公共语言来分别描述针对存储229

1和存储229

2的存储产品。
74.策略引擎242还可以向容器编排器222呈现或公布一个或多个虚拟pv存储类227。虚拟pv存储类227可以与存储类226一起被暴露给用户。类似于存储类226,虚拟pv存储类227可以描述可供应持久卷的特性,并且具体地描述从策略引擎242或从包括策略引擎242的存储虚拟化系统可供应的持久卷。在一些实施方式中,虚拟pv存储类227和根据虚拟pv存储类227被供应的虚拟pv可以被认为具有或满足默认或初始存储策略。
75.不同的虚拟pv存储类227可以被呈现或公布给容器编排器222,诸如用于不同服务级别(诸如金、银和青铜)的存储类,每个服务级别具有不同的参数。例如,不同虚拟pv存储类227中的每个可以由管理员出于不同的虚拟存储策略目的而设计,或者可以由提供策略引擎242的供应商预定义。仅出于例示的目的,图2中描绘的虚拟pv存储类227具有作为“金”存储类的示例特性,其参数类型为:分层,性能为:高,以及成本为:高。
76.与存储类226不同,虚拟pv存储类227天然地符合公共模式260。换言之,虚拟pv存储类227的键/值对与公共模式260使用相同的语言,并且不需要进一步转换。在一些实施方式中,虚拟pv存储类227可以被首先定义,并且公共模式260可以基于虚拟pv存储类227的参数而被创建。
77.应用224可以自主地或经由用户输入来请求来自容器编排器222的持久卷。请求还可以包括供应需求,诸如虚拟pv存储类227是针对所请求的持久卷的期望的存储类的指示。例如,利用请求被传递的其他需求可以包括期望的容量。容器编排器222可以进而例如经由容器存储接口223和容器存储接口api 244来向策略引擎242传递创建卷请求230。在一些实施方式中,容器编排器222可以提取虚拟pv存储类227的参数,并且随请求230将参数传递给策略引擎242。请求230可以由虚拟pv管理器250在策略引擎242内接收。
78.虚拟pv管理器250可以包括用于操纵由策略引擎242管理的虚拟pv的各种操作符,包括用于供应新虚拟pv、删除虚拟pv、处置针对虚拟pv的读取/写入i/o请求、或其他操作的操作符。这些操作符可以各自是硬件,或者硬件和编程的组合,以实现其相应功能性。例如,虚拟pv管理器250可以包括供应器252操作符,以供应新的虚拟pv。具体地,虚拟pv管理器250可以确定请求230是用于供应新的虚拟pv的请求,并且使供应器252处置请求230。
79.响应于请求230,供应器252开始创建虚拟pv的过程,虚拟pv最终将作为虚拟pv 280(即,至少包括卷标识符)而返回到容器编排器222,以用于由容器化应用224消耗或用作持久存储。供应器252确定虚拟pv存储类227在请求230中被标识为要创建的期望类型的虚拟pv。供应器252然后评估所请求的虚拟pv存储类227中的每个参数,并且确定哪个存储简档262具有可以满足并且履行(fulfill)虚拟pv存储类227参数的对应参数。在一些实施方式中,虚拟pv存储类227中的参数是最小,使得对应参数在存储简档262之中的最接近的匹配超过存储类227中的参数值。虚拟pv存储类227参数与存储简档262的参数的该匹配因为虚拟pv存储类227和存储简档262全部服从公共模式260并且使用公共模式260的语言而成为可能。例如,如果所请求的参数指示性能:高,则供应器252将标识还包括性能为高的存储简档262。
80.在一些实施方式中,供应器252可以在最佳拟合的基础上将虚拟pv存储类227的参数与存储简档262的参数进行匹配。例如,如果未找到匹配或超过虚拟pv存储类227参数的存储简档262的参数,则可以选择最接近的参数。例如,如果所请求的参数指示性能:高,则供应器252可以选择具有性能为中等的存储简档,而不是具有性能为低的其他存储简档。
81.在一些实施方式中,供应器252还可以确定将虚拟pv存储类227与特定存储简档262进行匹配是否会违反相关联插件228的资源限制或配额,并且如果发生违反,则避免匹配到该插件228。在一些实施方式中,供应器252可以使用带外查询命令(例如,不经由插件228、容器存储接口api 244或容器存储接口223)来检查存储229的剩余容量。
82.在一些实施方式中,供应器252可以确定多个存储简档262(例如,多于一个)可以被组合来满足虚拟pv存储类227的参数。例如,请求230可以请求性能为高和2太字节(tb)容量。但是,在该例示中,由于剩余容量或其他资源限制,具有性能为高参数的存储简档262

1和262

2被限制为1tb卷。在这种情况下,供应器252可以确定将来自存储简档262

1和存储简档262

2中的每个存储简档的1tb容量进行组合来履行对2tb性能为高的请求。
83.在一些情况下,供应器252可以确定单个存储简档262履行虚拟pv存储类227的所有参数。在一些情况下,供应器252可以确定需要多个不同的存储简档262以履行虚拟pv存储类227的参数。例如,虚拟pv存储类227可以是分层类型的,并且可以在第一参数中指定高性能主存储(例如,具有低延时和/或高iops)并且在第二参数中备份档案类存储(例如,具有低成本和/或高写入速度)。在该示例中,为了例示的目的,假设存储a简档262

1与高性能
存储阵列229

1相关联,并且存储b简档262

2与档案/备份存储系统相关联,供应器252可以确定第一参数被存储a简档262

1履行,并且第二参数被存储b简档262

2履行。
84.最终,供应器252可以创建虚拟pv存储类227的参数到用作针对存储类226的代理的一个或多个存储简档262的参数的映射,使得虚拟pv存储类的参数227被履行。因此,供应器252还标识插件228(对应于所映射的存储简档262),插件228被用于组成具有虚拟pv存储类227的特性的虚拟pv。
85.供应器252与容器存储接口映射256协调,以使用存储插件228的相关联的存储类226来供应来自与所映射的简档262相关联的每个存储插件228的卷。供应器252向简档262和插件228的容器存储接口映射256通知供应器252被标识并且被映射到虚拟pv存储类227,并且容器存储接口映射256使用由供应器252标识的插件228来处置虚拟pv存储类227中的每个参数与所供应卷中的一个或多个的低级别替换。在该过程中,容器存储接口映射256可以将虚拟pv存储类227的参数转换为存储类226中的参数,并且然后使用插件228和那些经转换的参数来供应卷(因为插件228与存储类226兼容)。使用插件228来供应卷可以类似于以上在图1中描述的使用插件128进行的供应。
86.为了例示,如果供应器252确定存储a简档262

1履行虚拟pv存储类227的第一参数,则容器存储接口映射256可以使用公共模式260而将该第一参数转换为存储a存储类226

1的对应参数,并且然后经由容器存储接口api 244和容器存储接口223而向存储a插件228

1发布指示经转换的存储a存储类226

1参数(以及在一些示例中的诸如容量的其他参数)的创建卷请求270。进而,存储a插件228

1根据请求270而供应来自存储系统229

1的存储,并返回卷272,卷272可以包括卷标识符或持久卷对象或用于处置所供应卷的其他控制平面手段。容器存储接口映射256可以针对虚拟pv存储类227的每个参数,顺序地或并行地重复该过程。为了清楚和易于例示,图2描绘了利用插件228的一个供应请求,但是应当理解,在一些情况下,卷可以根据由供应器252确定的映射,从多于一个的插件228被供应。
87.在一些实施方式中,卷区域和复制管理器254和/或数据路径管理器258(与数据路径232结合)可以提供用于创建和/或管理虚拟pv的其他功能性。卷区域和复制管理器254的功能性可以与数据路径管理器258/数据路径232互操作,或者可以独立于数据路径管理器258/数据路径232。
88.在一些实施方式中,数据路径管理器258可以将供应信息266发送到数据路径232。供应信息266可以在策略引擎242根据虚拟pv存储类227创建虚拟pv时,被发送到数据路径232,该虚拟pv可以被认为是默认存储策略274,并且因此,与以下进一步描述的经更新的供应信息286相比,供应信息266可以被认为是初始供应信息266。
89.初始供应信息266可以包括关于经由插件228被供应以履行虚拟pv存储类227的卷的信息,诸如(多个)存储类型、卷标识符等(例如,标识关于卷272的信息)。数据路径232然后可以以类似于以上关于图1所描述的方式消耗那些所供应卷以创建虚拟pv。具体地,数据路径232可以将虚拟pv创建为对象存储库中所存储的元数据对象和数据对象的组织(例如,默克尔树),元数据对象和数据对象通过基于相关联内容的签名而被分层地相关,直到根对象。在一些实施方式中,分层组织的、由对象存储库支持的虚拟pv作为虚拟pv 280被返回到容器编排器222,并且如上所述,数据路径232可以涉及服务i/o请求。
90.区域,也被称为小型卷,指代虚拟pv内的组织的单元。虚拟pv可以包括单个区域
280。在另一示例中,针对虚拟pv存储类227映射并供应了多个底层卷,如上所述,这些卷通过数据路径232而被虚拟化,并且该数据路径虚拟化存储被提供作为虚拟pv 280。例如,在图2中,以虚线描绘的虚拟pv 280包括从它们相应的插件228供应的存储229

1的卷和存储229

2的卷。
95.如前所述,由策略引擎242响应于创建卷请求230并根据虚拟pv存储类227最初创建和提供的虚拟pv 280可以被视为具有默认存储策略274。即,虚拟pv 280最初可以具有基于例如由管理员创建的预定义虚拟pv存储类的特性。策略引擎242可以进一步基于关于请求的容器化应用224的信息来调整虚拟pv 280,以努力优化针对该应用224优化虚拟pv 280。该调整可以在容器化应用224将虚拟pv 280用作永久存储之前进行或同时进行。
96.为了开始调整,策略引擎242可以使用虚拟pv 280的卷标识符来从容器编排器222请求并读取附接到该卷标识符的容器化应用224的应用清单282。例如,所部署的容器化应用224可以由一个或多个对象(例如,kubernetes对象)表示,并且那些对象可以被表达为一个或多个json(javascript对象表示法)或yaml(yaml不是标记语言)文件。清单282是那些对象(例如,yaml文件)的集合,并且清单282可以被理解为容器化应用224的定义。
97.清单282的对象可以各自包括与容器化应用224相关联的标签。因此,为了找到清单282,策略引擎242可以使用虚拟pv 280的卷标识符来找到具有该卷标识符的持久卷对象、读取该持久卷对象的标签并且找到具有相同标签的其他对象。
98.清单282可以指示属性,诸如例如名称、容器化应用224所基于的图像、复制的数目(例如,计算复制的数目,其可能与比例有关)、标签、容器化应用224作为其成员的pod定义、正在使用容器化应用224或与容器化应用224相关的另一应用的指示、或其他属性。示例图像可以包括postgres、nginx、mongodb、mysql或其他图像。这样的细节可以不与创建卷请求230通信,因此策略引擎242将不会接收到关于经由创建卷请求230请求的存储将被用于什么或容器化应用224是什么性质的任何概念。
99.策略引擎242可以通过将清单282的信息与一个或多个预配置应用数据存储库简档(诸如,图2中描绘的应用数据存储库简档a 284

1和应用数据存储库简档b 284

2(也通常被称为(多个)应用数据存储库简档284))进行比较来分析应用清单282,但是在不同示例中可以使用更多或更少的应用数据存储库简档。策略引擎242然后可以标识与清单相匹配的特定应用数据存储库简档。例如,如将在以下讨论的,应用数据存储库简档284中的每一个是预定的,以针对对相应应用类型提供定制的存储。在一些实施方式中,应用数据存储库简档284可以包括匹配准则元数据,匹配准则元数据指示简档针对什么应用类型而被定制,包括诸如名称、图像名称、标签、复制(例如,计算复制)的数目、和/或其他属性的元数据。策略引擎242可以标识应用清单282的属性与应用数据存储库简档284的匹配准则元数据信息之间的最佳拟合匹配(即,最佳拟合匹配可以是与其他应用数据存储库简档相比,与清单282的信息更匹配的应用数据存储库简档)。最佳拟合匹配可以基于各种逻辑、规则、过滤、加权等、或它们的任意组合(例如,在一些实施方式中,容器图像名称匹配可以被最重地加权)。
100.在进一步讨论调整策略引擎242的功能性之前,将更详细地描述应用数据存储库简档284。应用数据存储库简档284可以是描述由特定应用使用的数据存储库的特性的简档,并且更具体地,特性可以针对特定应用而被优化。应用数据存储库简档284可以基于对
由相应应用类型的存储使用的理解而被预配置。应用数据存储库简档284可以由开发人员手动预配置,也可以使用机器学习技术以半自动或自动方式进行预配置。在一些实施方式中,例如,应用数据存储库简档284可以是人类可读的文本文件。
101.对简档284所基于的存储使用的理解可以以各种方式获得。例如,在一些情况下,基于域专业知识或基于对图像源代码的分析(例如,如果是开源的),假定与给定图像相关联的应用类型使用某种类型的存储。在其他示例中,应用类型的实例可以被部署,并且在实例运行时,与存储相关的调用(例如,在文件系统层处)可以被拦截,或者可以观察其他与存储相关的行为(例如,i/o模式等)。这些测试观察和所拦截的调用可以被分析,以推断存储使用情况。通过前述方法中的任一个确定的存储使用情况可以包括缓存模式、i/o模式、复制行为或其他特性,它们可以用作有关对应应用类型如何使用存储的第一类提示。各种应用类型可以根据前述方法中的任一个来进行分析,并且应用类型可以包括同一应用图像的不同部署配置(例如,快速postgres实例、小型postgres实例、大型postgres实例)。在一些实施方式中,所分析的应用类型可以基于所部署的容器化应用的最常见和/或最流行的类型来选择。
102.每个应用数据存储库简档284可以被构造为包括用于将虚拟pv配置为与针对对应应用类型确定的存储使用情况对齐的存储参数。存储参数可以指定虚拟pv的各方面,诸如底层存储的类型(例如,具有期望的性能或成本特性)、存储容量、分层、复制策略、备份策略、数据优先次序策略或其他存储属性。各种应用类型及其配置的存储使用情况可能有很大不同,因此在应用数据存储库简档284中指定的存储参数也可以不同。一旦被构建,应用数据存储库简档284就可以被用于策略引擎242,以用于基于应用清单来调整虚拟pv。
103.在一些实施方式中,简档引擎242可以接收并存储一个或多个定制应用数据存储库简档285。例如,用户可以创建定制应用数据存储库简档285来添加到经预配置的应用数据存储库简档284。定制应用数据存储库简档285对于具有例如经预配置的应用数据存储库简档284并未预期的特定应用和存储部署的用户可能有用。定制应用数据存储库简档285的作者还可以提供相关联的匹配准则元数据和最佳拟合算法。
104.返回到调整功能,在策略引擎242已标识与应用清单282相匹配的应用数据存储库简档284之后,策略引擎242(经由虚拟pv管理器250、容器存储接口映射256、卷区域和复制管理器254和/或数据路径管理器258的上述功能)可以根据所标识的应用数据存储库简档284的存储参数来修改虚拟pv 280,使得虚拟pv 280具有经更新的、以应用为中心的存储策略。在许多情况下,特别是如果虚拟pv 280通过数据路径232而被虚拟化和抽象化并且修改在数据路径232处或在底层存储229处进行更改(例如,对数据的区域或基于对象的分层结构的修改),可以以对容器化应用224透明且无中断的方式来对虚拟pv 280进行修改。
105.为了例示,默认或初始存储策略下的虚拟pv 280可以包括从存储a插件228

1供应的卷和从存储b插件228

2供应的卷,并且策略引擎242可以将虚拟pv 280转变为经修改的虚拟pv 280',经修改的虚拟pv 280'包括从存储b插件228

2供应的卷和从存储c插件228

3供应的新卷。
106.对虚拟pv 280(例如,280')的组成卷的任何更改都可以在虚拟化映射264中更新。在某些实施方式中,策略引擎242无需将有关已修改的虚拟pv 280的任何更改发送到容器编排器222,因为虚拟pv280的卷标识符对于虚拟pv 280'保持相同。
107.响应于各种应用数据存储库简档284,多种类型的修改可以被应用于虚拟pv 280。现在将描述各种非限制性示例和用例。以下示例并不意味着详尽、全面或互斥。
108.在一些实施方式中,供应器252可以以与在第一实例中用于匹配虚拟pv存储类227的参数的上述方式类似的方式,以最佳拟合匹配为基础来将所标识的应用数据存储库简档284的存储参数匹配到可用存储简档262,以确定对存储简档262的新映射。然后,容器存储接口映射256可以执行所标识的应用数据存储库简档284的参数与新映射中与存储简档262相关联的存储类226的参数的低级替换,并且使用插件228来供应卷,并且存储类226的参数替换所标识的应用数据存储库简档284的参数。容器存储接口映射256可以包括逻辑,以根据虚拟化映射264中虚拟pv 280的当前映射来供应尚未属于虚拟pv管理器250的新卷。
109.针对新映射而供应的新卷和/或针对新映射维护的现有卷可以作为经更新的供应286而被传递到数据路径232。在某些实施方式中,数据路径232通过将新卷作为新区域添加到虚拟pv 280来处理经更新的供应286,并且现有数据可以通过更改与虚拟pv 280相关联的区域表和/或对象索引中的方向,通过数据路径232而被迁移到新区域。在某些实施方式中,在数据被迁移之后,新映射下不需要的先前映射的区域可以被删除。因此,虚拟pv 280的区域组成可以被修改,以在不会中断应用224的情况下,更好地适应容器化应用224的存储使用情况。
110.修改虚拟pv 280的上述示例实施方式可以用于通过例如将附加卷、更大的卷和/或性能更高的介质的卷添加到虚拟pv 280,比例存储(例如,如果清单282指示高应用i/o、经增加的应用性能、经增加的容量需求、经增加的比例因子等)。前述示例实施方式对于通过针对虚拟pv 280创建更小、更慢和/或更便宜的卷并且将数据迁移到这些卷来缩小容量(例如,如果清单282指示较低的应用i/o、经减小的比例因子等)也可能是有用的。
111.在一些示例用例中,所标识的应用数据存储库简档284可以与数据复制或数据备份有关。例如,即使初始虚拟pv存储类227没有请求备份和/或复制,所标识的应用数据存储库简档284也可以指示容器化应用224具有备份和/或复制。为了例示,输出单个数据库的应用类型可以由管理员经由应用数据存储库简档284来指定,以通过策略引擎242经由备份和/或复制来进行自动数据保护。在另一例示中,被标记用于ci/cd(连续集成/连续交付)或a/b测试的应用类型可以从数据复制中受益,并且因此那些应用类型的对应应用数据存储库简档284可以指定一个或多个复制。在一些实施方式中,卷区域和复制管理器254可以与容器存储接口映射256协调,以类似于上述的方式实现针对虚拟pv 280的备份策略。在一些实施方式中,容器存储接口映射256可以与数据路径管理器258协调,以类似于上文关于例如图1的数据服务提供方134描述的方式,针对数据路径232处的虚拟pv280实现数据复制或镜像。
112.在与复制有关的另一示例用例中,应用清单282可能已指示应用类型执行其自身的复制,这可以被称为应用级复制。在这样的情况下,所标识的应用数据存储库简档284可以指示存储级复制待被关断。因此,容器存储接口映射256可以与数据路径管理器258协调,以在数据路径232处中断对于虚拟pv 280的任何正在进行的数据复制。
113.在一些示例用例中,所标识的应用数据存储库简档284可能与容器化应用224的缓存行为有关。例如,清单282可以指示容器化应用224执行缓存,所标识的应用数据存储库简档284可以指定缓存待被优先化,并且容器存储接口映射256、数据路径管理器258和数据路
径232可以协调来优先化与缓存相关的i/o和/或将与缓存相关的i/o服务于虚拟pv 280的高速存储区域。为了例示,测试postgres实例可以确定频繁访问的文件(例如,日志文件、某些元数据等)被写入文件系统中的特定目录,并且因此,对应的应用数据存储库简档可以被构造为指示虚拟pv被呈现为文件系统安装点,并且对该特定目录的i/o应被确定优先次序。作为响应,虚拟pv管理器250可以与数据路径管理器256和数据路径232协调,以标识针对特定目录的i/o并将其优先化。
114.可以不时(例如,定期性地、按需地、按计划地等)查看应用数据存储库简档284。根据查看,新的简档可以被添加,过时的简档可以被删除,并且现有的简档可以被修改。
115.策略引擎242可以不时地(例如,定期性地、按需地、按计划地等)从容器编排器222中读取最新的应用清单282,并且可以根据当前清单282和匹配的应用数据存储库简档284来更新虚拟pv 280。作为示例,清单282可以随着容器化应用224被缩放而被更新,并且尽管可能存在利用容器化应用224缩放来缩放计算的一些解决方案,但是认为没有解决方案相应地缩放存储。然而,因为如本文所述的策略引擎242,清单282中的比例更改(或任何其他类型的更改)可以在不中断的情况下,对附接到容器化应用224并且由容器化应用224使用的现有虚拟pv 280进行响应性修改。因此,由策略引擎242提供的虚拟pv可以实现以应用为中心的存储策略。
116.在一些实施方式中,所公开的虚拟pv存储类227可以包括指示该虚拟pv存储类227针对其被设计的应用类型(例如,“postgres应用类型”)的参数。策略引擎242可以响应于创建卷请求230来创建虚拟pv 280,创建卷请求230使用与虚拟pv存储类227中指定的应用类型相匹配的应用数据存储库简档284来调用这样的虚拟pv存储类227。因此,在这样的实施方式中,初始虚拟pv 280可以是特定于应用的,并且针对该指定的应用类型而在某种程度上被优化。
117.此外,在虚拟pv存储类227中指定应用类型可以用于供应应用特定的单个底层卷(例如,272),并且在无需涉及数据路径232的情况下,将该单个卷作为虚拟pv 280而直接提供回容器编排器222。在这样的情况下,从一开始就使得虚拟pv 280应用专用是有用的,因为否则如上所述,由于该虚拟pv 280未通过数据路径232而被虚拟化,所以在不中断访问的情况下,稍后更改虚拟pv 280的组成(包括单个卷)可能会很困难。
118.图3和图4是描绘各种示例方法的流程图。在一些实施方式中,可以实质上同时或以与所示出的顺序不同的顺序执行方法的一个或多个框。在一些实施方式中,方法可以包括比所示出的更多或更少的框。在一些实施方式中,方法的一个或多个框可以在某些时间进行和/或可以重复。在一些实施方式中,方法的框可以被组合。
119.在图3和图4中所示的方法可以以机器可读介质上存储并由处理资源执行的可执行指令的形式和/或以电子电路装置的形式来实现。例如,方法的各方面可以在以下被描述为由计算系统上的存储虚拟化系统来执行,存储虚拟化系统的一个示例可以是上述计算系统100上的容器化存储虚拟化系统130,并且可以进一步归因于这样的存储虚拟化系统的策略引擎,诸如上述策略引擎242。附加地,出于非限制性例示的目的,可以参考图2所示的其他元件来描述以下描述的方法的其他方面。
120.图3是描述示例方法300的流程图。方法300从框302开始并且继续至框304,在框304中,基于处理器的存储虚拟化系统130(或其策略引擎142或策略引擎242)从容器编排器
222读取虚拟持久卷被分配至280的容器化应用224的清单282。
121.在框306处,存储虚拟化系统从多个应用数据存储库简档284之中标识与清单282的信息相匹配的应用数据存储库简档284。应用数据存储库简档284中的每一个包括针对相应应用类型而预配置的存储参数。
122.在框308处,存储虚拟化系统根据在框306处标识的应用数据存储库简档284来修改虚拟持久卷280。框308的示例可以如以下关于图4的框414来进一步描述。方法300在框310处结束。
123.图4是描绘示例方法400的流程图。方法400在框402处开始,并且继续至框404,在框404中,存储虚拟化系统接收用于向容器化应用224提供持久存储的创建持久卷请求230。
124.在框406处,存储虚拟化系统根据由创建持久卷请求230指定的虚拟持久虚拟存储类227来创建虚拟持久卷280。如此创建的虚拟pv280被认为具有默认存储策略。
125.在框408处,存储虚拟化系统针对容器化应用224而发起对虚拟pv 280的自主持续调整。持续调整可以包括不时地(例如,定期性地、按需地、按计划地等)重复现在将描述的框410、412和414。
126.在框410处,存储虚拟化系统从容器编排器222读取虚拟持久卷280被分配至的容器化应用224的清单282。框410可以类似于方法300的框304。
127.在框412处,存储虚拟化系统从多个应用数据存储库简档284之中标识与清单282的信息相匹配的应用数据存储库简档284,其中应用数据存储库简档284中的每一个包括针对相应应用类型而预配置的存储参数。框412可以类似于方法300的框306。
128.在框414处,存储虚拟化系统根据在框412处标识的应用数据存储库简档284来修改虚拟持久卷280。从框414得到的经修改的虚拟pv 280'被认为具有经更新的、以应用为中心的存储策略。在一些实施方式中,框414包括修改虚拟pv 280的区域组成,以及在经修改的区域组成之间迁移虚拟pv 280的数据。
129.框414还包括框416、418、420、422、424、426中所描绘的一些非限制性、非互斥的示例用例。例如,在框416处,存储虚拟化系统确定比例更改是否由清单282指示,清单282反映在框412处标识的应用数据存储库简档284中。例如,清单282可以指示利用容器化应用224部署多少个节点,并且该数量可以增加或减少。例如,应用数据存储库简档284可以针对与应用224匹配的应用类型的不同尺寸的配置来预配置。
130.响应于所标识的应用数据存储库简档284与清单282中指示容器化应用224经增加的比例的信息相匹配,在框414处的修改可以包括放大虚拟pv 280。另一方面,响应于所标识的应用数据存储库简档284与清单282中指示容器化应用的经减小的比例的信息相匹配,在框414处的修改可以包括缩小虚拟pv 280。放大或缩小虚拟pv 280可以包括将虚拟pv 280的区域组成改变为各自包括附加的、更大或更快的存储卷,或者更少的、更小或更便宜的存储卷,并且将数据迁移到经改变的区域配置。
131.在框420处,存储虚拟化系统根据在框412处标识的应用数据存储库简档284来确定是否要对数据复制或数据备份进行更改。例如,通过包括例如应用224需要自动数据保护策略的直接或间接指示、应用224具有本机应用级复制的直接或间接指示或应用224是使用复制(例如,用于ci/cd或a/b测试)的类型的直接或间接指示,清单282可以与容器化应用224的数据复制或数据备份有关。
132.响应于框420处的肯定确定,在框422处的存储虚拟化系统可以改变虚拟pv 280的数据复制行为或数据备份行为。在一些实施方式中,数据复制或数据备份可以通过如上所述的卷区域和复制管理器254而由框422至少部分地实现。在其他实施方式中,例如,如果清单282指示存在应用级复制,则由存储虚拟化系统进行的数据复制或数据备份可以通过框422来禁用。
133.在框424处,存储虚拟化系统根据在框412处标识的应用数据存储库简档284来确定是否要对缓存行为进行更改。例如,清单282可以通过直接或间接指示例如容器化应用224实现了缓存、频繁地访问某些数据(这在一些实施方式中可以从图像类型来暗示)等来与缓存行为有关。
134.响应于框424处的肯定确定,存储虚拟化系统在框426处可以使数据路径232开始标识并且优先化来自容器化应用224的缓存数据的读取和写入。例如,对面向文件的虚拟pv 280中与缓存相关的目录的读取和写入可以被优先化。
135.在框428处,存储虚拟化系统确定是否要继续调整。例如,管理员可以禁用调整。如果调整将继续(框428处为“是”),则方法400返回并且重复框410处的读取、框412处的标识以及框414处的修改。如果调整被中断(框428处为“否”),则方法400在框430处结束。
136.图5描绘了示例系统500,示例系统500包括被编码有由处理资源502可执行的示例指令506、508、510的非瞬态机器可读介质504。在一些实施方式中,系统500可以用于实现图1的存储虚拟化系统130或者图2的策略引擎242的各方面或者用于执行图3的方法300或图4的方法400的各方面。例如,指令506、508、510可以被包括在图1的指令105中。在一些实施方式中,相对于图2描述的功能性可以被包括在指令506、508、510中。
137.处理资源502可以包括微控制器、微处理器、(多个)中央处理单元内核、asic、fpga和/或其他适于从机器可读介质504取回和/或执行指令来执行与各种示例相关的功能的硬件设备。附加地或备选地,处理资源502可以包括或耦合到电子电路装置或专用逻辑,以用于执行本文所述的指令的一些或全部功能性。
138.机器可读介质504可以是适合于存储可执行指令的任何介质,诸如ram、rom、eeprom、闪存、硬盘驱动、光盘等。在一些示例实施方式中,机器可读介质504可以是有形的非瞬态介质。机器可读介质504可以被设置在系统500内,在这种情况下,可执行指令可以被视为被安装或嵌入在系统500上。备选地,机器可读介质504可以是便携式(例如,外部)存储介质,并且可能是安装封装的一部分。
139.如下文中进一步描述的,机器可读介质504可以被编码有一组可执行指令506、508、510。应当理解,在另一实施方式中,被包括在一个框中的部分或全部可执行指令和/或电子电路可以被包括在与附图中所示的不同框中或未示出的不同框中。系统500的一些实施方式可以包括比图5中示出的更多或更少的指令。
140.指令506在被执行时,使得处理资源502从容器编排器(例如,222)读取虚拟持久卷(例如,280)被分配至的容器化应用(例如,224)的清单(例如,282)。指令508在被执行时,使得处理资源502从多个应用数据存储库简档(例如,284)中标识与清单的信息相匹配的应用数据存储库简档,应用数据存储库简档各自包括针对相应应用类型预配置的存储参数。指令510在被执行时,使得处理资源502根据由指令508标识的应用数据存储库简档来修改虚拟pv。
141.图6描绘了示例系统600,示例系统600包括处理资源602,处理资源602被耦合到被编码有示例指令606、608、610、612,614、616(统称为指令606

616)的非瞬态机器可读介质604。处理资源602和机器可读介质604可以在很多方面分别类似于处理资源502和机器可读介质504。在一些实施方式中,系统600可以用于实现图1的存储虚拟化系统130或者图2的策略引擎242的各方面或者被用于执行图3的方法300或图4的方法400的各方面。例如,指令606

616可以被包括在图1的指令105中。在一些实施方式中,相对于图2描述的功能性可以被包括在指令606

616中。
142.指令606在被执行时,使得处理资源602接收创建持久卷请求(例如,230),以向容器化应用(例如,224)提供持久存储,并且根据创建持久卷请求所指定的虚拟pv存储类(例如,227)来创建虚拟pv(例如,280)。由指令606创建的虚拟pv被认为具有默认存储策略。
143.指令608在被执行时,使得处理资源602从容器编排器(例如,222)读取虚拟持久卷(例如,280)被分配至的容器化应用(例如,224)的清单(例如282)。指令610在被执行时,使得处理资源502从多个应用数据存储库简档(例如,284)中标识与清单的信息相匹配的应用数据存储库简档,应用数据存储库简档各自包括针对相应应用类型而预配置的存储参数。
144.指令612在被执行时,使得处理资源602根据指令610所标识的应用数据存储库简档来修改虚拟pv。与由指令608创建的虚拟pv相比,执行指令612所产生的经修改的虚拟pv被视为具有经更新的、以应用为中心的存储策略。
145.例如,在一些实施方式中,如果清单的信息指示容器化应用的经增加的比例(例如,经增加的比例因子、性能或存储容量需求),则由指令610标识的应用数据存储库简档将与经增加的比例匹配,并且指令612例如通过添加附加的和/或更高性能的底层存储卷来相应地放大虚拟pv。在一些实施方式中,如果清单的信息指示容器化应用的经减小的比例(例如,经减小的比例因子、性能或存储容量需求),则由指令610标识的应用数据存储库简档将与经减小的比例匹配,并且指令612例如通过将数据迁移到更小和/或更便宜的存储卷来相应地缩小虚拟pv。
146.在另一示例实施方式中,如果清单的信息与容器化应用的数据复制或数据备份有关,则指令612根据所标识的应用数据存储库来更改虚拟pv的数据复制行为或数据备份行为。
147.在另一示例实施方式中,如果清单的信息与容器化应用的缓存行为有关,则指令612可以使得数据路径标识并且优先化对来自容器化应用的缓存数据的读取和写入,以向虚拟pv提供缓存优先次序。
148.指令614在被执行时,使得处理资源602修改虚拟pv的区域组成,并且可以使得处理资源602在经修改的区域组成之中迁移虚拟pv的数据。指令614可以被包括在指令612中或由指令612调用,以执行对虚拟pv的修改的至少一部分。例如,指令614可以被用于通过如上所述更改区域组成来将虚拟pv放大或缩小。
149.指令616在被执行时,使得处理资源602重复读取指令608、标识指令610和修改指令612,以针对容器化应用提供对虚拟持久卷的自主持续调整。例如,指令616可以不时地、定期性地、按计划地、按需地而被自动地、半自动地或手动地执行等。
150.在前面的描述中,阐述了许多细节来提供对本文所公开的主题的理解。然而,实施方式可以在没有一些或所有这些细节的情况下实践。其他实施方式可以包括对上述细节的
修改、组合和变化。所附权利要求书旨在涵盖这样的修改和变化。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜