it-swarm.com.de

Wie entferne ich abgeschlossene Kubernetes-Jobs automatisch?

Gibt es eine Möglichkeit, abgeschlossene Aufträge automatisch zu entfernen, außer einen Cronjob auszuführen, um abgeschlossene Aufträge zu bereinigen?

Die K8s-Jobdokumentation gibt an, dass das beabsichtigte Verhalten abgeschlossener Jobs darin besteht, dass sie in einem abgeschlossenen Zustand verbleiben, bis sie manuell gelöscht werden. Weil ich jeden Tag Tausende von Jobs über k8s cronjobs betreibe und ich möchte nicht, dass abgeschlossene Jobs in der Nähe bleiben.

30
Josh Newman

Sie können jetzt Verlaufsgrenzen festlegen oder den Verlauf insgesamt deaktivieren, so dass fehlgeschlagene oder erfolgreiche Aufträge nicht unbegrenzt erhalten bleiben. Siehe meine Antwort hier . Dokumentation ist hier .

20
JJC

Wie in der Dokumentation "Der Benutzer ist das Löschen alter Jobs" angegeben, siehe http://kubernetes.io/docs/user-guide/jobs/#job-termination-and-cleanup .

Ich würde ein Pod ausführen, um diese Bereinigung basierend auf dem Jobnamen und bestimmten Bedingungen durchzuführen, sodass kubernetes sich hier zumindest um die Verfügbarkeit Ihres Prozesses kümmern muss. Sie könnten dazu einen wiederkehrenden Job ausführen (vorausgesetzt, Sie führen kubernetes 1.5 aus).

5

Ich habe vor kurzem einen Kubernetes-Operator für diese Aufgabe erstellt.

Nach der Bereitstellung wird der ausgewählte Namespace überwacht und abgeschlossene Jobs/Pods gelöscht, wenn sie ohne Fehler/Neustarts abgeschlossen wurden.

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

5
lwolf

Eine einfache Möglichkeit, sie durch Ausführen eines Cron-Jobs zu löschen:

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

Dies ist ab Version 1.12 Alpha mit ttlSecondsAfterFinished möglich. Ein Beispiel aus Fertige Jobs automatisch bereinigen :

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

ich verwende wernight/kubectl 's kubectl Bild

hat einen Cron geplant, der alles löscht, was ist

  • completed
  • 2 - 9 days old (Ich habe also 2 Tage Zeit, um fehlgeschlagene Aufträge zu überprüfen.)

es läuft alle 30 Minuten, also rechne ich nicht mit Jobs, die älter als 10 Tage sind

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

Ich habe das unten gefunden, um zu arbeiten

So entfernen Sie fehlgeschlagene Aufträge:

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

Um abgeschlossene Jobs zu entfernen:

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

Jsonpath verwenden:

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