首页 > 解决方案 > 作业完成后如何自动删除 Kubernetes 作业

问题描述

我正在 GKE 上运行 kubernetes 作业,并希望在作业完成后自动删除该作业。

这是我的作业配置文件。我设置ttlSecondsAfterFinished: 0但作业没有自动删除。我错过了什么吗?

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  # automatically clean up finished job
  ttlSecondsAfterFinished: 0
  template:
    metadata:
      name: myjob
    spec:
      containers:
        - name: myjob
          image: gcr.io/GCP_PROJECT/myimage:COMMIT_SHA
          command: ["bash"]
          args: ["deploy.sh"]
      # Do not restart containers after they exit
      restartPolicy: Never

标签: kubernetesgoogle-kubernetes-engine

解决方案


这取决于你是如何创造工作的。

如果您使用的是 CronJob,您可以使用spec.successfulJobsHistoryLimitandspec.failedJobsHistoryLimit并将值设置为 0。它会说 K8s 不会处理任何以前完成的作业。

如果您使用 YAML 创建 pod,则必须手动将其删除。但是,您也可以将 CronJob 设置为每 5 分钟执行一次命令。

kubectl delete job $(kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')

它将删除所有状态为succeded 的作业。


推荐阅读