From 3e6df4a871c17c1149f9b893153471c5b4a822a3 Mon Sep 17 00:00:00 2001 From: Anish Shah Date: Thu, 17 Oct 2024 12:10:22 -0700 Subject: [PATCH] test: remove container runtime check and fix other nits --- test/e2e/common/node/pod_resize.go | 55 +++++++++++----------------- test/e2e/framework/pod/resize.go | 34 ++++++------------ test/e2e/node/pod_resize.go | 57 +++++++++++++----------------- 3 files changed, 57 insertions(+), 89 deletions(-) diff --git a/test/e2e/common/node/pod_resize.go b/test/e2e/common/node/pod_resize.go index b067adf7c11..f59d87dbebe 100644 --- a/test/e2e/common/node/pod_resize.go +++ b/test/e2e/common/node/pod_resize.go @@ -23,20 +23,20 @@ import ( "strconv" "time" - "github.com/onsi/ginkgo/v2" - "github.com/onsi/gomega" - v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/strategicpatch" clientset "k8s.io/client-go/kubernetes" - "k8s.io/kubernetes/test/e2e/feature" "k8s.io/kubernetes/test/e2e/framework" e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" + + "github.com/onsi/ginkgo/v2" + "github.com/onsi/gomega" + v1 "k8s.io/api/core/v1" ) const ( @@ -115,13 +115,7 @@ func removeExtendedResource(clientSet clientset.Interface, nodeName, extendedRes }).WithTimeout(30 * time.Second).WithPolling(time.Second).ShouldNot(gomega.HaveOccurred()) } -func doPodResizeTests() { - f := framework.NewDefaultFramework("pod-resize-test") - var podClient *e2epod.PodClient - ginkgo.BeforeEach(func() { - podClient = e2epod.NewPodClient(f) - }) - +func doPodResizeTests(f *framework.Framework) { type testCase struct { name string containers []e2epod.ResizableContainerInfo @@ -861,13 +855,7 @@ func doPodResizeTests() { for idx := range tests { tc := tests[idx] ginkgo.It(tc.name, func(ctx context.Context) { - ginkgo.By("check if in place pod vertical scaling is supported", func() { - node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) - framework.ExpectNoError(err) - if !e2epod.IsInPlacePodVerticalScalingSupportedByRuntime(node) || framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { - e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") - } - }) + podClient := e2epod.NewPodClient(f) var testPod, patchedPod *v1.Pod var pErr error @@ -945,12 +933,7 @@ func doPodResizeTests() { } } -func doPodResizeErrorTests() { - f := framework.NewDefaultFramework("pod-resize-errors") - var podClient *e2epod.PodClient - ginkgo.BeforeEach(func() { - podClient = e2epod.NewPodClient(f) - }) +func doPodResizeErrorTests(f *framework.Framework) { type testCase struct { name string @@ -985,13 +968,7 @@ func doPodResizeErrorTests() { for idx := range tests { tc := tests[idx] ginkgo.It(tc.name, func(ctx context.Context) { - ginkgo.By("check if in place pod vertical scaling is supported", func() { - node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) - framework.ExpectNoError(err) - if !e2epod.IsInPlacePodVerticalScalingSupportedByRuntime(node) || framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { - e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") - } - }) + podClient := e2epod.NewPodClient(f) var testPod, patchedPod *v1.Pod var pErr error @@ -1043,7 +1020,17 @@ func doPodResizeErrorTests() { // Above tests are performed by doSheduletTests() and doPodResizeResourceQuotaTests() // in test/e2e/node/pod_resize.go -var _ = SIGDescribe("Pod InPlace Resize Container", framework.WithSerial(), feature.InPlacePodVerticalScaling, func() { - doPodResizeTests() - doPodResizeErrorTests() +var _ = SIGDescribe("Pod InPlace Resize Container", framework.WithSerial(), feature.InPlacePodVerticalScaling, "[NodeAlphaFeature:InPlacePodVerticalScaling]", func() { + f := framework.NewDefaultFramework("pod-resize-tests") + + ginkgo.BeforeEach(func(ctx context.Context) { + node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) + framework.ExpectNoError(err) + if framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { + e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") + } + }) + + doPodResizeTests(f) + doPodResizeErrorTests(f) }) diff --git a/test/e2e/framework/pod/resize.go b/test/e2e/framework/pod/resize.go index f7b8cb54b88..8fdc5015edb 100644 --- a/test/e2e/framework/pod/resize.go +++ b/test/e2e/framework/pod/resize.go @@ -20,22 +20,20 @@ import ( "context" "encoding/json" "fmt" - "regexp" "strconv" "strings" - semver "github.com/blang/semver/v4" - "github.com/google/go-cmp/cmp" - "github.com/onsi/ginkgo/v2" - "github.com/onsi/gomega" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - podutil "k8s.io/kubernetes/pkg/api/v1/pod" kubecm "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/test/e2e/framework" imageutils "k8s.io/kubernetes/test/utils/image" + + "github.com/google/go-cmp/cmp" + "github.com/onsi/ginkgo/v2" + "github.com/onsi/gomega" ) const ( @@ -104,21 +102,6 @@ type patchSpec struct { } `json:"spec"` } -func IsInPlacePodVerticalScalingSupportedByRuntime(node *v1.Node) bool { - re := regexp.MustCompile("containerd://(.*)") - match := re.FindStringSubmatch(node.Status.NodeInfo.ContainerRuntimeVersion) - if len(match) != 2 { - return false - } - if ver, verr := semver.ParseTolerant(match[1]); verr == nil { - if ver.Compare(semver.MustParse(MinContainerRuntimeVersion)) < 0 { - return false - } - return true - } - return false -} - func getTestResourceInfo(tcInfo ResizableContainerInfo) (v1.ResourceRequirements, v1.ResourceList, []v1.ContainerResizePolicy) { var res v1.ResourceRequirements var alloc v1.ResourceList @@ -237,6 +220,7 @@ func MakePodWithResizableContainers(ns, name, timeStamp string, tcInfo []Resizab func VerifyPodResizePolicy(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) { ginkgo.GinkgoHelper() + gomega.Expect(gotPod.Spec.Containers).To(gomega.HaveLen(len(wantCtrs)), "number of containers in pod spec should match") for i, wantCtr := range wantCtrs { gotCtr := &gotPod.Spec.Containers[i] ctr, _ := makeResizableContainer(wantCtr) @@ -247,6 +231,7 @@ func VerifyPodResizePolicy(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) { func VerifyPodResources(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) { ginkgo.GinkgoHelper() + gomega.Expect(gotPod.Spec.Containers).To(gomega.HaveLen(len(wantCtrs)), "number of containers in pod spec should match") for i, wantCtr := range wantCtrs { gotCtr := &gotPod.Spec.Containers[i] ctr, _ := makeResizableContainer(wantCtr) @@ -257,6 +242,7 @@ func VerifyPodResources(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) { func VerifyPodAllocations(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) error { ginkgo.GinkgoHelper() + gomega.Expect(gotPod.Status.ContainerStatuses).To(gomega.HaveLen(len(wantCtrs)), "number of containers in pod spec should match") for i, wantCtr := range wantCtrs { gotCtrStatus := &gotPod.Status.ContainerStatuses[i] if wantCtr.Allocations == nil { @@ -280,6 +266,7 @@ func VerifyPodAllocations(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) err func VerifyPodStatusResources(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) { ginkgo.GinkgoHelper() + gomega.Expect(gotPod.Status.ContainerStatuses).To(gomega.HaveLen(len(wantCtrs)), "number of containers in pod spec should match") for i, wantCtr := range wantCtrs { gotCtrStatus := &gotPod.Status.ContainerStatuses[i] ctr, _ := makeResizableContainer(wantCtr) @@ -288,9 +275,10 @@ func VerifyPodStatusResources(gotPod *v1.Pod, wantCtrs []ResizableContainerInfo) } } +// isPodOnCgroupv2Node checks whether the pod is running on cgroupv2 node. +// TODO: Deduplicate this function with NPD cluster e2e test: +// https://github.com/kubernetes/kubernetes/blob/2049360379bcc5d6467769cef112e6e492d3d2f0/test/e2e/node/node_problem_detector.go#L369 func isPodOnCgroupv2Node(f *framework.Framework, pod *v1.Pod) bool { - // Determine if pod is running on cgroupv2 or cgroupv1 node - //TODO(vinaykul,InPlacePodVerticalScaling): Is there a better way to determine this? cmd := "mount -t cgroup2" out, _, err := ExecCommandInContainerWithFullOutput(f, pod.Name, pod.Spec.Containers[0].Name, "/bin/sh", "-c", cmd) if err != nil { diff --git a/test/e2e/node/pod_resize.go b/test/e2e/node/pod_resize.go index 81c45bef154..a266bbf70f5 100644 --- a/test/e2e/node/pod_resize.go +++ b/test/e2e/node/pod_resize.go @@ -22,37 +22,26 @@ import ( "strconv" "time" - "github.com/onsi/ginkgo/v2" - "github.com/onsi/gomega" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - resourceapi "k8s.io/kubernetes/pkg/api/v1/resource" "k8s.io/kubernetes/test/e2e/feature" "k8s.io/kubernetes/test/e2e/framework" e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" + + "github.com/onsi/ginkgo/v2" + "github.com/onsi/gomega" ) -func doPodResizeResourceQuotaTests() { - f := framework.NewDefaultFramework("pod-resize-resource-quota") - var podClient *e2epod.PodClient - ginkgo.BeforeEach(func() { - podClient = e2epod.NewPodClient(f) - }) +func doPodResizeResourceQuotaTests(f *framework.Framework) { timeouts := framework.NewTimeoutContext() ginkgo.It("pod-resize-resource-quota-test", func(ctx context.Context) { - ginkgo.By("check if in place pod vertical scaling is supported", func() { - node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) - framework.ExpectNoError(err) - if !e2epod.IsInPlacePodVerticalScalingSupportedByRuntime(node) || framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { - e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") - } - }) + podClient := e2epod.NewPodClient(f) resourceQuota := v1.ResourceQuota{ ObjectMeta: metav1.ObjectMeta{ Name: "resize-resource-quota", @@ -166,21 +155,9 @@ func doPodResizeResourceQuotaTests() { }) } -func doPodResizeSchedulerTests() { - f := framework.NewDefaultFramework("pod-resize-scheduler") - var podClient *e2epod.PodClient - ginkgo.BeforeEach(func() { - podClient = e2epod.NewPodClient(f) - }) - +func doPodResizeSchedulerTests(f *framework.Framework) { ginkgo.It("pod-resize-scheduler-tests", func(ctx context.Context) { - ginkgo.By("check if in place pod vertical scaling is supported", func() { - node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) - framework.ExpectNoError(err) - if !e2epod.IsInPlacePodVerticalScalingSupportedByRuntime(node) || framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { - e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") - } - }) + podClient := e2epod.NewPodClient(f) nodes, err := e2enode.GetReadySchedulableNodes(ctx, f.ClientSet) framework.ExpectNoError(err, "failed to get running nodes") gomega.Expect(nodes.Items).ShouldNot(gomega.BeEmpty()) @@ -342,9 +319,25 @@ func doPodResizeSchedulerTests() { } var _ = SIGDescribe(framework.WithSerial(), "Pod InPlace Resize Container (scheduler-focused)", feature.InPlacePodVerticalScaling, func() { - doPodResizeSchedulerTests() + f := framework.NewDefaultFramework("pod-resize-scheduler-tests") + ginkgo.BeforeEach(func(ctx context.Context) { + node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) + framework.ExpectNoError(err) + if framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { + e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") + } + }) + doPodResizeSchedulerTests(f) }) var _ = SIGDescribe("Pod InPlace Resize Container", feature.InPlacePodVerticalScaling, func() { - doPodResizeResourceQuotaTests() + f := framework.NewDefaultFramework("pod-resize-tests") + ginkgo.BeforeEach(func(ctx context.Context) { + node, err := e2enode.GetRandomReadySchedulableNode(ctx, f.ClientSet) + framework.ExpectNoError(err) + if framework.NodeOSDistroIs("windows") || e2enode.IsARM64(node) { + e2eskipper.Skipf("runtime does not support InPlacePodVerticalScaling -- skipping") + } + }) + doPodResizeResourceQuotaTests(f) })