CN113296809B - 一种声明式的通用Kubernetes调谐方法 - Google Patents

一种声明式的通用Kubernetes调谐方法 Download PDF

Info

Publication number
CN113296809B
CN113296809B CN202110558547.3A CN202110558547A CN113296809B CN 113296809 B CN113296809 B CN 113296809B CN 202110558547 A CN202110558547 A CN 202110558547A CN 113296809 B CN113296809 B CN 113296809B
Authority
CN
China
Prior art keywords
tuning
resources
declarative
resource
user
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110558547.3A
Other languages
English (en)
Other versions
CN113296809A (zh
Inventor
曹春
汪浩港
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202110558547.3A priority Critical patent/CN113296809B/zh
Publication of CN113296809A publication Critical patent/CN113296809A/zh
Application granted granted Critical
Publication of CN113296809B publication Critical patent/CN113296809B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Abstract

本发明公开一种声明式的通用Kubernetes调谐方法,包括:声明式的监视,声明式的调谐,声明式的更新策略;其中声明式的监视指自动创建用户在配置文件中指定的资源的监视流;声明式的调谐指在调谐循环的每一次循环中调用用户指定的调谐接口,调谐接口只需要返回期望存在的子资源,自动在Kubernetes系统中应用调谐接口返回的调谐结果;声明式的更新策略指内置很多控制策略,通过声明式接口供用户使用,多元化用户对资源的操作选择,并且可以实现对滚动更新的支持。本方法通过封装自定义控制器的常见部分实现声明式的通用调谐,以达到减少开发与运维工作量的目的。对云计算系统中应用的自动化部署、管理与运维有很高的应用价值。

Description

一种声明式的通用Kubernetes调谐方法
技术领域
本发明涉及云计算领域应用的自动化运维,具体是一种声明式的通用Kubernetes调谐方法,属于自动化运维技术领域。
背景技术
随着云应用和平台的复杂性增加,需要同时支持数百甚至数千的应用程序,传统的自动化方法,如使用特制的、指令式的脚本,被证明是难以管理和扩展的。相反,最近越来越流行的自动化工具旨在遵循基础设施即代码(Infrastructure as code,IaC)原则。根据这一原则,基础设施和核心服务的整体配置和状态要用(典型的声明性)代码来定义。然后,借助相关工具,这个刻画了期望状态定义的代码,可以自动转换为正确的指令和API调用,从而产生完全符合期望状态的配置资源。这种将期望状态的定义与实际状态同步的过程被称为状态调谐,一些现代的基础设施和云计算自动化工具都采用了这种方法,其中最受欢迎的是Terraform和基于容器的平台Kubernetes。
Kubernetes已经开始被广泛应用于基础设施自动化和状态调谐的使用场景。它是目前最受欢迎的管理基于容器的应用程序的平台,它从一开始就围绕着状态调谐的概念设计。整个架构可以被认为是一个各个模块通过共享状态存储协作的调谐循环系统。此外,可扩展性是Kubernetes设计中的一个核心方面。通过结合这两个特点,Kubernetes也被用作一个通用的状态调谐引擎,能够调谐定制的、特定于应用程序的资源和状态。为了利用这些功能,应用程序需要正确有效地处理与Kubernetes API的通信和集成,这些并不是简单的工作。
开发人员可以通过Operator来拓展Kubernetes的声明式API,这也是最常用的方式。Operator是对Kubernetes的软件拓展,帮助实现应用程序的自动化部署、升级、管理以及运维。一个Operator是自定义资源定义(CustomResourceDefinition)和自定义控制器的组合,自定义控制器实现了自定义调谐。然而,编写一个Operator并不容易,具有相当高的门槛,并且需要付出大量的精力和时间。Operator开发人员需要具备一定程度的Kubernetes和分布式系统知识,需要写大量的模版代码或者使用代码生成工具。编写出的Operator帮助我们实现了应用程序的自动化运维,但是维护这个Operator却还是要给开发人员带来很大的负担。因此诞生了很多工具,它们都希望帮助开发人员更简单的实现自己的Operator,但它们都带来了新的问题或者有很大的局限性。
发明内容
发明目的:现有的基于自定义调谐的自动化运维方法需要开发运维人员把大量的精力放在编写一些模版代码或者使用代码生成工具上,需要学习Kubernetes API 相关的知识,而且Operator的成熟开发工具都是用Go编写的,也是为Go项目服务的,对其他编程语言的使用者极不友好。本发明针对现有的自动化运维方法的不足和的Operator调谐具备固定范式的特点,提出一种声明式的通用Kubernetes调谐方法,通过实现一个通用控制器,负责所有自定义控制器必须做的一般操作,管理所有与Kubernetes API的交互,开发者只需要提供一个包含特定调谐逻辑的函数,大幅度简化了自定义控制器的开发、部署和管理。
技术方案:一种声明式的通用Kubernetes调谐方法,包括以下内容:
(1)声明式的监视:
用户在配置文件中简单地列出想监视的资源的声明,为所述资源自动创建相应的的监视流;监视流被所有通过配置文件创建的自定义控制器共享,可以创建任意多的自定义控制器来观察同一种资源,而Kubernetes的API服务器只需要发送一个资源监视流。
(2)声明式的调谐
用户提交新的配置文件后,根据所述配置文件启动新的自定义控制器,自定义控制器执行调谐循环,在每次调谐过程中调用用户在配置文件中指定的调谐接口,在Kubernetes系统中应用返回的调谐结果,每次调谐使用以下步骤对Kubernetes系统进行调谐以向期望状态收敛:
步骤1,收集当前系统中与正在处理的资源对象相关的信息;
步骤2,将这些信息整理后发送到用户指定的调谐接口,等待调谐结果;
步骤3,将调谐结果描述的期望存在的资源与当前集群中已经存在的资源做比对,将二者合并得到目标状态;
步骤4,对目标状态中还不存在的资源,创建它,对于已经存在但与目标状态不一致的资源,用配置文件中指定的更新策略更新它;等待一段调谐间隔时间后,重复步骤1-4。
步骤1中收集的相关信息包括3种:
①该资源本身,即父资源,通过触发本次调谐的消息中的信息向Kubernetes的API服务器发送请求检索得到该资源;
②子资源们,通过标签选择器筛选出配置文件中指定类型的子资源;
③相关资源们,根据用户在自定义接口中指定的筛选条件和类型找到的资源。
所述步骤2中的调谐接口,由用户自己定义,可以用任意一种编程语言实现,完成两个翻译过程:
①根据用户配置文件中描述的期望状态对集群进行操作,编排一些Kubernetes原生资源,来完成某个应用的部署、管理与维护;
②根据集群的当前状态中用户关心的部分,设置用户自定义资源的状态字段,供客户端查看。
(3)声明式的更新策略
内置很多更新策略供用户选择,用户在配置文件中指定资源选用的更新策略,自动按照所述更新策略完成更新相关操作,支持滚动更新。
有益效果:与现有技术相比,本发明具有以下优点:
(1)实现所有自定义控制器的一般操作,负责所有与Kubernetes API的交互,大量减少了Operator开发者编写模版代码或者使用代码生成工具的负担,帮助开发者将精力集中在核心的调谐逻辑上;
(2)通过对Kubernetes声明式API的扩展,提供了声明式接口,封装了编写自定义控制器的常见部分,让用户不需要编写任何与Kubernetes交互的代码,只需要在配置文件中描述需要监听的资源、使用的更新策略以及在调谐代码段中描述期望的状态即可;
(3)本发明的方法在实现时充分考虑Kubernetes中自定义控制器可能的需求和行为,提供了获取额外系统状态信息的接口,多种更新策略以便适用于多种多样的情况;
(4)本发明的方法通过网络请求的方式调用用户提供的自定义调谐接口。这个接口只需要提供一个包含控制器特定调谐逻辑函数,并被部署成一个网络服务,信息的传递都采用JSON的形式,所以这个接口可以使用任意主流的编程语言开发实现。用户编写的调谐逻辑也只需要简单的描述期望的状态,不需要去做任何实际的操作,极大的简化了代码的编写。
附图说明
图1为通用调谐系统整体示意图,包括配置文件、通用控制器、用户自定义调谐逻辑等模块;
图2为本发明方法通用控制器中每一轮调谐的示意图;
图3为本发明方法的一个简单调谐逻辑实例。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
一种声明式的通用Kubernetes调谐方法,包括以下内容:
(1)声明式的监视:
用户在配置文件中简单地列出想监视的资源的声明,为所述资源自动创建相应的监视流;
(2)声明式的调谐
调用用户提供并在配置文件中指定的调谐接口,所述调谐接口只需要提供期望存在的资源,所述调谐接口返回的调谐结果会被自动应用在系统中;
(3)声明式的更新策略
提供多种更新策略供用户选择,用户在配置文件中指定资源选用的更新策略,自动按照所述更新策略完成更新相关操作,支持滚动更新。
所谓声明式的监视,具体包括:
(1)在配置文件中指定父资源资源类型,父资源类型只能有一个,是用户通过配置文件定义的自定义控制器需要管理的资源,也是用于描述期望状态的资源,通用控制器会自动对该资源启动监视流;
(2)在配置文件中指定子资源类型,子资源类型可以有一个或多个,是自定义控制器期望存在的资源的类型,子资源们协作以达到期望状态,通用控制器会对每个类型的子资源启动监视流。
对于图3所展示的调谐,父资源类型是Foo、子资源类型只有一个,是Deployment,当在通用控制器中实现这样的调谐时,用户只需要在配置文件中列出Foo和Deployment的类型信息即可,不需要自己去写启动监视流的代码。
对于声明式的调谐,具体解释如下:
用户提交新的配置文件后,得到了新的自定义控制器,通用控制器启动新的自定义控制器,处理所有与Kubernetes API的交互,运行调谐循环,在每次调谐过程中调用用户在配置文件中指定的接口,发送描述期望状态和当前状态的资源,返回的调谐结果中定义了期望存在的资源,在服务端应用调谐结果。
在本实施例中,一次调谐的简单模型如图2所示,包括如下步骤:
步骤1,收集当前状态中与正在处理的资源对象相关的信息;
步骤2,将这些信息整理成调谐请求和调谐上下文,发送到用户指定的调谐接口,等待调谐结果,调谐结果是一组期望存在的资源;
步骤3,将调谐结果描述的期望状态与当前集群实际状态做比对,将二者合并得到目标状态;
步骤4,对目标状态中还不存在的资源,创建它,对于已经存在但与目标状态不一致的资源,用配置文件中指定的更新策略更新它后;等待一段调谐间隔时间后,重复步骤1-4。
在本实例中,调谐接口中的调谐逻辑如图3所示,包括两个翻译过程:
(1)根据用户配置文件中描述的期望状态对集群进行操作,编排一些Kubernetes原生资源,来完成某个应用(例如数据库)的部署、管理与维护;
(2)根据集群的当前状态中用户关心的部分,设置用户自定义资源的状态字段,供客户端查看。
负责管理的自定义资源是Foo,它的spec中只有两个字段deploymentName和replicas,代表期望生成的Deployment资源的名称和指定的副本数量,它的status中只有一个字段availableReplicas,代表集群中实际可用的副本数量。根据当前集群中实际的Deployment的status中的availableReplicas字段可以得知可用的副本数量此刻为0,所以Foo的status的availableReplicas字段的值也要设置为0,这就是第一个翻译过程。而根据这个Foo的deploymentName和replicas会去生成一个名称为example-foo,副本数量为1的Deployment,这就是第二个翻译过程。
对于声明式的更新策略,具体解释如下:
通用控制器内置了很多更新策略,通过声明式接口供用户使用,用户在配置文件中指定即可选择。
更新资源的策略包括5种:
(1)待删除后更新,不更新现有的子资源,直到子资源被其他的客户端删除;
(2)立刻重建,立即删除任何不符合期望状态的子资源,并根据状态中的信息重新创建;
(3)就地更新,立刻就地更新任何不符合期望状态的子资源;
(4)滚动重建,每次调谐删除一个与期望状态不同的子资源,并在处理下一个子资源之前根据期望状态中的信息重新创建子资源;在任意时刻,如果已经更新的子资源中有一个或多个状态检查失败,则暂停滚动更新;
(5)滚动就地更新,每次更新一个不符合期望状态的子资源。如果已经更新的子资源中有一个或多个状态检查失败,则暂停滚动更新。
不同的资源适合不同的更新策略,例如Pod一般会用重新创建,因为当一个Pod已经在Kubernetes中存在,它能修改的只有metadata中的标签和附加说明,spec中的字段都不能修改,如果需要修改,就只能删除重建。而Deployment除了名字和命名空间都可以修改,直接更新原资源即可。
综上所述,使用本发明提供的方法,能够有效简化Kubernetes Operator的开发实现,帮助解决Kubernetes的自动化应用部署、管理与维护问题。本发明针对Kubernetes中的自定义调谐,封装了编写自定义控制器的常见部分,相比现有方法能够极大提升自定义调谐的开发速度并降低运维难度。因此,本方法有较高的应用价值。

Claims (5)

1.一种声明式的通用Kubernetes调谐方法,其特征在于,包括以下内容:
(1)声明式的监视:
用户在配置文件中列出想监视的资源的声明,为所述资源自动创建相应的监视流;
(2)声明式的调谐:
调用用户提供并在配置文件中指定的调谐接口,所述调谐接口只需要提供期望存在的资源,所述调谐接口返回的调谐结果会被自动应用在系统中;
(3)声明式的更新策略:
提供多种更新策略供用户选择,用户在配置文件中指定资源选用的更新策略,自动按照所述更新策略完成更新相关操作,支持滚动更新;
用户提交新的配置文件后,根据所述配置文件启动新的自定义控制器,自定义控制器执行调谐循环,在每次调谐过程中调用用户在配置文件中指定的调谐接口,在Kubernetes系统中应用返回的调谐结果,每次调谐使用以下步骤对Kubernetes系统进行调谐以向期望状态收敛:
步骤1,收集当前系统中与正在处理的资源对象相关的信息;
步骤2,将这些信息整理后发送到用户指定的调谐接口,等待调谐结果;
步骤3,将调谐结果描述的期望存在的资源与当前集群中存在的资源做比对,将二者合并得到目标状态;
步骤4,对目标状态中还不存在的资源,创建它,对于已经存在但与目标状态不一致的资源,用配置文件中指定的更新策略更新它;等待一段调谐间隔时间后,重复步骤1-4;
所述步骤1中收集的相关信息包括3种:
(1)该资源本身,即父资源,通过触发本次调谐的消息中的信息向Kubernetes的API服务器发送请求检索得到该资源;
(2)子资源们,通过标签选择器筛选出配置文件中指定类型的子资源;
(3)相关资源们,根据用户在自定义接口中指定的筛选条件和类型找到的资源。
2.根据权利要求1所述的声明式的通用Kubernetes调谐方法,其特征在于,用户提交的配置文件中需要列出需要监视的资源类型的声明,提交后为所述资源自动创建监视流,所述监视流被所有通过配置文件创建的自定义控制器共享,可以创建任意多的自定义控制器来观察同一种资源,而Kubernetes的API服务器只需要发送一个资源监视流。
3.根据权利要求1所述的声明式的通用Kubernetes调谐方法,其特征在于,所述步骤1中收集的相关信息包括3种:
(1)该资源本身,即父资源,通过触发本次调谐的消息中的信息向Kubernetes的API服务器发送请求检索得到该资源;
(2)子资源们,通过标签选择器筛选出配置文件中指定类型的子资源;
(3)相关资源们,根据用户在自定义接口中指定的筛选条件和类型找到的资源。
4.根据权利要求1所述的声明式的通用Kubernetes调谐方法,其特征在于,所述步骤2中的调谐接口,由用户自己定义,可以用任意一种编程语言实现,完成两个翻译过程:
(1)根据用户配置文件中描述的期望状态对集群进行操作,编排Kubernetes原生资源,来完成某个应用的部署、管理与维护;
(2)根据集群的当前状态中用户关心的部分,设置用户自定义资源的状态字段,供客户端查看。
5.根据权利要求1所述的声明式的通用Kubernetes调谐方法,其特征在于,步骤4中更新资源的策略包括5种:
(1)待删除后更新,不更新现有的子资源,直到它被其他的客户端删除;
(2)立刻重建,立即删除任何不符合期望状态的子资源,并根据状态中的信息重新创建;
(3)就地更新,立刻就地更新任何不符合期望状态的子资源;
(4)滚动重建,每次调谐删除一个与期望状态不同的子资源,并在处理下一个子资源之前根据期望状态中的信息重新创建子资源;在任意时刻,如果已经更新的子资源中有一个或多个状态检查失败,则暂停滚动更新;
(5)滚动就地更新,每次更新一个不符合期望状态的子资源;如果已经更新的子资源中有一个或多个状态检查失败,则暂停滚动更新。
CN202110558547.3A 2021-05-21 2021-05-21 一种声明式的通用Kubernetes调谐方法 Active CN113296809B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110558547.3A CN113296809B (zh) 2021-05-21 2021-05-21 一种声明式的通用Kubernetes调谐方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110558547.3A CN113296809B (zh) 2021-05-21 2021-05-21 一种声明式的通用Kubernetes调谐方法

Publications (2)

Publication Number Publication Date
CN113296809A CN113296809A (zh) 2021-08-24
CN113296809B true CN113296809B (zh) 2023-12-12

Family

ID=77323672

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110558547.3A Active CN113296809B (zh) 2021-05-21 2021-05-21 一种声明式的通用Kubernetes调谐方法

Country Status (1)

Country Link
CN (1) CN113296809B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117149467A (zh) * 2023-10-23 2023-12-01 北京志凌海纳科技有限公司 基于声明式api实现命令式api生命周期的方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111813419A (zh) * 2020-07-09 2020-10-23 浪潮云信息技术股份公司 一种基于kubernetes声明式管理裸机生命周期的方法
CN111984270A (zh) * 2020-08-20 2020-11-24 第四范式(北京)技术有限公司 应用部署方法和系统
CN112000439A (zh) * 2020-08-24 2020-11-27 浪潮云信息技术股份公司 一种实现云原生应用管理虚拟机的方法
CN112000441A (zh) * 2020-08-24 2020-11-27 浪潮云信息技术股份公司 一种基于kubernetes声明式编排管理虚机生命周期的方法
CN112000434A (zh) * 2020-08-14 2020-11-27 苏州浪潮智能科技有限公司 一种基于Kubernetes动态管理服务治理规则配置方法和系统
CN112181764A (zh) * 2020-09-23 2021-01-05 南京南瑞继保电气有限公司 Kubernetes资源数据的监视方法及装置
US11010218B1 (en) * 2020-04-02 2021-05-18 Sap Se Declarative streamlining of dependency consumption

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11010218B1 (en) * 2020-04-02 2021-05-18 Sap Se Declarative streamlining of dependency consumption
CN111813419A (zh) * 2020-07-09 2020-10-23 浪潮云信息技术股份公司 一种基于kubernetes声明式管理裸机生命周期的方法
CN112000434A (zh) * 2020-08-14 2020-11-27 苏州浪潮智能科技有限公司 一种基于Kubernetes动态管理服务治理规则配置方法和系统
CN111984270A (zh) * 2020-08-20 2020-11-24 第四范式(北京)技术有限公司 应用部署方法和系统
CN112000439A (zh) * 2020-08-24 2020-11-27 浪潮云信息技术股份公司 一种实现云原生应用管理虚拟机的方法
CN112000441A (zh) * 2020-08-24 2020-11-27 浪潮云信息技术股份公司 一种基于kubernetes声明式编排管理虚机生命周期的方法
CN112181764A (zh) * 2020-09-23 2021-01-05 南京南瑞继保电气有限公司 Kubernetes资源数据的监视方法及装置

Also Published As

Publication number Publication date
CN113296809A (zh) 2021-08-24

Similar Documents

Publication Publication Date Title
CN111147555B (zh) 一种异构资源混合编排的方法
CN110851145B (zh) 一种基于容器编排的边缘云安装维护方法及系统
CN113569987A (zh) 模型训练方法和装置
CN110569113A (zh) 分布式任务的调度方法及系统、计算机可读存储介质
Souza et al. (Requirement) evolution requirements for adaptive systems
CN113296809B (zh) 一种声明式的通用Kubernetes调谐方法
WO2024002299A1 (zh) 应用管理方法、应用订阅方法及相关设备
CN103678007B (zh) 一种软件的批量部署方法及系统
CN114912255A (zh) 在线仿真实验系统及方法
CN114528186A (zh) 一种模型管理方法、装置及模型管理服务器
CN114489585A (zh) 一种治理功能插件化的微服务开发框架及实现方法
CN113849399A (zh) 多国产化平台下的多机协同软件的自动化测试系统和方法
CN113377497A (zh) 一种基于服务虚拟化的服务开发系统
Baldassari et al. PROTOB a hierarchical object-oriented CASE tool for distributed systems
CN109669671B (zh) 一种基于微服务的多层次自适应方法
CN115016960B (zh) 可配置的rpa机器人全流程信息通知处理方法及系统
CN116011943A (zh) 基于低代码的机器人自动化流程服务系统、方法及介质
CN115454452A (zh) 一种适用于能源工业互联网平台的应用上平台方法
CN113687927A (zh) Flume任务调度配置方法、装置、设备及存储介质
CN113867714A (zh) 一种适配多语言的自动代码生成方法
Saad et al. Wide area bonjourgrid as a data desktop grid: Modeling and implementation on top of redis
Marcato et al. Pysmlib: A Python finite state machine library for EPICS
JP2002108838A (ja) エージェント実行装置およびエージェント実行方法
Farhat et al. Safe Dynamic Reconfiguration of Concurrent Component-based Applications
CN112418796A (zh) 子流程节点激活方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant