web-dev-qa-db-ja.com

完了したKubernetesジョブを自動的に削除するにはどうすればよいですか?

完了したジョブをクリーンアップするcronジョブを作成する以外に、完了したジョブを自動的に削除する方法はありますか?

K8s Job Documentation は、完了したジョブの意図された動作は、手動で削除されるまで、完了した状態のままにすることであると述べています。私はk8s cronjobを介して1日に数千のジョブを実行しているため、完了したジョブを保持したくないのです。

40
Josh Newman

履歴の制限を設定したり、履歴を完全に無効にしたりできるようになったため、失敗したジョブや成功したジョブが無期限に保持されることはありません。私の答えをご覧ください こちら 。ドキュメントは こちら です。

28
JJC

これは、バージョン1.12 AlphaからttlSecondsAfterFinishedで可能です。 終了したジョブを自動的にクリーンアップする :の例

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
10
rath

動作するように以下を見つけました

失敗したジョブを削除するには:

kubectl delete job $(kubectl get jobs | awk '$3 ~ 0' | awk '{print $1}')

完了したジョブを削除するには:

kubectl delete job $(kubectl get jobs | awk '$3 ~ 1' | awk '{print $1}')
7
justcompile

「古いジョブを削除するのはユーザー次第」というドキュメントに記載されているように、 http://kubernetes.io/docs/user-guide/jobs/#job-termination-and-cleanup を参照してください

ポッドを実行して、ジョブ名と特定の条件に基づいてこのクリーンアップを実行するため、少なくともここでプロセスの可用性をkubernetesが処理できます。このために繰り返しジョブを実行できます(kubernetes 1.5を実行すると仮定)。

5

最近、このタスクを実行するためにkubernetes-operatorを作成しました。

デプロイ後、選択したネームスペースを監視し、エラー/リスタートなしで完了した場合、完了したジョブ/ポッドを削除します。

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

5
lwolf

Jsonpathの使用:

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

Cronジョブを実行してそれらを削除する簡単な方法:

kubectl get jobs --all-namespaces | sed '1d' | awk '{ print $2, "--namespace", $1 }' | while read line; do kubectl delete jobs $line; done
4
Daishi

wernight/kubectl のkubectlイメージを使用しています

あるものを削除するcronをスケジュールしました

  • completed
  • 2 - 9 days old(したがって、失敗したジョブを確認するために2日間あります)

30分ごとに実行されるため、10日以上経過しているジョブは考慮していません

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cleanup
spec:
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: kubectl-runner
            image: wernight/kubectl
            command: ["sh", "-c", "kubectl get jobs | awk '$4 ~ /[2-9]d$/ || $3 ~ 1' | awk '{print $1}' | xargs kubectl delete job"]
          restartPolicy: Never
2
David Cheung