CN111767113A - 一种用于实现容器驱逐的方法和装置 - Google Patents

一种用于实现容器驱逐的方法和装置 Download PDF

Info

Publication number
CN111767113A
CN111767113A CN201910256820.XA CN201910256820A CN111767113A CN 111767113 A CN111767113 A CN 111767113A CN 201910256820 A CN201910256820 A CN 201910256820A CN 111767113 A CN111767113 A CN 111767113A
Authority
CN
China
Prior art keywords
container
container unit
successfully
current state
unit
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
Application number
CN201910256820.XA
Other languages
English (en)
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.)
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Wodong Tianjun Information Technology Co Ltd
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 Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Wodong Tianjun Information Technology Co Ltd
Priority to CN201910256820.XA priority Critical patent/CN111767113A/zh
Publication of CN111767113A publication Critical patent/CN111767113A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming 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)
  • Medical Preparation Storing Or Oral Administration Devices (AREA)

Abstract

本发明公开了一种用于实现容器驱逐的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:根据容器单元的运行状态信息,确定所述容器单元未运行成功;检测所述容器单元中包括的容器的当前状态,以及根据所述当前状态确定所述容器单元未运行成功的原因;在确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐所述容器单元的指令。该方法检测出由于物理机无法提供运行环境导致无法成功运行的容器单元,对于该由于物理机无法提供运行环境导致无法成功运行的容器单元不再进行多次的重启操作,提高了运行效率。提高了容器驱逐的准确性,优化了容器的驱逐策略。

Description

