Skip to content

Commit b766a06

Browse files
committed
Address comments
1 parent 4578a1a commit b766a06

File tree

3 files changed

+25
-13
lines changed

3 files changed

+25
-13
lines changed

vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,17 +520,17 @@ func TestGetContainersResources(t *testing.T) {
520520
addAll: false,
521521
},
522522
{
523-
name: "Memory only recommendation, request and limits only set in containerStatus, addAll true",
523+
name: "CPU and memory recommendation, request and limits only set in containerStatus, addAll true",
524524
container: test.Container().WithName("container").Get(),
525525
containerStatus: test.ContainerStatus().WithName("container").
526-
WithCPURequest(resource.MustParse("1m")).
526+
WithCPURequest(resource.MustParse("1")).
527527
WithMemRequest(resource.MustParse("1M")).
528-
WithCPULimit(resource.MustParse("40m")).
528+
WithCPULimit(resource.MustParse("10")).
529529
WithMemLimit(resource.MustParse("3M")).Get(),
530-
vpa: test.VerticalPodAutoscaler().WithContainer("container").WithTargetResource(apiv1.ResourceMemory, "2M").Get(),
531-
expectedCPU: mustParseResourcePointer("1m"),
530+
vpa: test.VerticalPodAutoscaler().WithContainer("container").WithTarget("3", "2M").Get(),
531+
expectedCPU: mustParseResourcePointer("3"),
532532
expectedMem: mustParseResourcePointer("2M"),
533-
expectedCPULimit: mustParseResourcePointer("40m"),
533+
expectedCPULimit: mustParseResourcePointer("30"),
534534
expectedMemLimit: mustParseResourcePointer("6M"),
535535
addAll: true,
536536
},

vertical-pod-autoscaler/pkg/updater/priority/scaling_direction_pod_eviction_admission_test.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,15 @@ func TestAdmitForSingleContainer(t *testing.T) {
157157
assert.Equal(t, true, sdpea.Admit(podWithoutRequests, recommendation))
158158
})
159159

160-
t.Run("it should admit a Pod for eviction if it has non-nil ContainerStatus resources, but with no requests", func(t *testing.T) {
160+
t.Run("it should admit a Pod for eviction if recommendation is higher than ContainerStatus requests", func(t *testing.T) {
161161
podWithContainerStatus := pod.DeepCopy()
162-
podWithContainerStatus.Status.ContainerStatuses = []corev1.ContainerStatus{{
163-
Name: containerName,
164-
Resources: &corev1.ResourceRequirements{},
165-
}}
162+
podWithContainerStatus.Status.ContainerStatuses = []corev1.ContainerStatus{
163+
test.ContainerStatus().WithName(containerName).
164+
WithCPURequest(resource.MustParse("100m")).
165+
WithCPULimit(resource.MustParse("100m")).
166+
WithMemRequest(resource.MustParse("1Gi")).
167+
WithMemLimit(resource.MustParse("1Gi")).Get()}
168+
166169
evictionRequirements := map[*corev1.Pod][]*v1.EvictionRequirement{
167170
podWithContainerStatus: {
168171
{Resources: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory},
@@ -172,7 +175,11 @@ func TestAdmitForSingleContainer(t *testing.T) {
172175
}
173176
sdpea := NewScalingDirectionPodEvictionAdmission()
174177
sdpea.(*scalingDirectionPodEvictionAdmission).EvictionRequirements = evictionRequirements
175-
recommendation := test.Recommendation().WithContainer(containerName).WithTarget("500m", "10Gi").Get()
178+
// Recommendation is higher than ContainerStatus requests, but lower than
179+
// PodSpec requests. This should be admitted (eviction requirement is
180+
// TargetHigherThanRequests), given that ContainerStatus has priority over
181+
// PodSpec.
182+
recommendation := test.Recommendation().WithContainer(containerName).WithTarget("400m", "4Gi").Get()
176183

177184
assert.Equal(t, true, sdpea.Admit(podWithContainerStatus, recommendation))
178185
})

vertical-pod-autoscaler/pkg/utils/resources/resourcehelpers.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,24 @@ package resourcehelpers
1818

1919
import (
2020
v1 "k8s.io/api/core/v1"
21+
"k8s.io/klog/v2"
2122
)
2223

2324
// ContainerRequestsAndLimits returns a copy of the actual resource requests and
2425
// limits of a given container:
25-
// - If in-place pod updates feature is enabled, the actual resource requests
26+
//
27+
// - If in-place pod updates feature [1] is enabled, the actual resource requests
2628
// are stored in the container status field.
2729
// - Otherwise, fallback to the resource requests defined in the pod spec.
30+
//
31+
// [1] https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/1287-in-place-update-pod-resources
2832
func ContainerRequestsAndLimits(containerName string, pod *v1.Pod) (v1.ResourceList, v1.ResourceList) {
2933
cs := containerStatusForContainer(containerName, pod)
3034
if cs != nil && cs.Resources != nil {
3135
return cs.Resources.Requests.DeepCopy(), cs.Resources.Limits.DeepCopy()
3236
}
3337

38+
klog.V(6).InfoS("Container resources not found in containerStatus for container. Falling back to resources defined in the pod spec. This is expected for clusters with in-place pod updates feature disabled.", "container", containerName, "containerStatus", cs)
3439
container := findContainer(containerName, pod)
3540
if container != nil {
3641
return container.Resources.Requests.DeepCopy(), container.Resources.Limits.DeepCopy()

0 commit comments

Comments
 (0)