我们发现,创建的Workflow在执行成功后并没有清理,而是全部都保留了下来,造成空间下的Pod越积越多。其实Argo Workflow是有清理策略的,我们先看看官方文档介绍:https://argoproj.github.io/argo-workflows/cost-optimisation/#limit-the-total-number-of-workflows-and-pods

官方提供了三种建议性的方案,其中TTLStrategyPodGC比较常用一些,一个是Workflow清理策略,一个是Pod清理策略。我们来看看这两种清理策略的具体逻辑是怎么样的吧。

一、TTLStrategy

执行流程图:

流程简要介绍:

  • wfc.runTTLController 是伴随着Argo Workflow Controller主流程启动,但是是异步执行的任务。该任务负责TTL操作。

  • 通过ttlcontroller.NewController方法创建TTLController,并且在这里会注册对应的EventHandler用于处理完成的Workflow对象:

二、PodGC

我们在之前的源码分析中已经发现有podCleanQueue这么一个队列,用于清理Pod资源。在之前对Argo Workflow Controller的核心流程的介绍中有一个woc.operate操作,该操作执行完成后Workflow核心流程便执行完成了。在这之后还有一个操作便是PodGC处理逻辑

添加到队列的操作行为是deletePod,执行逻辑便是直接删除Kubernetes中对应的Pod

这里需要注意CompletionSuccess的区别。Completion表示Workflow执行完成,Workflow的状态不是Running/Appending/Unknown阻塞状态。Success表示Workflow执行完成,并且exit code0,表示没有错误产生。



Content Menu

  • No labels