容器地址分配方法及装置
文献发布时间:2023-06-19 09:35:27
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种容器地址分配方法及装置。
背景技术
容器(container)技术是一种将应用程序及其所需的依赖、类库、配置文件及其他二进制文件等一起打包进行部署的技术,可以使应用程序在切换运行环境时也能顺利运行。
容器在部署后,需要为其分配IP地址才能与其他组件进行通信交互。在一些方案中,采用了为容器动态分配IP地址的方案,但是容器在进行创建、升级、重建时,均会执行申请地址的动作,采用全局动态分配IP地址的方式会导致容器在每次升级或重建后的IP地址发生改变。进而导致对该容器的IP地址依赖较强的组件需要重新配置IP地址才能与该容器进行交互。并且,由于各容器申请地址的时间不同,导致不同类型的容器之间IP地址区域相互穿插,不方便管理,提升了容器的使用和维护复杂度,降低了生产效率。
发明内容
为了克服现有技术中的至少一个不足,本申请的目的之一在于提供一种容器地址分配方法,应用于数据处理设备,所述数据处理设备预先存储有不同容器组的容器组标识对应的地址池;所述方法包括:
接收容器发送的容器地址分配请求,所述容器地址分配请求包括与该容器所在容器组的容器组标识;
查找与所述容器组标识对应的目标地址池;
从所述目标地址池中选取一个可用地址分配给所述容器。
本申请的另一目的在于提供一种容器地址分配装置,应用于数据处理设备,所述数据处理设备预先存储有不同容器组的容器组标识对应的地址池;所述装置包括:
请求接收模块,用于接收容器发送的容器地址分配请求,所述容器地址分配请求包括与该容器所在容器组的容器组标识;
地址池查询模块,用于查找与所述容器组标识对应的目标地址池;
地址分配模块,用于从所述目标地址池中选取一个可用地址分配给所述容器。
本申请的另一目的在于提供提供一种机器可读存储介质,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被一个或多个处理器执行时,所述处理器执行本申请提供的容器地址分配方法。
相对于现有技术而言,本申请至少具有以下有益效果:
本申请提供的容器地址分配方法及装置,在容器发送的容器地址分配请求中携带该容器所在容器组的容器组标识,根据该容器组标识在对应的地址池选择可用地址进行分配。如此,为同一容器组的容器的地址均来自同一地址池,使得同一容器组的地址相对固定,方便了容器的地址依赖配置及容器地址的管理维护。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的数据处理设备的示意图;
图2为本申请实施例提供的容器地址分配方法的流程示意图之一;
图3为本申请实施例提供的容器地址分配方法的流程示意图之二;
图4为本申请实施例提供的容器地址分配装置的功能模块示意图之一;
图5为本申请实施例提供的容器地址分配装置的功能模块示意图之二。
图标:100-数据处理设备;110-容器地址分配装置;111-请求接收模块;112-地址池查询模块;113-地址分配模块;114-地址释放模块;115-地址删除模块;116-容量配置模块;117-地址池分配模块;120-机器可读存储介质;130-处理器。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
请参照图1,图1为本实施例提供的一种数据处理设备的示意图,所述数据处理设备100包括容器地址分配装置110、机器可读存储介质120及处理器130。
所述机器可读存储介质120及处理器130相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述容器地址分配装置110包括至少一个可以软件或固件(firmware)的形式存储于所述机器可读存储介质120中或固化在所述数据处理设备100的操作系统(operatingsystem,OS)中的软件功能模块。所述处理器130用于执行所述机器可读存储介质120中存储的可执行模块,例如所述容器地址分配装置110所包括的软件功能模块及计算机程序等。
其中,所述机器可读存储介质120可以是,但不限于,随机存取存储器(RandomAccess Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable ProgrammableRead-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable ProgrammableRead-Only Memory,EEPROM)等。其中,机器可读存储介质120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。
请参照图2,图2为本实施例提供的一种容器地址分配方法的示意图,下面对该方法的各个步骤进行详细解释。
步骤S110,接收容器发送的容器地址分配请求,所述容器地址分配请求包括与该容器所在容器组对应的容器组标识。
在本实施例中,在创建容器时,可以在容器参数中添加该容器所在容器组的容器组标识,所述容器组可以为具有相似功能或共同实现某种功能的容器的集合。所述容器组标识可以是能够表示容器组在整个运行环境中唯一身份的标识,容器组标识可以是多个字母和数字的组合。
本实施例中,所述数据处理设备100上可以配置用于进行地址池管理的地址池服务程序,该地址池服务程序可以提供用于申请容器地址的地址申请接口。容器在创建时发送容器地址分配请求的动作,可以是调用该地址申请接口,传入该容器的容器组标识,从而向所述地址池服务程序请求获取容器地址。
以kubernetes容器集群管理系统为例,容器组标识可以配置在Pod单元的Annotation注解信息中,Pod单元中的容器在创建时,获取Annotation注解信息中的容器组标识,并通过地址申请接口传递给所述地址池服务程序。
步骤S120,查找与所述容器组标识对应的目标地址池。
在本实施例中,所述数据处理设备100可以预先存储有不同的容器组标识对应的地址池。在步骤S120中,所述地址池服务程序根据容器地址分配请求中的容器组标识,查找与之对应的地址池作为所述目标地址池。
步骤S130,从所述目标地址池中选取一个可用地址分配给所述容器。
在本实施例中,地址池中的地址根据其分配状态的不同可以具有不同的标识。例如,当一个地址为空闲地址时,该地址可以被标识为可用地址。当一个地址被容器申请到,但还尚未被容器正式使用时,该地址可以被标识为预占用地址。但一个地址被容器申请到,且已经被容器正式使用时,该地址可以被标识为已分配地址。
所述地址池服务程序在查询到所述目标地址池后,可以从所述目标地址池中选取一个被标识为可用地址的地址分配给发送所述容器地址分配请求的容器。
基于上述设计,在本实施例提供的方案中,可以根据容器地址分配请求中的容器组标识,在对应的地址池中为容器分配地址,如此,为同一容器组的容器分配的地址均来自同一地址池,使得同一容器组的地址是相对固定的,方便了容器的地址依赖配置及容器地址的管理维护。
可选地,在本实施例步骤S110中,所述容器地址分配请求中还可以包括所述容器的唯一标识,该唯一标识可以为能够标识容器在其容器组中或整个部署环境中唯一身份的标识,如,该容器的通用唯一标识符(Universally Unique Identifier,UUID)。
在一个例子中,请参照图3,在步骤S130之前,本实施例提供的容器地址分配方法还可以包括步骤S210。
步骤S210,查询所述目标地址池中是否存在与所述唯一标识对应的已分配地址。
在本实施例中,地址池中还可以记录有已分配地址与获得该已分配地址的容器的唯一标识的对应关系。所述地址池服务程序在确定所述目标地址池后,可以在该目标地址池中查询是否存在与所述唯一标识对应的已分配地址,即查询是否曾为该容器分配过地址。
若查询到与该唯一标识对应的已分配地址,则执行步骤S220。
若未查询到与该唯一标识对应的已分配地址,则执行步骤S130,并在执行步骤S130后执行步骤S140。
步骤S220,将查询到的所述已分配地址分配给该容器。
在本实施例中,若在步骤S210中查询到与该唯一标识对应的已分配地址表明曾为该容器分配过地址,该容器可能是因为升级或重建等原因再次申请地址,需要为该容器分配曾使用过的相同的地址,则所述地址池服务程序将查询到的所述已分配地址分配给该容器。
若在步骤S210中若未查询到与该唯一标识对应的已分配地址,表明未曾为该容器分配过地址,该容器可能新创建的容器,需要为该容器分配一个新的地址,则所述地址池服务程序执行步骤S130,从所述目标地址池中选取一个可用地址分配给所述容器。
并在步骤S130之后,执行步骤S140,将该可用地址标识为已分配地址,记录该已分配地址与所述容器的唯一标识的对应关系。如此,若该容器之后因升级或重建等原因重新申请地址时,可以根据该容器的唯一标识为其分配曾使用过的地址。
在另一个例子中,在步骤S120之前,所述地址池服务程序也可以直接根据所述容器地址分配请求中的唯一标识,在所有已分配地址查找是否存在与该唯一标识对应的已分配地址。
可选地,在本实施例中,容器在被删除时,可以向所述地址池服务程序发送容器地址释放请求,所述容器地址释放请求包括分配给该容器的已分配地址。
例如,所述地址池服务程序还可以提供地址释放接口,容器在被删除时,可以调用该地址释放接口,传递该容器的地址,以告知地址池服务程序释放为该容器分配的地址。
所述地址池服务程序收到所述容器地址释放请求后,可以将该已分配地址标识为可用地址,并记录该可用地址的释放时间。
在步骤S130中,所述地址池服务程序在所述目标地址池中选择可用地址分配给容器时,从所述目标地址池的可用地址中,选取释放时间最近的可用地址分配给所述容器。
换句话说,在本实施例中,根据各可用地址的释放时间,越晚被释放的可用地址会越先分配给其他容器使用。如此,使得地址池中频繁变动与容器对应关系的地址保持在一定范围内,方便了容器地址的管理和维护。
可选地,在本实施例中,为地址池分配可用地址,并将分配到的可用地址的释放时间配置为0。例如,在创建地址池或地址池在扩容时,将为地址池分配的可用地址的释放时间先配置为0。由于新释放时间0的地址总是最晚被分配容器,从而使这些新分配给地址池的地址被分配给容器的优先级最低。
可选地,在本实施例中,所述地址池服务程序可以周期性地检测地址池中每个可用地址的释放时间,并计算每个可用地址的未使用时长。
若检测到未使用时长达到第一预设时长阈值的可用地址,表明该地址池的地址总量大于该地址池对应的容器组所需要的地址数量,则地址池服务程序从该地址池中删除该可用地址。
可选地,在本实施例中,所述数据处理设备100还记录有各地址池中地址的申请时间,即将可用地址分配到地址池的时间。
所述地址池服务程序可以根据所述申请时间,检测释放时间戳为0的可用地址的未分配时长。
若检测到未分配时长达到第二预设时长阈值的可用地址,表明该地址池的地址总量大于该地址池对应的容器组所需要的地址数量,则地址池服务程序从该地址池中删除该可用地址。
可选地,在本实施例中,所述地址池服务程序可以接收地址池容量配置指令,记录所述地址池配置指令中携带的所述地址池配置的目标地址容量。例如,所述地址池服务程序还可以提供地址容量配置接口,通过调用该接口可以配置各地址池的目标地址容量。
所述地址池服务程序可以周期性地检测地址池中每个可用地址的释放时间,并计算每个可用地址的未使用时长。若检测到未使用时长达到第一预设时长阈值的可用地址,且该地址池中的地址总数大于该地址池的目标地址容量,表明该地址池需要缩容,则所述地址池服务程序从该地址池中删除该可用地址。
或者,所述地址池服务程序可以根据所述申请时间,周期性地检测释放时间戳为0的可用地址的未分配时长。若该地址池中的地址总数大于该地址池的目标地址容量,且地址池的地址总数是否大于该地址池的目标地址容量,则从该地址池中删除该可用地址。
如此,可以对地址池中长期未用的地址的进行清理,从而降低了池内无效地址的长期占用率,提升了地址的整体可用性。
可选地,在本实施例中,所述地址池服务程序在为容器分配地址时,可以从前到后按照已分配地址、预占用地址、释放时间较晚的可用地址、释放时间较早的可用地址的顺序,对目标地址池中的地址进行排序,然后检查在该目标地址池当前的目标地址容量范围内,排序靠前的地址中是否存在可用地址。
若存在,则选择排序最前的可用地址分配给容器。
若不存在,即表示目标地址池当前目标地址容量范围内的地址均为已分配地址或预占用地址,该目标地址池的容量已满,不能继续分配地址,则向容器返回无可用地址的通知。
可选地,在本实施例中,所述地址池服务程序还可以提供对地址池进行新增、查询等接管理接口,通过这些管理接口是对所述地址池服务程序管理的地址池进行配置。
请参照图4,本实施例还提供一种应用于图1所示数据处理设备100的容器地址分配装置110,所述数据处理设备100预先存储有不同容器组的容器组标识对应的地址池;所述容器地址分配装置110可以包括请求接收模块111、地址池查询模块112及地址分配模块113。
请求接收模块111,用于接收容器发送的容器地址分配请求,所述容器地址分配请求包括与该容器所在容器组的容器组标识。
本实施例中,所述请求接收模块111可用于执行图1所示的步骤S110,关于所述请求接收模块111的具体描述可参对所述步骤S110的描述。
地址池查询模块112,用于查找与所述容器组标识对应的目标地址池。
本实施例中,所述地址池查询模块112可用于执行图1所示的步骤S120,关于所述地址池查询模块112的具体描述可参对所述步骤S120的描述。
地址分配模块113,用于从所述目标地址池中选取一个可用地址分配给所述容器。
本实施例中,所述地址分配模块113可用于执行图1所示的步骤S130,关于所述地址分配模块113的具体描述可参对所述步骤S130的描述。
可选地,在本实施例中,所述容器地址分配请求还包括所述容器的唯一标识。
所述地址分配模块113具体用于:查询所述目标地址池中是否存在与所述唯一标识对应的已分配地址;若查询到与该唯一标识对应的已分配地址,则将查询到的所述已分配地址分配给该容器;若未查询到与该唯一标识对应的已分配地址,再从所述目标地址池中选取一个可用地址分配给所述容器,并将该可用地址标识为已分配地址,记录该已分配地址与所述容器的唯一标识的对应关系。
可选地,在本实施例中,所述请求接收模块还用于接收容器发送的容器地址释放请求,所述容器地址释放请求包括分配给该容器的已分配地址。
请参照图5,所述数据处理设备100还可以包括地址释放模块114。
所述地址释放模块114用于将该已分配地址标识为可用地址,并记录该可用地址的释放时间。
所述地址分配模块113具体用于从所述目标地址池的可用地址中,选取释放时间最近的可用地址分配给所述容器。
可选地,在一个例子中,所述数据处理设备100还可以包括地址删除模块115。
所述地址删除模块115用于检测地址池中每个可用地址的释放时间,并计算每个可用地址的未使用时长;若检测到未使用时长达到第一预设时长阈值的可用地址,则从该地址池中删除该可用地址。
可选地,在另一个例子中,所述数据处理设备100还可以包括容量配置模块116及地址删除模块115。
所述容量配置模块116用于接收地址池容量配置指令,记录所述地址池配置指令中携带的所述地址池配置的目标地址容量。
所述地址删除模块115用于检测地址池中每个可用地址的释放时间,并计算每个可用地址的未使用时长;若检测到未使用时长达到第一预设时长阈值的可用地址,且该地址池中的地址总数大于该地址池的目标地址容量,则从该地址池中删除该可用地址。
可选地,在本实施例中,所述数据处理设备100还可以包括地址池分配模块117。
所述地址池分配模块117用于为地址池分配可用地址,并将分配到的可用地址的释放时间配置为0。
可选地,在一个例子中,所述数据处理设备100还记录有各地址池中地址的申请时间。所述数据处理设备100还可以包括地址删除模块115。
所述地址删除模块115用于根据所述申请时间,检测释放时间戳为0的可用地址的未分配时长;若检测到未分配时长达到第二预设时长阈值的可用地址,则从该地址池中删除该可用地址。
可选地,在另一个例子中,所述数据处理设备100还记录有各地址池中地址的申请时间。所述数据处理设备100还可以包括容量配置模块116及地址删除模块115。
所述容量配置模块116用于接收地址池容量配置指令,记录所述地址池配置指令中携带的所述地址池配置的目标地址容量。
所述地址删除模块115用于根据所述申请时间,周期性地检测释放时间戳为0的可用地址的未分配时长;若该地址池中的地址总数大于该地址池的目标地址容量,且地址池的地址总数是否大于该地址池的目标地址容量,则从该地址池中删除该可用地址。
综上所述,本申请提供的容器地址分配方法及装置,在容器发送的容器地址分配请求中携带该容器所在容器组的容器组标识,根据该容器组标识在对应的地址池选择可用地址进行分配。如此,为同一容器组的容器的地址均来自同一地址池,使得同一容器组的地址相对固定,方便了容器的地址依赖配置及容器地址的管理维护。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,仅为本申请的各种实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
- 容器组地址分配方法、装置、设备及存储介质
- 容器集群业务层添加新节点的ip地址分配方法