Skip to content

Commit a381f7c

Browse files
authored
Merge pull request kubernetes#83508 from damemi/scheduler-cache-metric
Add scheduler cache size metrics
2 parents 48bc59a + 828d662 commit a381f7c

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

pkg/scheduler/internal/cache/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ go_library(
1212
deps = [
1313
"//pkg/features:go_default_library",
1414
"//pkg/scheduler/listers:go_default_library",
15+
"//pkg/scheduler/metrics:go_default_library",
1516
"//pkg/scheduler/nodeinfo:go_default_library",
1617
"//pkg/scheduler/nodeinfo/snapshot:go_default_library",
1718
"//pkg/util/node:go_default_library",

pkg/scheduler/internal/cache/cache.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/klog"
3030
"k8s.io/kubernetes/pkg/features"
3131
schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers"
32+
"k8s.io/kubernetes/pkg/scheduler/metrics"
3233
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
3334
nodeinfosnapshot "k8s.io/kubernetes/pkg/scheduler/nodeinfo/snapshot"
3435
)
@@ -635,9 +636,11 @@ func (cache *schedulerCache) cleanupExpiredAssumedPods() {
635636
}
636637

637638
// cleanupAssumedPods exists for making test deterministic by taking time as input argument.
639+
// It also reports metrics on the cache size for nodes, pods, and assumed pods.
638640
func (cache *schedulerCache) cleanupAssumedPods(now time.Time) {
639641
cache.mu.Lock()
640642
defer cache.mu.Unlock()
643+
defer cache.updateMetrics()
641644

642645
// The size of assumedPods should be small
643646
for key := range cache.assumedPods {
@@ -680,3 +683,10 @@ func (cache *schedulerCache) GetNodeInfo(nodeName string) (*v1.Node, error) {
680683

681684
return n.info.Node(), nil
682685
}
686+
687+
// updateMetrics updates cache size metric values for pods, assumed pods, and nodes
688+
func (cache *schedulerCache) updateMetrics() {
689+
metrics.CacheSize.WithLabelValues("assumed_pods").Set(float64(len(cache.assumedPods)))
690+
metrics.CacheSize.WithLabelValues("pods").Set(float64(len(cache.podStates)))
691+
metrics.CacheSize.WithLabelValues("nodes").Set(float64(len(cache.nodes)))
692+
}

pkg/scheduler/metrics/metrics.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,14 @@ var (
272272
},
273273
[]string{"result"})
274274

275+
CacheSize = metrics.NewGaugeVec(
276+
&metrics.GaugeOpts{
277+
Subsystem: SchedulerSubsystem,
278+
Name: "scheduler_cache_size",
279+
Help: "Number of nodes, pods, and assumed (bound) pods in the scheduler cache.",
280+
StabilityLevel: metrics.ALPHA,
281+
}, []string{"type"})
282+
275283
metricsList = []metrics.Registerable{
276284
scheduleAttempts,
277285
SchedulingLatency,
@@ -297,6 +305,7 @@ var (
297305
SchedulerQueueIncomingPods,
298306
SchedulerGoroutines,
299307
PermitWaitDuration,
308+
CacheSize,
300309
}
301310
)
302311

0 commit comments

Comments
 (0)