Add metric for terminated pods with tracking finalizer

Change-Id: I26f3169588c30ed82250cb7baff8e277f8d13bb7
This commit is contained in:
Aldo Culquicondor
2022-10-19 09:49:38 -04:00
parent 7423cc931f
commit 12d308f5c4
5 changed files with 197 additions and 19 deletions

View File

@@ -20,9 +20,12 @@ import (
"fmt"
"sync"
batch "k8s.io/api/batch/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
"k8s.io/kubernetes/pkg/controller/job/metrics"
)
// uidSetKeyFunc to parse out the key from a uidSet.
@@ -118,3 +121,32 @@ func (u *uidTrackingExpectations) deleteExpectations(jobKey string) {
func newUIDTrackingExpectations() *uidTrackingExpectations {
return &uidTrackingExpectations{store: cache.NewStore(uidSetKeyFunc)}
}
func hasJobTrackingFinalizer(pod *v1.Pod) bool {
for _, fin := range pod.Finalizers {
if fin == batch.JobTrackingFinalizer {
return true
}
}
return false
}
func recordFinishedPodWithTrackingFinalizer(oldPod, newPod *v1.Pod) {
was := isFinishedPodWithTrackingFinalizer(oldPod)
is := isFinishedPodWithTrackingFinalizer(newPod)
if was == is {
return
}
var event = metrics.Delete
if is {
event = metrics.Add
}
metrics.TerminatedPodsTrackingFinalizerTotal.WithLabelValues(event).Inc()
}
func isFinishedPodWithTrackingFinalizer(pod *v1.Pod) bool {
if pod == nil {
return false
}
return (pod.Status.Phase == v1.PodFailed || pod.Status.Phase == v1.PodSucceeded) && hasJobTrackingFinalizer(pod)
}