web-dev-qa-db-fra.com

Comment supprimer automatiquement les travaux Kubernetes terminés?

Existe-t-il un moyen de supprimer automatiquement les travaux terminés en plus de créer une tâche cron pour nettoyer les travaux terminés?

Le K8s Job Documentation indique que le comportement souhaité des travaux terminés est de les conserver dans leur état d’achèvement jusqu’à leur suppression manuelle. Parce que je fais des milliers d’emplois par jour avec K8s cronjobs et que je ne veux pas garder les travaux terminés.

30
Josh Newman

Vous pouvez maintenant définir des limites d’historique ou bien désactiver l’historique afin que les tâches ayant échoué ou ayant abouti ne soient pas conservées indéfiniment. Voir ma réponse ici . La documentation est ici .

20
JJC

Comme indiqué dans la documentation "Il appartient à l'utilisateur de supprimer les anciens travaux", voir http://kubernetes.io/docs/user-guide/jobs/#job-termination-and-cleanup

Je voudrais exécuter un pod pour effectuer ce nettoyage en fonction du nom du travail et de certaines conditions, laissant ainsi kubernetes au moins s'occuper de la disponibilité de votre processus ici. Vous pouvez exécuter un travail récurrent pour cela (en supposant que vous exécutiez kubernetes 1.5).

5

J'ai récemment construit un opérateur kubernetes pour effectuer cette tâche.

Après le déploiement, il surveillera l’espace de noms sélectionné et supprimera les travaux/pods terminés s’ils s’achèvent sans erreurs/redémarrages.

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

5
lwolf

Un moyen simple de les supprimer en exécutant un travail cron:

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

Cela est possible à partir de la version 1.12 Alpha avec ttlSecondsAfterFinished. Un exemple de Nettoyer automatiquement les travaux finis :

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

J'ai trouvé le ci-dessous pour travailler

Pour supprimer les travaux en échec:

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

Pour supprimer les travaux terminés:

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

Utilisation de jsonpath:

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