mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 19:01:49 +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:
commit
03ae13a3b6
@ -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
|
||||||
}
|
}
|
||||||
|
@ -95,8 +95,9 @@ func TestPodEvaluatorUsage(t *testing.T) {
|
|||||||
deletionTimestampNotPastGracePeriod := metav1.NewTime(fakeClock.Now())
|
deletionTimestampNotPastGracePeriod := metav1.NewTime(fakeClock.Now())
|
||||||
|
|
||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user