Kubernetes工作清理

Lio*_*gev 25 jobs kubernetes

根据我的理解,Job对象应该在一定时间后收获pod.但是在我的GKE集群(Kubernetes 1.1.8)上,似乎"kubectl get pods -a"可以从几天前列出pod.

所有都是使用Jobs API创建的.

我注意到用kubectl删除作业删除作业后,pod也被删除了.

我主要担心的是,我将在批处理作业中在集群上运行数千和数万个pod,并且不希望重载内部积压系统.

JJC*_*JJC 53

它看起来像是从Kubernetes 1.6(和v2alpha1 api版本)开始,如果你使用cronjobs来创建作业(反过来,创建你的pod),你将能够限制保留多少旧作业.只需将以下内容添加到您的工作规范中:

successfulJobsHistoryLimit: X
failedJobsHistoryLimit: Y
Run Code Online (Sandbox Code Playgroud)

其中X和Y是系统应该保留多少先前运行的作业的限制(默认情况下它会无限期地保留作业[至少在版本1.5上.])

编辑2018-09-29:

对于较新的K8S版本,更新的链接及其相关文档如下:


Rón*_*áin 10

确实,您曾经不得不手动删除作业。在撰写本文时,@ puja的答案是正确的。

Kubernetes 1.12.0发布了TTL功能(在Alpha中),您可以将其设置为在完成后指定的秒数内自动清理作业(changelog)。您可以将其设置为零以立即清除。请参阅Jobs文档

doc中的示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)


lwo*_*olf 5

我最近构建了一个 kubernetes-operator 来完成这个任务。

部署后,它将监视选定的命名空间并删除已完成的作业/pod,如果它们完成且没有错误/重新启动。

https://github.com/lwolf/kube-cleanup-operator


Yu-*_*ong 2

在 kubernetes v1.2 中,有一个垃圾收集器,用于通过全局阈值收集终止的 Pod (请参阅控制器管理器--terminated-pod-gc-threshold=12500中的标志。我不知道 v1.1.8 中是否有任何针对终止的 Pod 的 GC 机制。您可能需要运行一个脚本/pod 定期清理 pod/jobs,以防止主组件不堪重负。顺便说一句,自动调整 GC 阈值还有一个未解决的问题。