mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Precompute pod resources
This commit is contained in:
parent
e8e8e2d086
commit
4eed5e07a5
@ -65,10 +65,10 @@ func (c *CachedNodeInfo) GetNodeInfo(id string) (*api.Node, error) {
|
|||||||
return node.(*api.Node), nil
|
return node.(*api.Node), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// podMetadata defines a type, that is an expected type that is passed
|
// podMetadata is a type that is passed as metadata for predicate functions
|
||||||
// as metadata for predicate functions
|
|
||||||
type predicateMetadata struct {
|
type predicateMetadata struct {
|
||||||
podBestEffort bool
|
podBestEffort bool
|
||||||
|
podRequest *resourceRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
func PredicateMetadata(pod *api.Pod) interface{} {
|
func PredicateMetadata(pod *api.Pod) interface{} {
|
||||||
@ -78,6 +78,7 @@ func PredicateMetadata(pod *api.Pod) interface{} {
|
|||||||
}
|
}
|
||||||
return &predicateMetadata{
|
return &predicateMetadata{
|
||||||
podBestEffort: isPodBestEffort(pod),
|
podBestEffort: isPodBestEffort(pod),
|
||||||
|
podRequest: getResourceRequest(pod),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +406,7 @@ type resourceRequest struct {
|
|||||||
nvidiaGPU int64
|
nvidiaGPU int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func getResourceRequest(pod *api.Pod) resourceRequest {
|
func getResourceRequest(pod *api.Pod) *resourceRequest {
|
||||||
result := resourceRequest{}
|
result := resourceRequest{}
|
||||||
for _, container := range pod.Spec.Containers {
|
for _, container := range pod.Spec.Containers {
|
||||||
requests := container.Resources.Requests
|
requests := container.Resources.Requests
|
||||||
@ -423,7 +424,7 @@ func getResourceRequest(pod *api.Pod) resourceRequest {
|
|||||||
result.milliCPU = cpu
|
result.milliCPU = cpu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result
|
return &result
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckPodsExceedingFreeResources(pods []*api.Pod, allocatable api.ResourceList) (fitting []*api.Pod, notFittingCPU, notFittingMemory, notFittingNvidiaGPU []*api.Pod) {
|
func CheckPodsExceedingFreeResources(pods []*api.Pod, allocatable api.ResourceList) (fitting []*api.Pod, notFittingCPU, notFittingMemory, notFittingNvidiaGPU []*api.Pod) {
|
||||||
@ -477,7 +478,15 @@ func PodFitsResources(pod *api.Pod, meta interface{}, nodeInfo *schedulercache.N
|
|||||||
return false,
|
return false,
|
||||||
newInsufficientResourceError(podCountResourceName, 1, int64(len(nodeInfo.Pods())), allowedPodNumber)
|
newInsufficientResourceError(podCountResourceName, 1, int64(len(nodeInfo.Pods())), allowedPodNumber)
|
||||||
}
|
}
|
||||||
podRequest := getResourceRequest(pod)
|
|
||||||
|
var podRequest *resourceRequest
|
||||||
|
predicateMeta, ok := meta.(*predicateMetadata)
|
||||||
|
if ok {
|
||||||
|
podRequest = predicateMeta.podRequest
|
||||||
|
} else {
|
||||||
|
// We couldn't parse metadata - fallback to computing it.
|
||||||
|
podRequest = getResourceRequest(pod)
|
||||||
|
}
|
||||||
if podRequest.milliCPU == 0 && podRequest.memory == 0 && podRequest.nvidiaGPU == 0 {
|
if podRequest.milliCPU == 0 && podRequest.memory == 0 && podRequest.nvidiaGPU == 0 {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user