example cronjob cron kubernetes kubernetes-jobs

cronjob - ¿Cómo elimino automáticamente los trabajos de Kubernetes completados?



kubernetes cronjob (6)

Ahora puede establecer límites de historial, o deshabilitar el historial por completo, para que los trabajos fallidos o exitosos no se conserven por tiempo indefinido. Vea mi respuesta here . La documentación está here .

¿Hay una manera de eliminar automáticamente los trabajos completados además de hacer un cronjob para limpiar los trabajos completados?

La documentación de trabajo de K8 indica que el comportamiento previsto de los trabajos completados es que permanezcan en un estado completo hasta que se eliminen manualmente. Porque estoy ejecutando miles de trabajos al día a través de los cronjobs de k8s y no quiero mantener los trabajos completados.


Como se indica en la documentación "Es responsabilidad del usuario eliminar trabajos antiguos", consulte http://kubernetes.io/docs/user-guide/jobs/#job-termination-and-cleanup

Dirigiría un pod para realizar esta limpieza según el nombre del trabajo y ciertas condiciones, permitiendo así que los kubernetes al menos se encarguen de la disponibilidad de su proceso aquí. Podría ejecutar un trabajo recurrente para esto (suponiendo que ejecute kubernetes 1.5).


He encontrado el siguiente para trabajar

Para eliminar trabajos fallidos:

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

Para eliminar trabajos completados:

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


Recientemente construí un operador kubernetes para hacer esta tarea.

Después de la implementación, monitoreará el espacio de nombres seleccionado y eliminará los trabajos / pods completados si se completaron sin errores / reinicios.

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


Una forma sencilla de eliminarlos ejecutando un trabajo cron:

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


Utilizando jsonpath:

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