Kubernetes 作业完成后删除 Pod 的最佳方法是什么

res*_*bob 5 containers kubernetes kubectl

我有一种情况,我运行 Kubernetes 作业,然后想在作业完成时删除作业容器在其中运行的 pod。该Kubernetes文件说的是用户的责任,删除吊舱。

但是,我的目标是通过启动一个大喇叭 pod 来运行 CPU 密集型作业,让作业运行,然后在作业完成后,自动取消 pod。我的想法是,当产生收入的工作运行时,为一个昂贵的、资源密集型的 pod 付费是值得的。一旦工作结束,收入流就结束了,我需要削减开支,因此对吊舱进行核破坏。

我正在考虑让我的作业容器中的代码在程序完成后向订阅者接收的发布者发送一条消息。订阅者知道如何运行该命令,kubectl delete jobs/myContainer以取消 pod。

但是,也许有更好的方法。因此,我问。

提前致谢。

Ben*_*ier 6

有一个新的 API,可以在完成后删除作业和所有依赖元素。TTLAfterFinished 。

.spec.ttlSecondsAfterFinished您可以在您的工作属性中定义它。清理工作将X在作业完成或失败后几秒钟进行。

截至 2019 年 3 月 16 日,该 API 处于 alpha 版本,版本为 1.12,并且只能在启用 alpha 功能的情况下使用。


Rad*_*nka 3

为什么需要删除 pod?如果作业成功完成(退出代码 0),则 pod 将完成,它将不再使用 cpu/内存资源,并且应在需要时进行垃圾收集。

  • 谢谢你,拉狄克。从文档中并不清楚 Pod 是否受到 GC。来自文档:_当作业完成时,不会创建更多 Pod,但也不会删除 Pod。由于它们被终止,它们不会出现在 kubectl get pods 中,但它们会出现在 kubectl get pods -a 中。"_ (https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run -to-completion/#job-termination-and-cleanup 当我在 minikube 下本地运行概念验证时,我发现 pod 仍然存在。我想知道你是否知道 GC 上的清理期。再次感谢! (4认同)