in pkg/scheduler/scheduler.go [31:76]
func RecordClusterMetrics(ctx context.Context, m metrics.ClusterRecorder, nodes []*v1.Node, daemonsets []*appsv1.DaemonSet, deployments []*appsv1.Deployment) {
// Report on node conditions
if nodes == nil {
klog.V(1).Infoln("Informer caches syncing. Skip next scraping cycle and wait until the caches are fully synced")
return
}
conditions := nodeConditions(nodes)
conditionCounts := []metrics.LabelCount{}
for _, v := range conditions.Dump() {
conditionCounts = append(conditionCounts, metrics.LabelCount{
Labels: v.Key,
Count: v.Value,
})
}
m.RecordNodeConditions(ctx, conditionCounts)
// Report on node availability (SLI)
availabilities, availableNodes := nodeAvailabilities(nodes)
availabilityCounts := []metrics.LabelCount{}
for _, v := range availabilities.Dump() {
availabilityCounts = append(availabilityCounts, metrics.LabelCount{
Labels: v.Key,
Count: v.Value,
})
}
m.RecordNodeAvailabilities(ctx, availabilityCounts)
// Report on expected addons
addonCounts := []metrics.LabelCount{}
for addon, count := range daemonSetPodCountByAddon(daemonsets) {
labels := addonLabels(addon)
// Use _available_ nodes as expected number of nodes used by daemonsets
addonCounts = append(addonCounts, metrics.LabelCount{
Labels: labels,
Count: availableNodes * count,
})
}
for addon, count := range deploymentPodCountByAddon(deployments) {
labels := addonLabels(addon)
addonCounts = append(addonCounts, metrics.LabelCount{
Labels: labels,
Count: count,
})
}
m.RecordAddonCounts(ctx, addonCounts)
}