Kubernetesで完了済みのJobをまとめて削除する
Kubernetesの完了済みJobリソースをまとめて削除するには、field-selectorに"status.successful=1"を指定することで削除できます。
kubectl delete jobs --field-selector status.successful=1
field-selector に指定できるフィールドはリソース毎に定義されていて、Jobの場合は、metadataまたは、 status.successfulのみが指定できます。どこにもドキュメンテーションされていないようです。
指定できるフィールドは、kubernetesのコード内で見ることができます。 kubectl get で取得しても、status.successfulというフィールドは存在しないのでかなりわかりにくいですね。。
func addConversionFuncs(scheme *runtime.Scheme) error { return scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.WithKind("Job"), func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": return label, value, nil default: return "", "", fmt.Errorf("field label %q not supported for batchv1.Job", label) } }, ) }
https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/batch/v1/conversion.go#L34
完了済みジョブを削除するときの条件が複雑な場合は、go-clientを利用したプログラミングが必要になりますが、大量に完了済みのジョブが残っているのが気になるくらいであれば、kubectl delete で解決してしまうのもよいんじゃないかなと思います。(まだAlphaですがTTLコントローラを利用する方法もあります )
1日1回CronJobを利用して完了済みのジョブを削除するだけであれば、下記のようにシンプルに済ませることができます。
Delete complete k8s jobs everyday · GitHub
備考
status.successfulはこの投稿で知りました