mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	The "// import <path>" comment has been superseded by Go modules. We don't have to remove them, but doing so has some advantages: - They are used inconsistently, which is confusing. - We can then also remove the (currently broken) hack/update-vanity-imports.sh. - Last but not least, it would be a first step towards avoiding the k8s.io domain. This commit was generated with sed -i -e 's;^package \(.*\) // import.*;package \1;' $(git grep -l '^package.*// import' | grep -v 'vendor/') Everything was included, except for package labels // import k8s.io/kubernetes/pkg/util/labels because that package is marked as "read-only".
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2024 The Kubernetes Authors.
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
// Package qos contains helper functions for quality of service.
 | 
						|
// For each resource (memory, CPU) Kubelet supports three classes of containers.
 | 
						|
// Memory guaranteed containers will receive the highest priority and will get all the resources
 | 
						|
// they need.
 | 
						|
// Burstable containers will be guaranteed their request and can "burst" and use more resources
 | 
						|
// when available.
 | 
						|
// Best-Effort containers, which don't specify a request, can use resources only if not being used
 | 
						|
// by other pods.
 | 
						|
 | 
						|
package qos
 | 
						|
 | 
						|
import (
 | 
						|
	v1 "k8s.io/api/core/v1"
 | 
						|
	resourcehelper "k8s.io/component-helpers/resource"
 | 
						|
)
 | 
						|
 | 
						|
// minRegularContainerMemory returns the minimum memory resource quantity
 | 
						|
// across all regular containers in pod.Spec.Containers.
 | 
						|
// It does not include initContainers (both restartable and non-restartable).
 | 
						|
func minRegularContainerMemory(pod v1.Pod) int64 {
 | 
						|
	memoryValue := pod.Spec.Containers[0].Resources.Requests.Memory().Value()
 | 
						|
	for _, container := range pod.Spec.Containers[1:] {
 | 
						|
		if container.Resources.Requests.Memory().Value() < memoryValue {
 | 
						|
			memoryValue = container.Resources.Requests.Memory().Value()
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return memoryValue
 | 
						|
}
 | 
						|
 | 
						|
// remainingPodMemReqPerContainer calculates the remaining pod memory request per
 | 
						|
// container by:
 | 
						|
// 1. Taking the total pod memory requests
 | 
						|
// 2. Subtracting total container memory requests from pod memory requests
 | 
						|
// 3. Dividing the remainder by the number of containers.
 | 
						|
// This gives us the additional memory request that is not allocated to any
 | 
						|
// containers in the pod. This value will be divided equally among all containers to
 | 
						|
// calculate oom score adjusment.
 | 
						|
// See https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/2837-pod-level-resource-spec/README.md#oom-score-adjustment
 | 
						|
// for more details.
 | 
						|
func remainingPodMemReqPerContainer(pod *v1.Pod) int64 {
 | 
						|
	var remainingMemory int64
 | 
						|
	if pod.Spec.Resources.Requests.Memory().IsZero() {
 | 
						|
		return remainingMemory
 | 
						|
	}
 | 
						|
 | 
						|
	numContainers := len(pod.Spec.Containers) + len(pod.Spec.InitContainers)
 | 
						|
 | 
						|
	// Aggregated requests of all containers.
 | 
						|
	aggrContainerReqs := resourcehelper.AggregateContainerRequests(pod, resourcehelper.PodResourcesOptions{})
 | 
						|
 | 
						|
	remainingMemory = pod.Spec.Resources.Requests.Memory().Value() - aggrContainerReqs.Memory().Value()
 | 
						|
 | 
						|
	remainingMemoryPerContainer := remainingMemory / int64(numContainers)
 | 
						|
	return remainingMemoryPerContainer
 | 
						|
}
 |