CN115309498A - K8s集群的容器状态调整方法、装置、设备及存储介质 - Google Patents
K8s集群的容器状态调整方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115309498A CN115309498A CN202110503884.2A CN202110503884A CN115309498A CN 115309498 A CN115309498 A CN 115309498A CN 202110503884 A CN202110503884 A CN 202110503884A CN 115309498 A CN115309498 A CN 115309498A
- Authority
- CN
- China
- Prior art keywords
- container
- cluster
- pod
- list
- service
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种K8s集群的容器状态调整方法、装置、设备及存储介质,通过在容器正常运行时将容器地址注册至Endpoint列表中,并判断容器是否属于预设停用Pod列表;若属于则将容器地址从Endpoint列表中移出并写入至预设停用Pod列表,在检测到状态调整指令时将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表。由于是将注册到Endpoint列表的容器地址移除然后写入预设停用Pod列表,从而能够在容器正常时暂停其对外提供服务,实现容器状态的在线调整;同时在需要恢复暂停的容器时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表,实现了对容器由暂停访问到正常访问的状态切换,相比于现有的容器只存在正常和异常状态的情况,上述方式增加了K8s集群容器状态管理的灵活性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种K8s集群的容器状态调整方法、装置、设备及存储介质。
背景技术
Kubernetes,简称K8s,是一种容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容等功能。
现有的Kubernetes集群中的容器Pod存在着如下缺点:即Pod的状态只有正常、异常两种状态,Pod在正常状态时可以被服务Service访问,异常状态时需要进行重启(恢复正常)。相应的,介于服务Service和Pod之间的Endpoint也只有两种状态,即Pod正常则在Endpoint列表中注册Pod地址,Pod异常则在Endpoint列表中删除Pod地址两种状态。
但实际上,容器集群部署过程中,Pod经常存在中间状态,即创建容器后暂不使用(此时又不希望销毁容器)的状态。由于上述容器状态的限制,现有的Kubernetes集群就只能在正常和异常这两种状态之间对容器状态进行调整,调整维度单一,灵活性较差。因此,如何使现有的Kubernetes集群能够根据实际业务需求对容器进行不同状态的在线调整,就成了亟待解决的问题。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供了一种K8s集群的容器状态调整方法、装置、设备及存储介质,旨在解决现有的Kubernetes集群无法根据实际业务需求对容器进行不同状态的在线调整,导致Kubernetes集群灵活性较低的技术问题。
为实现上述目的,本发明提供了一种K8s集群的容器状态调整方法,所述方法包括以下步骤:
在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中;
判断所述容器Pod是否属于预设停用Pod列表;
在所述容器Pod属于预设停用Pod列表时,将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表;
在检测到所述容器Pod对应的状态调整指令时,将所述预设停用Pod列表中存储的所述容器地址重新写入至所述Endpoint列表。
优选地,所述将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表的步骤之后,所述方法还包括:
在所述容器地址被写入至所述预设停用Pod列表时,记录所述容器地址的停用时长;
从所述预设停用Pod列表的扩展Endpoint中读取所述容器地址对应的停用时长阈值;
在所述停用时长达到所述停用时长阈值时,生成所述容器Pod对应的状态调整指令。
优选地,所述将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表的步骤之后,所述方法还包括:
在检测到所述容器Pod运行异常时,从所述预设停用Pod列表中移除所述容器地址并对停止所述容器Pod的运行;
在停止运行的所述容器Pod重新启动时,返回执行所述在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中的步骤。
优选地,所述方法还包括:
在多集群模式下,若检测到集群状态调整指令,则根据所述集群状态调整指令确定待暂停的Kubernetes集群;
按预设集群暂停策略对所述待暂停的Kubernetes集群中的集群租户进行逐一暂停,以实现对所述待暂停的Kubernetes集群的暂停访问。
优选地,所述按预设集群暂停策略对所述待暂停的Kubernetes集群中的集群租户进行逐一暂停的步骤,包括:
循环遍历所述待暂停的Kubernetes集群内的所有集群租户,以获取各集群租户对应的集群服务列表;
获取所述集群服务列表中存放的集群服务标识,并根据所述集群服务标识确定待暂停的集群服务;
按预设服务暂停策略对所述待暂停的集群服务进行暂停访问,以实现对所述集群租户的暂停。
优选地,所述按预设服务暂停策略对所述待暂停的集群服务进行暂停访问的步骤,包括:
在检测到服务暂停指令时,确定待暂停的集群服务;
调用预设应用程序接口禁用所述待暂停的集群服务的服务地址,以实现对所述待暂停集群服务的暂停访问。
优选地,所述按预设服务暂停策略对所述待暂停的集群服务进行暂停访问的步骤,还包括:
在检测到服务暂停指令时,确定待暂停的集群服务;
获取所述待暂停的集群服务对应的KUBE-SVC链;
为所述KUBE-SVC链添加KUBE-MARK-DROP标记,并在接收到所述待暂停的集群服务对应的服务访问请求时,根据所述KUBE-MARK-DROP标记丢弃所述服务访问请求中的请求报文,以实现对所述待暂停的集群服务的暂停访问。
此外,为实现上述目的,本发明还提出一种K8s集群的容器状态调整装置,所述装置包括:
容器注册模块,用于在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中;
容器判断模块,用于判断所述容器Pod是否属于预设停用Pod列表;
容器调整模块,用于在所述容器Pod属于预设停用Pod列表时,将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表;
所述容器调整模块,还用于在检测到所述容器Pod对应的状态调整指令时,将所述预设停用Pod列表中存储的所述容器地址重新写入至所述Endpoint列表。
此外,为实现上述目的,本发明还提出一种K8s集群的容器状态调整设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的K8s集群的容器状态调整程序,所述K8s集群的容器状态调整程序配置为实现如上文所述的K8s集群的容器状态调整方法的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有K8s集群的容器状态调整程序,所述K8s集群的容器状态调整程序被处理器执行时实现如上文所述的K8s集群的容器状态调整方法的步骤。
本发明在Kubernetes集群中的容器Pod正常运行时,将容器Pod的容器地址注册至Endpoint列表中,然后判断容器Pod是否属于预设停用Pod列表;在容器Pod属于预设停用Pod列表时,将容器地址从Endpoint列表中移出并写入至预设停用Pod列表,然后在检测到容器Pod对应的状态调整指令时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表。由于是将注册到Endpoint列表中的容器地址移除,然后写入到预设停用Pod列表,从而能够在容器正常时暂停其对外提供服务;同时,在需要对暂停访问的容器恢复访问时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表,实现了对容器由暂停访问到正常访问的状态切换,相比于现有的容器只存在正常和异常的情况,本发明上述方式增加了K8s集群容器状态管理的灵活性。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的K8s集群的容器状态调整设备的结构示意图;
图2为本发明K8s集群的容器状态调整方法第一实施例的流程示意图;
图3为本发明K8s集群的容器状态调整方法第一实施例中扩展Endpoint的示意图;
图4为本发明K8s集群的容器状态调整方法第二实施例的流程示意图;
图5为本发明K8s集群的容器状态调整方法第二实施例中Kubernetes集群多租户模式示意图;
图6为本发明K8s集群的容器状态调整装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的K8s集群的容器状态调整设备结构示意图。
如图1所示,该K8s集群的容器状态调整设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对K8s集群的容器状态调整设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及K8s集群的容器状态调整程序。
在图1所示的K8s集群的容器状态调整设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明K8s集群的容器状态调整设备中的处理器1001、存储器1005可以设置在K8s集群的容器状态调整设备中,所述K8s集群的容器状态调整设备通过处理器1001调用存储器1005中存储的K8s集群的容器状态调整程序,并执行本发明实施例提供的K8s集群的容器状态调整方法。
本实施例一种K8s集群的容器状态调整方法,该方法通过在Kubernetes集群中新增一个停用Pod列表模块(即下述预设停用Pod列表),将需要处于中间状态(容器创建后暂不使用)的Pod的容器地址存放到该预设停用Pod列表,并同步取消Endpoint列表中已注册的该容器地址,使得Pod暂时不对外提供服务,实现了Pod正常时,Kubernetes集群Pod的暂停访问,提高Pod灵活性。
参照图2,图2为本发明K8s集群的容器状态调整方法第一实施例的流程示意图。
本实施例中,所述K8s集群的容器状态调整方法包括以下步骤:
步骤S10:在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中;
需要说明的是,本实施例方法的执行主体可以是Kubernetes集群,又或是Kubernetes集群中能够对集群内的容器进行状态管控的模块或装置,本实施例对此不加以限制。
可理解的是,Pod是Kubernetes创建或部署的最基本单位,每一个Pod都可以封装一个或多个容器、存储资源、独立的网络IP以及管理控制容器运行方式的策略选项等。Kubernetes集群中的Pod是有生命周期的,可以被创建,可以被销毁,一旦被销毁,Pod的生命就永远结束。
在Kubernetes集群中,集群服务(Service)定义一个Pod的逻辑分组和一种可以访问它们的策略。逻辑分组中Pod能够被Service访问到,但Service并不是和Pod直接相连,介于之间的是Endpoint(一个Pod的IP地址和端口列表)。Endpoint是在Service创建Pod逻辑分组后产生,Pod状态正常就在Endpoint列表中添加相应的Pod地址;Pod状态异常则在Endpoint列表中删除相应的Pod地址。
在具体实现中,可先为Kubernetes集群中正常运行的Pod创建容器地址(IP地址和端口),然后将该地址注册到Endpoint列表中。应理解的是,Pod的状态此时是正常的且可以对外提供服务,但为了能够根据实际业务需求对Pod暂停访问,以使Pod处于上述中间状态,本实施例还需要通过预设停用Pod列表来判断该容器是否需要被执行暂停访问的操作。
步骤S20:判断所述容器Pod是否属于预设停用Pod列表;
需要说明的是,所述预设停用Pod列表可以是预先配置的用于对需要暂停访问的Pod的容器地址进行存储的列表。参考图3,本实施例中该预设停用Pod列表包含对一组扩展Endpoint的引用,该扩展Endpoint除包含原有的Endpoint外,还包含停用时长指标字段,该停用时长指标字段中存放有取消对Pod进行暂停的停用时长阈值。
应理解的是,当Pod的标识信息(例如名称、编号等信息)记录在预设停用Pod列表中时,表明该Pod是需要被暂停访问的,反之当Pod的标识信息未记录在预设停用Pod列表中时,表明该Pod当前不需要暂停访问。
在具体实现中,可先获取Pod对应的标识信息,然后判断该标识信息是否存在于预设停用Pod列表中,然后根据判断结果来进行后续操作。
步骤S30:在所述容器Pod属于预设停用Pod列表时,将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表;
应理解的是,若Pod的容器地址存在于Endpoint列表中,则表明该Pod能够被集群外部的应用正常访问,而将容器地址从Endpoint列表中移出后,外部应用就无法访问该容器。现有技术中当容器发生Crash(一般指在计算机系统、程序或服务器运行过程中,因某种原因宕机,或主机、程序停止工作)等异常情况时,该运行异常容器的容器地址将会被取消注册,即该容器地址将被从Endpoint列表中移除,然后在容器重启后,再重新创建容器地址并注册到Endpoint列表。
本实施例为了实现Pod的暂停访问,对于从Endpoint列表中移出的容器地址并不会丢弃,而是将其写入到预设停用Pod列表中,以便后续取消容器的暂停访问。
步骤S40:在检测到所述容器Pod对应的状态调整指令时,将所述预设停用Pod列表中存储的所述容器地址重新写入至所述Endpoint列表。
需要说明的是,所述状态调整指令可以是Pod对应的取消停用指令,即将暂停访问的Pod恢复到可以访问的指令。本实施例中该状态调整指令的生成可以人工触发,也可以由停用时长超时机制触发,该停用时长超时机制可以是容器暂停访问的时长超过设定的停用时长阈值时,自动将暂停访问的Pod恢复到正常访问。
在具体实现中,当检测到容器Pod对应的状态调整指令时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表,以实现容器状态的在线调整。
进一步地,在预设停用Pod列表中存储的容器地址重新写入至Endpoint列表后,该Pod就可以继续对外提供服务,对接收到的服务访问请求进行响应。同时,本实施例中,Kubernetes集群还可通过监听服务Service和对应的Pod的变化,负责生成和维护所有的Endpoints对象,然后定期关联Service和Pod,从而保证Service到Pod的映射总是最新的。
本实施例在Kubernetes集群中的容器Pod正常运行时,将容器Pod的容器地址注册至Endpoint列表中,然后判断容器Pod是否属于预设停用Pod列表;在容器Pod属于预设停用Pod列表时,将容器地址从Endpoint列表中移出并写入至预设停用Pod列表,然后在检测到容器Pod对应的状态调整指令时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表。由于是将注册到Endpoint列表中的容器地址移除,然后写入到预设停用Pod列表,从而能够在容器正常时暂停其对外提供服务;同时,在需要对暂停访问的容器恢复访问时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表,实现了对容器由暂停访问到正常访问的状态切换,相比于现有的容器只存在正常和异常的情况,本实施例上述方式增加了K8s集群容器状态管理的灵活性。
进一步地,为了保证容器状态调整的及时性,避免人工触发状态调整指令时的滞后问题。本实施例提供的K8s集群的容器状态调整方法在上述步骤S40之前,还包括:
步骤S301:在所述容器地址被写入至所述预设停用Pod列表时,记录所述容器地址的停用时长;
需要说明的是,所述停用时长的记录从容器地址被写入至预设停用Pod列表的时刻即开始。
步骤S302:从所述预设停用Pod列表的扩展Endpoint中读取所述容器地址对应的停用时长阈值;
本实施例中,所述扩展Endpoint的示意图可参考图3,如图3所示,扩展Endpoint除包含原有的Endpoint外,还包含停用时长指标字段。其中,原有的Endpoint用于存放容器地址,停用时长指标字段用于存放容器地址对应的停用时长阈值。
步骤S303:在所述停用时长达到所述停用时长阈值时,生成所述容器Po d对应的状态调整指令。
在具体实现中,通过对容器地址停用时长的实时计数,并将该停用时长实时与停用时长阈值进行比对,一旦发现停用时长达到停用时长阈值,即生成容器Pod对应的状态调整指令,以取消对Pod的暂停访问。
进一步地,为了保证被暂停访问的容器出现异常时,能够有效的停止Pod。本实施例提供的K8s集群的容器状态调整方法在上述步骤S30之后,还包括:
步骤S40':在检测到所述容器Pod运行异常时,从所述预设停用Pod列表中移除所述容器地址并对停止所述容器Pod的运行;
可理解的是,容器Pod运行异常可以是容器发生Crash等异常情况。在检测到Pod运行异常时,表明Pod已经无法对外提供服务,需要重启,此时就需要从预设停用Pod列表中移除Pod的容器地址,同时停止运行该Pod。
步骤S50':在停止运行的所述容器Pod重新启动时,返回执行所述在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中的步骤。
在具体实现中,Kubernetes集群对停止运行的Pod将在一段时间后进行重新启动,对于重新启动的Pod,可认为其已经恢复正常运行的状态,此时,即可返回上述步骤S10并执行后续的操作即可。
参考图4,图4为本发明K8s集群的容器状态调整方法第二实施例的流程示意图。
基于上述第一实施例,在本实施例中,所述K8s集群的容器状态调整方法包括:
步骤S10':在多集群模式下,若检测到集群状态调整指令,则根据所述集群状态调整指令确定待暂停的Kubernetes集群。
需要说明的是,在多集群模式下,当某个集群整体运行正常,若需要对集群整体进行暂停访问,则可人工或自动化触发集群状态调整指令。该集群状态调整指令中可携带有需要进行状态调整的Kubernetes集群(即待暂停的Kubernetes集群)的标识信息,该标识信息可以是类似于集群的名称、编号等能够将该集群区别于其他集群的唯一信息。
步骤S20':按预设集群暂停策略对所述待暂停的Kubernetes集群中的集群租户进行逐一暂停,以实现对所述待暂停的Kubernetes集群的暂停访问。
需要说明的是,对Kubernetes集群进行暂停访问,可以是对集群拥有的租户(Namespace)进行逐一暂停,从而实现对整体集群的暂停访问。
当然,作为另一种集群暂停的方式,本实施例还可使用外部负载均衡(如硬件F5)直接调用F5 LTM iControl REST API来禁用虚拟IP地址,从而实现集群正常时,Kubernetes集群的服务Service暂停访问。
具体的,上述F5 LTM iControl REST API的调用方式可如下:
REST Endpoints
Collection URI
/mgmt/tm/ltm/virtualmgmt/tm/ltm/virtual
调用参数:disable/enable。
本实施例在多集群模式下,若检测到集群状态调整指令,则根据集群状态调整指令确定待暂停的Kubernetes集群,然后按预设集群暂停策略对待暂停的Kubernetes集群中的集群租户进行逐一暂停,实现了在集群整体正常的情况下对Kubernetes集群的暂停访问,提高了集群的灵活性。
进一步地,如图5所示,若待暂停的Kubernetes集群采用的是多租户模式,为了更高效的实现对租户的暂停,本实施例中上所述步骤S20'还可包括:
步骤S201':循环遍历所述待暂停的Kubernetes集群内的所有集群租户,以获取各集群租户对应的集群服务列表;
应理解的是,集群服务列表可以是各集群租户下所有服务Service的名称列表。
在具体实现中,可采用循环遍历的方式对待暂停的Kubernetes集群中的集群租户(Namespace)进行依次暂停。具体的,可通过Kubernetes集群的API调用方式/api/v1/namespaces/{namespace}/services以查询租户下所有的服务Service,然后根据查询结果确定各集群租户对应的集群服务列表。
步骤S202':获取所述集群服务列表中存放的集群服务标识,并根据所述集群服务标识确定待暂停的集群服务;
应理解的是,本步骤中的集群服务标识可以是集群租户所能提供的服务的名称、编号等表征服务唯一性的信息。在获取到这些集群服务标识后,即可根据这些标识确定待暂停的集群服务。
步骤S203':按预设服务暂停策略对所述待暂停的集群服务进行暂停访问,以实现对所述集群租户的暂停。
需要说明的是,所述预设服务暂停策略可以是预先配置的用于对集群服务进行暂停访问操作的参照规则和依据。例如,该策略可以是通过包过滤管理工具IPtables来丢弃服务访问请求书数据包,还可以是通过Kubernetes集群提供的IPVS功能来使用IPtables进行包过滤,也可以是使用具有禁用虚拟IP功能的外部负载均衡,如硬件F5来实现。
本实施例在对租户模式下,通过循环遍历Kubernetes集群内的所有集群租户获取各集群租户对应的集群服务列表,然后获取集群服务列表中存放的集群服务标识确定待暂停的集群服务,再按预设服务暂停策略对待暂停的集群服务进行暂停访问,实现了对集群租户正常的情况下对租户的暂停访问,提高了集群租户的灵活性。
进一步地,作为一种实施方式,本实施例中对集群服务进行暂停访问的方式可按以下步骤进行:
步骤1:在检测到服务暂停指令时,确定待暂停的集群服务;
步骤2:调用预设应用程序接口禁用所述待暂停的集群服务的服务地址,以实现对所述待暂停集群服务的暂停访问。
需要说明的是,本实施例中上述服务暂停指令可以人工下达,也可以由监控系统自动化触发,对此不作限制。该服务暂停指令中携带有用于确定待暂停的集群服务的标识。上述预设应用程序接口可以是F5 LTM iControl REST API接口,该接口被调用时,可禁用集群服务Service对应的虚拟IP(VIP),使得外部应用无法访问该服务,相当于是暂停了该服务。具体的接口调用方式参考上述步骤S20',此处不再赘述。
本实施方式通过使用外部负载均衡(如硬件F5),可直接调用F5 LTM iControlREST API禁用VIP地址,实现了Service正常时,Kubernetes集群服务Service的暂停访问。
作为另一种实施方式,本实施例中对集群服务进行暂停访问的方式可按以下步骤进行:
步骤a:在检测到服务暂停指令时,确定待暂停的集群服务;
步骤b:获取所述待暂停的集群服务对应的KUBE-SVC链;
步骤c:为所述KUBE-SVC链添加KUBE-MARK-DROP标记,并在接收到所述待暂停的集群服务对应的服务访问请求时,根据所述KUBE-MARK-DROP标记丢弃所述服务访问请求中的请求报文,以实现对所述待暂停的集群服务的暂停访问。
需要说明的是,IPtables是建立在netfilter(Linux 2.4.x引入的一个子系统)架构基础上的一个包过滤管理工具,最主要的作用是用来做防火墙或透明代理。
实际应用中,Kubernetes集群对IPtables的链进行了扩充,自定义了KU BE-SERVICES,KUBE-NODEPORTS,KUBE-POSTROUTING,KUBE-MAR K-MASQ和KUBE-MARK-DROP五个链,并主要通过为KUBE-SERVICES链(附着在PREROUTING和OUTPUT)增加rule来配制trafficrouting规则来对请求报文进行处理。例如,对于KUBE-MARK-DROP设置标记的请求报文则会被全部丢弃。
可理解的是,Kubernetes集群对每个服务Service都创建了“KUBE-SVC-”链,并在nat表中将KUBE-SERVICES链中每个目标地址是service的数据包导入这个“KUBE-SVC-”链,如果Endpoint尚未创建,KUBE-SVC-链中没有规则,则任何数据包在规则匹配失败后会被KUBE-MARK-DROP。
正常情况下,Kubernetes集群中的Endpoint、Service一经创建,该服务对应的Kube-Svc链将自动创建rule关联Endpoint。因此,本实施例通过在待暂停的集群服务对应的KUBE-SVC链添加KUBE-MARK-DROP标记,使得在接收到该集群服务对应的访问请求时,获取该服务的Endpoint关联的rule,然后根据rule中记录的KUBE-MARK-DROP标记丢弃服务访问请求中的请求报文,以实现对待暂停的集群服务的暂停访问。
当然,考虑到Kubernetes集群的1.8版本引入了IPVS模式,IPVS模式与上述IPtables同样基于Netfilter。因此,作为另一种实现方式,本实施例还可通过Kubernetes集群提供的IPVS功能来使用IPtables方式进行包过滤,丢弃服务访问请求中的请求报文(KUBE-SVC数据包),从而实现对待暂停的集群服务的暂停访问。其中,IPVS可使用IPset来存储需要进行数据包丢弃的流量的源或目标地址。
本实施例从生产实际的需求出发,结合Kubernetes集群调度技术、Iptable、IPVS、负载均衡技术,对集群中需要暂停的服务进行暂停,提高了集群服务的灵活性,有效的避免了大批量Endpoint同时注册、取消注册消耗Kubernetes集群、负载均衡资源的情况。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有K8s集群的容器状态调整程序,所述K8s集群的容器状态调整程序被处理器执行时实现如上文所述的K8s集群的容器状态调整方法的步骤。
参照图6,图6为本发明K8s集群的容器状态调整装置第一实施例的结构框图。
如图6所示,本发明实施例提出的K8s集群的容器状态调整装置包括:
容器注册模块601,用于在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中;
容器判断模块602,用于判断所述容器Pod是否属于预设停用Pod列表;
容器调整模块603,用于在所述容器Pod属于预设停用Pod列表时,将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表;
所述容器调整模块603,还用于在检测到所述容器Pod对应的状态调整指令时,将所述预设停用Pod列表中存储的所述容器地址重新写入至所述Endpoint列表。
本实施例在Kubernetes集群中的容器Pod正常运行时,将容器Pod的容器地址注册至Endpoint列表中,然后判断容器Pod是否属于预设停用Pod列表;在容器Pod属于预设停用Pod列表时,将容器地址从Endpoint列表中移出并写入至预设停用Pod列表,然后在检测到容器Pod对应的状态调整指令时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表。由于是将注册到Endpoint列表中的容器地址移除,然后写入到预设停用Pod列表,从而能够在容器正常时暂停其对外提供服务;同时,在需要对暂停访问的容器恢复访问时,将预设停用Pod列表中存储的容器地址重新写入至Endpoint列表,实现了对容器由暂停访问到正常访问的状态切换,相比于现有的容器只存在正常和异常的情况,本实施例上述方式增加了K8s集群容器状态管理的灵活性。
基于本发明上述K8s集群的容器状态调整装置第一实施例,提出本发明K8s集群的容器状态调整装置的第二实施例。
在本实施例中,所述容器调整模块603,还用于在所述容器地址被写入至所述预设停用Pod列表时,记录所述容器地址的停用时长;从所述预设停用Pod列表的扩展Endpoint中读取所述容器地址对应的停用时长阈值;在所述停用时长达到所述停用时长阈值时,生成所述容器Pod对应的状态调整指令。
进一步地,所述容器调整模块603,还用于在检测到所述容器Pod运行异常时,从所述预设停用Pod列表中移除所述容器地址并对停止所述容器Pod的运行;相应地,所述容器注册模块601,还用于在停止运行的所述容器Pod重新启动时,将所述容器Pod的容器地址注册至Endpoint列表中。
进一步地,所述K8s集群的容器状态调整装置还包括:集群调度模块,用于在多集群模式下,若检测到集群状态调整指令,则根据所述集群状态调整指令确定待暂停的Kubernetes集群;按预设集群暂停策略对所述待暂停的Kubernetes集群中的集群租户进行逐一暂停,以实现对所述待暂停的Kubernetes集群的暂停访问。
进一步地,所述集群调度模块,还用于循环遍历所述待暂停的Kubernetes集群内的所有集群租户,以获取各集群租户对应的集群服务列表;获取所述集群服务列表中存放的集群服务标识,并根据所述集群服务标识确定待暂停的集群服务;按预设服务暂停策略对所述待暂停的集群服务进行暂停访问,以实现对所述集群租户的暂停。
进一步地,所述集群调度模块,还用于在检测到服务暂停指令时,确定待暂停的集群服务;调用预设应用程序接口禁用所述待暂停的集群服务的服务地址,以实现对所述待暂停集群服务的暂停访问。
进一步地,所述集群调度模块,还用于在检测到服务暂停指令时,确定待暂停的集群服务;获取所述待暂停的集群服务对应的KUBE-SVC链;为所述KUBE-SVC链添加KUBE-MARK-DROP标记,并在接收到所述待暂停的集群服务对应的服务访问请求时,根据所述KUBE-MARK-DROP标记丢弃所述服务访问请求中的请求报文,以实现对所述待暂停的集群服务的暂停访问。
本发明K8s集群的容器状态调整装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种K8s集群的容器状态调整方法,其特征在于,所述方法包括以下步骤:
在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中;
判断所述容器Pod是否属于预设停用Pod列表;
在所述容器Pod属于预设停用Pod列表时,将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表;
在检测到所述容器Pod对应的状态调整指令时,将所述预设停用Pod列表中存储的所述容器地址重新写入至所述Endpoint列表。
2.如权利要求1所述的K8s集群的容器状态调整方法,其特征在于,所述将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表的步骤之后,所述方法还包括:
在所述容器地址被写入至所述预设停用Pod列表时,记录所述容器地址的停用时长;
从所述预设停用Pod列表的扩展Endpoint中读取所述容器地址对应的停用时长阈值;
在所述停用时长达到所述停用时长阈值时,生成所述容器Pod对应的状态调整指令。
3.如权利要求1所述的K8s集群的容器状态调整方法,其特征在于,所述将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表的步骤之后,所述方法还包括:
在检测到所述容器Pod运行异常时,从所述预设停用Pod列表中移除所述容器地址并对停止所述容器Pod的运行;
在停止运行的所述容器Pod重新启动时,返回执行所述在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中的步骤。
4.如权利要求1至3任一项所述的K8s集群的容器状态调整方法,其特征在于,所述方法还包括:
在多集群模式下,若检测到集群状态调整指令,则根据所述集群状态调整指令确定待暂停的Kubernetes集群;
按预设集群暂停策略对所述待暂停的Kubernetes集群中的集群租户进行逐一暂停,以实现对所述待暂停的Kubernetes集群的暂停访问。
5.如权利要求4所述的K8s集群的容器状态调整方法,其特征在于,所述按预设集群暂停策略对所述待暂停的Kubernetes集群中的集群租户进行逐一暂停的步骤,包括:
循环遍历所述待暂停的Kubernetes集群内的所有集群租户,以获取各集群租户对应的集群服务列表;
获取所述集群服务列表中存放的集群服务标识,并根据所述集群服务标识确定待暂停的集群服务;
按预设服务暂停策略对所述待暂停的集群服务进行暂停访问,以实现对所述集群租户的暂停。
6.如权利要求5所述的K8s集群的容器状态调整方法,其特征在于,所述按预设服务暂停策略对所述待暂停的集群服务进行暂停访问的步骤,包括:
在检测到服务暂停指令时,确定待暂停的集群服务;
调用预设应用程序接口禁用所述待暂停的集群服务的服务地址,以实现对所述待暂停集群服务的暂停访问。
7.如权利要求5所述的K8s集群的容器状态调整方法,其特征在于,所述按预设服务暂停策略对所述待暂停的集群服务进行暂停访问的步骤,还包括:
在检测到服务暂停指令时,确定待暂停的集群服务;
获取所述待暂停的集群服务对应的KUBE-SVC链;
为所述KUBE-SVC链添加KUBE-MARK-DROP标记,并在接收到所述待暂停的集群服务对应的服务访问请求时,根据所述KUBE-MARK-DROP标记丢弃所述服务访问请求中的请求报文,以实现对所述待暂停的集群服务的暂停访问。
8.一种K8s集群的容器状态调整装置,其特征在于,所述装置包括:
容器注册模块,用于在Kubernetes集群中的容器Pod正常运行时,将所述容器Pod的容器地址注册至Endpoint列表中;
容器判断模块,用于判断所述容器Pod是否属于预设停用Pod列表;
容器调整模块,用于在所述容器Pod属于预设停用Pod列表时,将所述容器地址从所述Endpoint列表中移出并写入至所述预设停用Pod列表;
所述容器调整模块,还用于在检测到所述容器Pod对应的状态调整指令时,将所述预设停用Pod列表中存储的所述容器地址重新写入至所述Endpoint列表。
9.一种K8s集群的容器状态调整设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的K8s集群的容器状态调整程序,所述K8s集群的容器状态调整程序配置为实现如权利要求1至7中任一项所述的K8s集群的容器状态调整方法的步骤。
10.一种存储介质,其特征在于,所述存储介质上存储有K8s集群的容器状态调整程序,所述K8s集群的容器状态调整程序被处理器执行时实现如权利要求1至7任一项所述的K8s集群的容器状态调整方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110503884.2A CN115309498A (zh) | 2021-05-08 | 2021-05-08 | K8s集群的容器状态调整方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110503884.2A CN115309498A (zh) | 2021-05-08 | 2021-05-08 | K8s集群的容器状态调整方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115309498A true CN115309498A (zh) | 2022-11-08 |
Family
ID=83853093
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110503884.2A Pending CN115309498A (zh) | 2021-05-08 | 2021-05-08 | K8s集群的容器状态调整方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115309498A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115640169A (zh) * | 2022-12-22 | 2023-01-24 | 苏州浪潮智能科技有限公司 | 保障主集群停止提供服务的方法、系统、设备和存储介质 |
-
2021
- 2021-05-08 CN CN202110503884.2A patent/CN115309498A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115640169A (zh) * | 2022-12-22 | 2023-01-24 | 苏州浪潮智能科技有限公司 | 保障主集群停止提供服务的方法、系统、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019237584A1 (zh) | 容器的管理方法、装置、计算机设备及存储介质 | |
US11392363B2 (en) | Implementing application entrypoints with containers of a bundled application | |
US8769040B2 (en) | Service providing system, a virtual machine server, a service providing method, and a program thereof | |
US20150067167A1 (en) | Hot pluggable extensions for access management system | |
CN108984266B (zh) | 一种虚拟机的管理方法、装置及系统 | |
CN107005426B (zh) | 一种虚拟网络功能的生命周期管理方法及装置 | |
CN111787126B (zh) | 容器创建方法、服务器及存储介质 | |
US8312513B2 (en) | Authentication system and terminal authentication apparatus | |
CN108073423B (zh) | 一种加速器加载方法、系统和加速器加载装置 | |
CN109923547B (zh) | 程序行为监控设备、分布式对象生成管理设备、存储介质、以及程序行为监视系统 | |
JP2014515858A (ja) | 実行中の命令を再結合する方法および装置 | |
US20240036909A1 (en) | Method, system, and device for modifying internal configuration of virtual machine | |
CN116541184A (zh) | 一种多协议应用框架系统 | |
CN114968776A (zh) | 一种应用程序的检测方法和装置 | |
CN115309498A (zh) | K8s集群的容器状态调整方法、装置、设备及存储介质 | |
JP2018516001A (ja) | 通信装置、システム、方法、及びプログラム | |
US11582168B2 (en) | Fenced clone applications | |
CN108494749B (zh) | Ip地址禁用的方法、装置、设备及计算机可读存储介质 | |
CN109783196B (zh) | 一种虚拟机的迁移方法及装置 | |
US20120265860A1 (en) | Sharing A Hosted Device In A Computer Network | |
US20140366084A1 (en) | Management system, management method, and non-transitory storage medium | |
CN113268401B (zh) | 日志信息的输出方法、装置及计算机可读存储介质 | |
JP5884566B2 (ja) | バッチ処理システム、進捗状況確認装置、進捗状況確認方法、及びプログラム | |
CN111669358B (zh) | 一种批量处理vrouter网络隔离空间的方法和装置 | |
CN112291212A (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 |