一种用于实现容器驱逐的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种用于实现容器驱逐的方法和装置。
背景技术
现有技术中,对于实现容器驱逐,一般在容器长时间处于“未正常运行”的状态(达到时间阈值)时,则将其驱逐。其中,Kubernetes是一种容器集群编排和管理的分布式系统,它将容器调度并运行在集群的多个节点上。当容器单元pod由于某些原因(物理机无法提供运行环境的问题或容器内部程序的问题)导致无法正常运行时,kubernetes会反复重启容器直到容器可以正常运行为止,或者重启时间达到某个时间阈值将其驱逐。
在上述处理过程中,如果由于物理机自身的问题导致容器无法运行,容器重启运行所依赖的外部环境不发生改变的情况下,在同一个节点上反复重启容器是没有作用的。现有的技术是针对反复重启的容器作驱逐,从而使容器被重新调度到其他节点。但是该方法无法判断容器运行失败的原因是外部环境问题导致,还是应用程序自身问题导致。如果原因是前者,那么即使重新调度容器,也还是无法运行,如果一直重启容器的话会降低了运行效率。并且在不确定是否由外部环境问题导致的情况下就将容器驱逐,也降低了驱逐的准确性。
发明内容
有鉴于此,本发明实施例提供一种用于实现容器驱逐的方法和装置,能够检测出由于物理机无法提供运行环境导致无法成功运行的容器单元,对于该由于物理机无法提供运行环境导致无法成功运行的容器单元不再进行多次的重启操作,提高了运行效率。并且驱逐的都是不论重启多少次都无法正常运行的容器单元,所以提高了容器驱逐的准确性,优化了容器的驱逐策略。
为实现上述目的,根据本发明实施例的一个方面,提供了一种用于实现容器驱逐的方法。
本发明实施例的用于实现容器驱逐的方法包括:根据容器单元的运行状态信息,确定所述容器单元未运行成功;检测所述容器单元中包括的容器的当前状态,以及根据所述当前状态确定所述容器单元未运行成功的原因;在确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐所述容器单元的指令。
可选地,检测所述容器单元中包括的容器的当前状态的步骤包括:获取所述容器单元中包括的容器的状态字段;根据所述状态字段确定所述容器单元中包括的容器的当前状态。
可选地,确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的步骤包括:确定所述容器单元中包括的容器的当前状态属于预定义的待驱逐状态集合;所述当前状态持续时间超过预设阈值的情况下,确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境。
可选地,所述待驱逐状态集合包括:沙盒容器无法运行、初始化容器正在创建、普通容器正在创建;其中,
沙盒容器无法运行的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是PodInitializing;
初始化容器正在创建的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是ContainerCreating;
普通容器正在创建的字段信息为:PodScheduled=true,Initialized=true,普通容器的Waiting是ContainerCreating。
可选地,在生成驱逐所述容器单元的指令之后,还包括:创建所述容器单元的替代副本;调度所述替代副本,并将所述替代副本与节点绑定,使得所述替代副本在所述节点上启动运行。
为实现上述目的,根据本发明实施例的另一个方面,提供了一种用于实现容器驱逐的装置。
本发明实施例的用于实现容器驱逐的装置包括:
确定未运行成功模块,用于根据容器单元的运行状态信息,确定所述容器单元未运行成功;
当前状态检测模块,用于检测所述容器单元中包括的容器的当前状态,以及根据所述当前状态确定所述容器单元未运行成功的原因;
指令模块,用于在确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐所述容器单元的指令。
可选地,所述当前状态检测模块还用于,获取所述容器单元中包括的容器的状态字段;根据所述状态字段确定所述容器单元中包括的容器的当前状态。
可选地,所述当前状态检测模块还用于确定所述容器单元中包括的容器的当前状态属于预定义的待驱逐状态集合;所述当前状态持续时间超过预设阈值的情况下,确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境。
可选地,本发明实施例的用于实现容器驱逐的装置还包括替代副本创建模块,用于创建所述容器单元的替代副本;以及,调度所述替代副本,并将所述替代副本与节点绑定,使得所述替代副本在所述节点上启动运行。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种电子设备。
本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一项的用于实现容器驱逐的方法。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现上述任一项的用于实现容器驱逐的方法。
上述发明中的一个实施例具有如下优点或有益效果:确定容器单元未运行成功后,检测容器单元中包括的容器的当前状态,则可确定出容器单元未运行成功的原因。在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。本发明可检测出由于外部环境问题(物理机无法提供运行环境)导致无法成功运行的容器单元,进而优化了容器的驱逐策略,解决了现有技术中因无法判断容器单元运行失败是否为外部环境问题导致,进行很多次的无效重启的问题。以及,克服了现有技术在不确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,就将去驱逐进而降低驱逐准确率的问题。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的用于实现容器驱逐的方法的主要流程的示意图;
图2是根据本发明实施例的用于实现容器驱逐的方法的示意图;
图3是根据本发明实施例的基于kubernetes的容器驱逐的方法的示意图;
图4是根据本发明实施例的descheduler与kubernetes交互架构的示意图;
图5是根据本发明实施例的用于实现容器驱逐的装置的主要模块的示意图;
图6是本发明实施例可以应用于其中的示例性系统架构图;
图7是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的用于实现容器驱逐的方法的主要流程的示意图,如图1所示,本发明实施例的用于实现容器驱逐的方法主要包括:
步骤S101:根据容器单元的运行状态信息,确定容器单元未运行成功。容器单元的运行状态信息是指记载容器单元的运行状态列表中的信息。在本发明实施例中,根据容器单元的运行状态信息,确定容器单元未运行成功是指:通过容器单元的运行状态列表中记录可确定其未运行成功,例如运行状态列表中记录其运行状态为“已经被调度但未成功运行”,则根据该信息可确定容器单元未运行成功。
步骤S102:检测容器单元中包括的容器的当前状态,以及根据当前状态确定容器单元未运行成功的原因。容器单元是容器的一种抽象表示,它可以包含一个或多个容器实例,是容器管理系统最小的管理、调度单位。在本发明实施例中,该容器单元可为pod,pod是Kubernetes(开源的容器集群编排和管理系统)的最小单元,容器包含在pod中,一个pod中有一个pause容器和若干个业务容器。pod内部在管理多个业务上紧密相关的用户业务容器,这种架构便于Kubernetes做扩展。
步骤S103:在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,即使重新调度容器单元,也还是无法运行的。
根据本发明实施例,确定容器单元未运行成功后,检测容器单元中包括的容器的当前状态,则可确定出容器单元未运行成功的原因。在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。对于因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元,由于其由于外部环境问题导致无法成功运行,所以不论应用程序自身是否有问题,其重启多少次都不会运行成功。本发明可检测出由于外部环境问题(物理机无法提供运行环境)导致无法成功运行的容器单元,不会对该容器进行很多次的无效重启,进而优化了容器的驱逐策略,提高了运行效率。对于不是因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元,其在应用程序自身不存在问题的情况下,再多重启几次就有可能运行成功,解决现有技术中对于所有容器单元重启固定时间后都将其驱逐(其中可能包含应用程序自身不存在问题,不是因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元)导致驱逐准确率降低的问题。
图2是根据本发明实施例的用于实现容器驱逐的方法的示意图;如图2所示,本发明实施例的用于实现容器驱逐的方法包括:
步骤S201:根据容器单元的运行状态信息,确定容器单元未运行成功。在本发明实施例中,可能已经对容器单元进行了多次重启,在重启时间超过预设的时间阈值,或者重启次数超过预设的次数阈值,则将该容器单元的运行状态信息记录为“未运行成功”。在另一发明实施例中,也可在容器单元进行一次启动后,发现其未运行成功,则不再重启,将该容器单元的运行状态信息记录为“未运行成功”。
步骤S202:获取容器单元中包括的容器的状态字段,根据状态字段确定容器单元中包括的容器的当前状态。确定容器单元中包括的容器的当前状态的方法不限于本实施例中通过容器的状态字段的方式,上述具体实施方式,并不构成对本发明保护范围的限制。
步骤S203:确定容器单元中包括的容器的当前状态属于预定义的待驱逐状态集合。待驱逐状态集合包括:沙盒容器无法运行、初始化容器正在创建、普通容器正在创建。其中,沙盒容器为sandbox容器,初始化容器为init容器,普通容器为regular容器。
pod中的容器包括:sandbox容器、init容器、regular容器。在容器单元pod运行的过程中,sandbox容器先创建,它为init容器和regular容器构建了基础运行环境。然后init容器运行,它负责初始化应用程序需要的配置信息和数据等。regular容器最后运行,它负责执行应用程序的业务逻辑。
对于待驱逐状态集合中的状态,其对应的字段信息如下:
沙盒容器无法运行的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是PodInitializing;
初始化容器正在创建的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是ContainerCreating;
普通容器正在创建的字段信息为:PodScheduled=true,Initialized=true,普通容器的Waiting是ContainerCreating。
对于上述字段信息,其具体解释如下:
PodScheduled=true表示pod被调度成功,Initialized=false表示init容器未成功退出,init容器的Waiting是PodInitializing表示sandbox正在创建中;
PodScheduled=true表示pod被调度成功,Initialized=false表示init容器未成功退出,init容器的Waiting是ContainerCreating表示init容器正在创建;
PodScheduled=true表示pod被调度成功,Initialized=true表示init容器成功退出,regular容器的Waiting是ContainerCreating表示regular容器正在创建。
步骤S204:当前状态持续时间超过预设阈值的情况下,确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境。
步骤S205:生成驱逐容器单元的指令。在该步骤之后,还可重新调度该容器单元。具体的,创建容器单元的替代副本;调度替代副本,并将替代副本与节点绑定,使得替代副本在节点上启动运行。
根据本发明实施例,确定容器单元未运行成功后,检测容器单元中包括的容器的当前状态,则可确定出容器单元未运行成功的原因。在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。本发明可检测出由于外部环境问题(物理机无法提供运行环境)导致无法成功运行的容器单元,进而优化了容器的驱逐策略,提高了运行效率和容器驱逐的准确性。
图3是根据本发明实施例的基于kubernetes的容器驱逐的方法的示意图,图4是根据本发明实施例的descheduler与kubernetes交互架构的示意图。
如图3和图4所示,本发明实施例的基于kubernetes的容器驱逐的方法包括:
步骤S301:pod-1在node-1上启动,但没有成功运行,kubelet将其未运行成功的状态上报至apiserver。Kubelet用于管理和监控节点上的pod。node为集群中的节点,对应一台物理机。
步骤S302:确认pod-1的运行状态为“已经被调度但未成功运行”。descheduler定期从apiserver上获取pod运行状态列表,并检查pod的运行状态。当发现pod-1处于“已经被调度但未成功运行”的状态,说明pod-1未运行成功。apiserver为kubernetes其他组件提供api访问,它直接读写etcd。etcd为一种分布kv数据库(键值数据库),为kubernetes提供数据持久化服务。
步骤S303:检测pod-1的状态和pod-1中包括的容器的当前状态。
pod中的容器包括:sandbox容器、init容器、regular容器。以及,pod中的容器的运行流程主要包括以下步骤:
(1)sandbox容器运行;
(2)init容器拉镜像;
(3)init容器创建;
(4)init容器启动;
(5)init容器运行;
(6)init容器成功退出;
(7)regular容器拉镜像;
(8)regular容器创建;
(9)regular容器启动;
(10)regular容器运行。
descheduler在判断pod是否应当被驱逐时,需要检测pod的状态字段和其包括的容器的状态字段。其中,pod的状态字段包括以下三个(字段值为true或false):
(1)PodScheduled:如果pod被调度成功,则置为true;否则置为false。
(2)Initialized:当init容器运行成功并退出后,regular容器再启动。如果init容器成功退出,则initialized被置为true。
(3)Ready:如果regular容器运行成功,则被置为true;如果运行失败,则被置为false。
Pod中包括的容器的状态字段包括:
(1)Waiting:容器运行之前的状态,包括拉镜像、创建、启动。
(2)Running:容器运行起来。
(3)Terminated:容器成功退出。
对于pod中容器的状态,descheduler只关心Waiting状态,因为该状态才表示容器未运行起来,而Waiting又细分为以下几种原因:
(1)PodInitializing:对于init容器来说,该原因表示sandbox正在创建中;对于regular容器来说,该原因表示init容器未成功退出。
(2)ImagePullBackOff:表示拉镜像失败。
(3)ContainerCreating:表示容器正在创建。
(4)RunContainerError:表示容器执行启动命令时失败。
(5)CrashLoopBackOff:表示容器启动成功,但是运行失败。
以上运行流程以及pod状态和容器状态的变化如下表:
Figure BDA0002013978380000101
pod长时间处于上述表中的第1、3、8阶段,由于这三个阶段直接依赖于物理机上的软件或硬件环境,如果这三个阶段失败,一定是物理机环境的问题。所以上述1、3、8阶段表示容器无法运行的原因是外部环境问题导致,该三个阶段的字段信息分别为:
(1)sandbox无法运行:PodScheduled=true,Initialized=false,init容器的Waiting是PodInitializing;
(2)init容器正在创建:PodScheduled=true,Initialized=false,init容器的Waiting是ContainerCreating;
(3)regular容器正在创建:PodScheduled=true,Initialized=true,regular容器的Waiting是ContainerCreating。
步骤S304:根据检测的状态确认pod-1未运行成功的原因是其运行的物理机无法提供运行环境,生成驱逐容器单元的指令。所以,descheduler只需要判断以上三种情况的状态字段的取值:当pod处于这三种状态(sandbox无法运行、init容器正在创建、regular容器)之一,并且持续时间超过一定的阈值时,即可认为pod无法运行的原因是由外部环境问题导致。
步骤S305:向apiserver发出evict请求(驱逐的指令)。evict:驱逐,即将pod从node上删除。
步骤S306:node-1上的kubelet接收到evict请求,将pod-1从node-1上删除,并将已被删除的状态同步到apiserver。
步骤S307:controller-manager监听apiserver时,发现pod-1被删除,则创建pod-1的替代副本,称为pod-2,并将pod-2同步到apiserver。controller-manager用于维护pod副本数量,使之与用户期望的数量一致。
步骤S308:scheduler监听apiserver时,发现pod-2被创建但没有被调度,则执行调度算法选择一个合适的node(该node可能是node-1或可能不是node-1)与pod-2绑定。Scheduler用于调度pod,使pod与合适的node绑定。在本发明实施例中,由于node-1无法提供运行环境,则在该过程中,可避免与node-1绑定,选择其他的节点node-2与pod-2绑定。如果pod-2与node-2绑定,则node-2上的kubelet从apiserver上监听到此状态变更,就在node-2上创建pod-2。
在本发明实施例中,descheduler定期从apiserver上获取所有pod的信息,并过滤出已经被调度到node上但没有正常运行的pod,确定pod应当被驱逐后将其驱逐,进而触发scheduler的对新pod的重新调度,新创建的pod将以一定概率被调度其他node上,因此可实现使pod不在同一个节点上反复重启。以及,本发明实施例确定pod未运行成功后,检测pod中包括的容器的当前状态,则可确定出pod未运行成功的原因。在确定pod未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐pod的指令。本发明可检测出由于外部环境问题(物理机无法提供运行环境)导致无法成功运行的pod,进而优化了descheduler的驱逐策略,提高了容器驱逐的准确性。
图5是根据本发明实施例的用于实现容器驱逐的装置的主要模块的示意图,如图5所示,本发明实施例的用于实现容器驱逐的装置300包括确定未运行成功模块501、当前状态检测模块502和指令模块503。
确定未运行成功模块501用于,根据容器单元的运行状态信息,确定容器单元未运行成功。
当前状态检测模块502用于,检测容器单元中包括的容器的当前状态,以及根据当前状态确定容器单元未运行成功的原因。当前状态检测模块还用于,获取容器单元中包括的容器的状态字段;根据状态字段确定容器单元中包括的容器的当前状态。
当前状态检测模块还用于确定容器单元中包括的容器的当前状态属于预定义的待驱逐状态集合;当前状态持续时间超过预设阈值的情况下,确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境。其中,待驱逐状态集合包括:沙盒容器无法运行、初始化容器正在创建、普通容器正在创建。
沙盒容器无法运行的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是PodInitializing;
初始化容器正在创建的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是ContainerCreating;
普通容器正在创建的字段信息为:PodScheduled=true,Initialized=true,普通容器的Waiting是ContainerCreating。
指令模块503用于,在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。
本发明实施例的用于实现容器驱逐的装置还可包括替代副本创建模块,在指令模块生成驱逐容器单元的指令之后,用于创建容器单元的替代副本;以及,调度替代副本,并将替代副本与节点绑定,使得替代副本在节点上启动运行。
根据本发明实施例,确定容器单元未运行成功后,检测容器单元中包括的容器的当前状态,则可确定出容器单元未运行成功的原因。在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。对于因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元,由于其由于外部环境问题导致无法成功运行,所以不论应用程序自身是否有问题,其重启多少次都不会运行成功。本发明可检测出由于外部环境问题(物理机无法提供运行环境)导致无法成功运行的容器单元,不会对该容器进行很多次的无效重启,进而优化了容器的驱逐策略,提高了运行效率。对于不是因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元,其在应用程序自身不存在问题的情况下,再多重启几次就有可能运行成功,解决现有技术中对于所有容器单元重启固定时间后都将其驱逐(其中可能包含应用程序自身不存在问题,不是因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元)导致驱逐准确率降低的问题。
图6示出了可以应用本发明实施例的用于实现容器驱逐的方法或用于实现容器驱逐的装置的示例性系统架构600。
如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果反馈给终端设备。
需要说明的是,本发明实施例所提供的用于实现容器驱逐的方法一般由服务器605执行,相应地,用于实现容器驱逐的装置一般设置于服务器605中。
应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图7,其示出了适于用来实现本发明实施例的终端设备的计算机系统700的结构示意图。图7示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取确定未运行成功模块、当前状态检测模块和指令模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,确定未运行成功模块还可以被描述为“根据容器单元的运行状态信息,确定所述容器单元未运行成功的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:根据容器单元的运行状态信息,确定容器单元未运行成功;检测容器单元中包括的容器的当前状态,以及根据当前状态确定容器单元未运行成功的原因;在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。
根据本发明实施例,确定容器单元未运行成功后,检测容器单元中包括的容器的当前状态,则可确定出容器单元未运行成功的原因。在确定容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐容器单元的指令。对于因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元,由于其由于外部环境问题导致无法成功运行,所以不论应用程序自身是否有问题,其重启多少次都不会运行成功。本发明可检测出由于外部环境问题(物理机无法提供运行环境)导致无法成功运行的容器单元,不会对该容器进行很多次的无效重启,进而优化了容器的驱逐策略,提高了运行效率。对于不是因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元,其在应用程序自身不存在问题的情况下,再多重启几次就有可能运行成功,解决现有技术中对于所有容器单元重启固定时间后都将其驱逐(其中可能包含应用程序自身不存在问题,不是因为其运行的物理机无法提供运行环境的原因未运行成功的容器单元)导致驱逐准确率降低的问题。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (11)

