in pkg/coscheduling/core/core.go [325:359]
func getNodeResource(ctx context.Context, info *framework.NodeInfo, desiredPodGroupName string) *framework.Resource {
nodeClone := info.Snapshot()
logger := klog.FromContext(ctx)
for _, podInfo := range info.Pods {
if podInfo == nil || podInfo.Pod == nil {
continue
}
if util.GetPodGroupFullName(podInfo.Pod) != desiredPodGroupName {
continue
}
nodeClone.RemovePod(logger, podInfo.Pod)
}
leftResource := framework.Resource{
ScalarResources: make(map[corev1.ResourceName]int64),
}
allocatable := nodeClone.Allocatable
requested := nodeClone.Requested
leftResource.AllowedPodNumber = allocatable.AllowedPodNumber - len(nodeClone.Pods)
leftResource.MilliCPU = allocatable.MilliCPU - requested.MilliCPU
leftResource.Memory = allocatable.Memory - requested.Memory
leftResource.EphemeralStorage = allocatable.EphemeralStorage - requested.EphemeralStorage
for k, allocatableEx := range allocatable.ScalarResources {
requestEx, ok := requested.ScalarResources[k]
if !ok {
leftResource.ScalarResources[k] = allocatableEx
} else {
leftResource.ScalarResources[k] = allocatableEx - requestEx
}
}
klog.V(4).InfoS("Node left resource", "node", klog.KObj(info.Node()), "resource", leftResource)
return &leftResource
}