mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #99600 from gjkim42/count-pod-overhead-against-rsquota
Count pod overhead against an entity's ResourceQuota
This commit is contained in:
		@@ -354,6 +354,10 @@ func PodUsageFunc(obj runtime.Object, clock clock.Clock) (corev1.ResourceList, e
 | 
				
			|||||||
		limits = quota.Max(limits, pod.Spec.InitContainers[i].Resources.Limits)
 | 
							limits = quota.Max(limits, pod.Spec.InitContainers[i].Resources.Limits)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if feature.DefaultFeatureGate.Enabled(features.PodOverhead) {
 | 
				
			||||||
 | 
							requests = quota.Add(requests, pod.Spec.Overhead)
 | 
				
			||||||
 | 
							limits = quota.Add(limits, pod.Spec.Overhead)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	result = quota.Add(result, podComputeUsageHelper(requests, limits))
 | 
						result = quota.Add(result, podComputeUsageHelper(requests, limits))
 | 
				
			||||||
	return result, nil
 | 
						return result, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,6 +97,7 @@ func TestPodEvaluatorUsage(t *testing.T) {
 | 
				
			|||||||
	testCases := map[string]struct {
 | 
						testCases := map[string]struct {
 | 
				
			||||||
		pod                *api.Pod
 | 
							pod                *api.Pod
 | 
				
			||||||
		usage              corev1.ResourceList
 | 
							usage              corev1.ResourceList
 | 
				
			||||||
 | 
							podOverheadEnabled bool
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		"init container CPU": {
 | 
							"init container CPU": {
 | 
				
			||||||
			pod: &api.Pod{
 | 
								pod: &api.Pod{
 | 
				
			||||||
@@ -438,9 +439,68 @@ func TestPodEvaluatorUsage(t *testing.T) {
 | 
				
			|||||||
				generic.ObjectCountQuotaResourceNameFor(schema.GroupResource{Resource: "pods"}): resource.MustParse("1"),
 | 
									generic.ObjectCountQuotaResourceNameFor(schema.GroupResource{Resource: "pods"}): resource.MustParse("1"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"count pod overhead as usage": {
 | 
				
			||||||
 | 
								pod: &api.Pod{
 | 
				
			||||||
 | 
									Spec: api.PodSpec{
 | 
				
			||||||
 | 
										Overhead: api.ResourceList{
 | 
				
			||||||
 | 
											api.ResourceCPU: resource.MustParse("1"),
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										Containers: []api.Container{
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												Resources: api.ResourceRequirements{
 | 
				
			||||||
 | 
													Requests: api.ResourceList{
 | 
				
			||||||
 | 
														api.ResourceCPU: resource.MustParse("1"),
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													Limits: api.ResourceList{
 | 
				
			||||||
 | 
														api.ResourceCPU: resource.MustParse("2"),
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								usage: corev1.ResourceList{
 | 
				
			||||||
 | 
									corev1.ResourceRequestsCPU: resource.MustParse("2"),
 | 
				
			||||||
 | 
									corev1.ResourceLimitsCPU:   resource.MustParse("3"),
 | 
				
			||||||
 | 
									corev1.ResourcePods:        resource.MustParse("1"),
 | 
				
			||||||
 | 
									corev1.ResourceCPU:         resource.MustParse("2"),
 | 
				
			||||||
 | 
									generic.ObjectCountQuotaResourceNameFor(schema.GroupResource{Resource: "pods"}): resource.MustParse("1"),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								podOverheadEnabled: true,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"do not count pod overhead as usage with pod overhead disabled": {
 | 
				
			||||||
 | 
								pod: &api.Pod{
 | 
				
			||||||
 | 
									Spec: api.PodSpec{
 | 
				
			||||||
 | 
										Overhead: api.ResourceList{
 | 
				
			||||||
 | 
											api.ResourceCPU: resource.MustParse("1"),
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										Containers: []api.Container{
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												Resources: api.ResourceRequirements{
 | 
				
			||||||
 | 
													Requests: api.ResourceList{
 | 
				
			||||||
 | 
														api.ResourceCPU: resource.MustParse("1"),
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													Limits: api.ResourceList{
 | 
				
			||||||
 | 
														api.ResourceCPU: resource.MustParse("2"),
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								usage: corev1.ResourceList{
 | 
				
			||||||
 | 
									corev1.ResourceRequestsCPU: resource.MustParse("1"),
 | 
				
			||||||
 | 
									corev1.ResourceLimitsCPU:   resource.MustParse("2"),
 | 
				
			||||||
 | 
									corev1.ResourcePods:        resource.MustParse("1"),
 | 
				
			||||||
 | 
									corev1.ResourceCPU:         resource.MustParse("1"),
 | 
				
			||||||
 | 
									generic.ObjectCountQuotaResourceNameFor(schema.GroupResource{Resource: "pods"}): resource.MustParse("1"),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								podOverheadEnabled: false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for testName, testCase := range testCases {
 | 
						for testName, testCase := range testCases {
 | 
				
			||||||
		t.Run(testName, func(t *testing.T) {
 | 
							t.Run(testName, func(t *testing.T) {
 | 
				
			||||||
 | 
								defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.PodOverhead, testCase.podOverheadEnabled)()
 | 
				
			||||||
			actual, err := evaluator.Usage(testCase.pod)
 | 
								actual, err := evaluator.Usage(testCase.pod)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Error(err)
 | 
									t.Error(err)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user