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.
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).
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.
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
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
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}')
Utilisation de jsonpath:
kubectl delete job $(kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')