我们发现,创建的Workflow在执行成功后并没有清理,而是全部都保留了下来,造成空间下的Pod越积越多。其实Argo Workflow是有清理策略的,我们先看看官方文档介绍:https://argoproj.github.io/argo-workflows/cost-optimisation/#limit-the-total-number-of-workflows-and-pods
官方提供了三种建议性的方案,其中TTLStrategy
和PodGC
比较常用一些,一个是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
:
这里需要注意 |