in pkg/controllers/metrics/node/controller.go [232:268]
func (c *Controller) record(ctx context.Context, node *v1.Node) error {
podlist := &v1.PodList{}
if err := c.KubeClient.List(ctx, podlist, client.MatchingFields{"spec.nodeName": node.Name}); err != nil {
return fmt.Errorf("listing pods on node %s, %w", node.Name, err)
}
var daemons, pods []*v1.Pod
for index := range podlist.Items {
if podutil.IsOwnedByDaemonSet(&podlist.Items[index]) {
daemons = append(daemons, &podlist.Items[index])
} else {
pods = append(pods, &podlist.Items[index])
}
}
podRequest := resources.RequestsForPods(pods...)
podLimits := resources.LimitsForPods(pods...)
daemonRequest := resources.RequestsForPods(daemons...)
daemonLimits := resources.LimitsForPods(daemons...)
systemOverhead := getSystemOverhead(node)
allocatable := node.Status.Capacity
if len(node.Status.Allocatable) > 0 {
allocatable = node.Status.Allocatable
}
// Populate metrics
for gaugeVec, resourceList := range map[*prometheus.GaugeVec]v1.ResourceList{
overheadGaugeVec: systemOverhead,
podRequestsGaugeVec: podRequest,
podLimitsGaugeVec: podLimits,
daemonRequestsGaugeVec: daemonRequest,
daemonLimitsGaugeVec: daemonLimits,
allocatableGaugeVec: allocatable,
} {
if err := c.set(resourceList, node, gaugeVec); err != nil {
logging.FromContext(ctx).Errorf("Failed to generate gauge: %w", err)
}
}
return nil
}