1.一种用于实现容器驱逐的方法,其特征在于,包括:
根据容器单元的运行状态信息,确定所述容器单元未运行成功;
检测所述容器单元中包括的容器的当前状态,以及根据所述当前状态确定所述容器单元未运行成功的原因;
在确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐所述容器单元的指令。
2.根据权利要求1所述的方法,其特征在于,检测所述容器单元中包括的容器的当前状态的步骤包括:
获取所述容器单元中包括的容器的状态字段;
根据所述状态字段确定所述容器单元中包括的容器的当前状态。
3.根据权利要求1所述的方法,其特征在于,确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的步骤包括:
确定所述容器单元中包括的容器的当前状态属于预定义的待驱逐状态集合;
所述当前状态持续时间超过预设阈值的情况下,确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境。
4.根据权利要求3所述的方法,其特征在于,所述待驱逐状态集合包括:沙盒容器无法运行、初始化容器正在创建、普通容器正在创建;其中,
沙盒容器无法运行的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是PodInitializing;
初始化容器正在创建的字段信息为:PodScheduled=true,Initialized=false,初始化容器的Waiting是ContainerCreating;
普通容器正在创建的字段信息为:PodScheduled=true,Initialized=true,普通容器的Waiting是ContainerCreating。
5.根据权利要求1所述的方法,其特征在于,在生成驱逐所述容器单元的指令之后,还包括:
创建所述容器单元的替代副本;
调度所述替代副本,并将所述替代副本与节点绑定,使得所述替代副本在所述节点上启动运行。
6.一种用于实现容器驱逐的装置,其特征在于,包括:
确定未运行成功模块,用于根据容器单元的运行状态信息,确定所述容器单元未运行成功;
当前状态检测模块,用于检测所述容器单元中包括的容器的当前状态,以及根据所述当前状态确定所述容器单元未运行成功的原因;
指令模块,用于在确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境的情况下,生成驱逐所述容器单元的指令。
7.根据权利要求6所述的装置,其特征在于,所述当前状态检测模块还用于,获取所述容器单元中包括的容器的状态字段;根据所述状态字段确定所述容器单元中包括的容器的当前状态。
8.根据权利要求6所述的装置,其特征在于,所述当前状态检测模块还用于确定所述容器单元中包括的容器的当前状态属于预定义的待驱逐状态集合;所述当前状态持续时间超过预设阈值的情况下,确定所述容器单元未运行成功的原因是其运行的物理机无法提供运行环境。
9.根据权利要求6所述的装置,其特征在于,还包括替代副本创建模块,用于创建所述容器单元的替代副本;以及,调度所述替代副本,并将所述替代副本与节点绑定,使得所述替代副本在所述节点上启动运行。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
11.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
CN201910256820.XA 2019-04-01 2019-04-01 一种用于实现容器驱逐的方法和装置 Pending CN111767113A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910256820.XA CN111767113A (zh) 2019-04-01 2019-04-01 一种用于实现容器驱逐的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910256820.XA CN111767113A (zh) 2019-04-01 2019-04-01 一种用于实现容器驱逐的方法和装置

Publications (1)

Publication Number Publication Date
CN111767113A true CN111767113A (zh) 2020-10-13

Family

ID=72718754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910256820.XA Pending CN111767113A (zh) 2019-04-01 2019-04-01 一种用于实现容器驱逐的方法和装置

Country Status (1)

Country Link
CN (1) CN111767113A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112540829A (zh) * 2020-12-16 2021-03-23 恒生电子股份有限公司 容器组驱逐方法、装置、节点设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112540829A (zh) * 2020-12-16 2021-03-23 恒生电子股份有限公司 容器组驱逐方法、装置、节点设备及存储介质

Similar Documents

Publication Publication Date Title
CN106657314B (zh) 跨数据中心数据同步系统及方法
CN109558260B (zh) Kubernetes故障排除系统、方法、设备及介质
US8464269B2 (en) Handling and reporting of object state transitions on a multiprocess architecture
CN111666134A (zh) 一种分布式任务调度的方法和系统
CN115964153A (zh) 一种异步任务处理方法、装置、设备以及存储介质
CN107526838B (zh) 数据库集群扩容的方法和装置
CN113051055A (zh) 一种任务处理方法和装置
CN113760924B (zh) 一种分布式事务的处理方法和装置
CN111488316B (zh) 文件缓存回收方法及装置
CN112825525B (zh) 用于处理事务的方法和装置
CN111767113A (zh) 一种用于实现容器驱逐的方法和装置
CN117076096A (zh) 任务流程的执行方法、装置、计算机可读介质及电子设备
CN111767126A (zh) 分布式批量处理的系统和方法
CN114785861B (zh) 一种服务请求转发系统、方法、计算机设备和存储介质
CN113391896B (zh) 任务处理方法及装置、存储介质及电子设备
US20180373512A1 (en) Method and device for simulating synchronous blocking in asynchronous environment, storage medium, server and terminal
CN106933449B (zh) 图标处理方法和装置
CN112182003A (zh) 一种数据同步方法和装置
CN113656239A (zh) 针对中间件的监控方法、装置及计算机程序产品
CN113742376A (zh) 一种同步数据的方法、第一服务器以及同步数据的系统
CN113778527A (zh) 用于控制流水线任务的状态的方法和装置
CN112749042B (zh) 一种应用运行方法和装置
CN113779451A (zh) 一种页面加载方法和装置
CN113127443A (zh) 一种更新缓存数据的方法和装置
CN112306746A (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