diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 9db28bb0f15..c5fbc3ff2ba 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -65,6 +65,7 @@ import ( // reconfigure framework _ "k8s.io/kubernetes/test/e2e/framework/debug/init" + _ "k8s.io/kubernetes/test/e2e/framework/todo/metrics/init" _ "k8s.io/kubernetes/test/e2e/framework/todo/node/init" ) diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index b3ffbc161e0..1fc1b329838 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -50,9 +50,6 @@ import ( admissionapi "k8s.io/pod-security-admission/api" "github.com/onsi/ginkgo/v2" - - // TODO: Remove the following imports (ref: https://github.com/kubernetes/kubernetes/issues/81245) - e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics" ) const ( @@ -123,9 +120,6 @@ type Framework struct { // or stdout if ReportDir is not set once test ends. TestSummaries []TestDataSummary - // Place to keep ClusterAutoscaler metrics from before test in order to compute delta. - clusterAutoscalerMetricsBeforeTest e2emetrics.Collection - // Timeouts contains the custom timeouts used during the test execution. Timeouts *TimeoutContext @@ -304,22 +298,6 @@ func (f *Framework) BeforeEach() { }() } - gatherMetricsAfterTest := TestContext.GatherMetricsAfterTest == "true" || TestContext.GatherMetricsAfterTest == "master" - if gatherMetricsAfterTest && TestContext.IncludeClusterAutoscalerMetrics { - grabber, err := e2emetrics.NewMetricsGrabber(f.ClientSet, f.KubemarkExternalClusterClientSet, f.ClientConfig(), !ProviderIs("kubemark"), false, false, false, TestContext.IncludeClusterAutoscalerMetrics, false) - if err != nil { - Logf("Failed to create MetricsGrabber (skipping ClusterAutoscaler metrics gathering before test): %v", err) - } else { - f.clusterAutoscalerMetricsBeforeTest, err = grabber.Grab() - if err != nil { - Logf("MetricsGrabber failed to grab CA metrics before test (skipping metrics gathering): %v", err) - } else { - Logf("Gathered ClusterAutoscaler metrics before test") - } - } - - } - f.flakeReport = NewFlakeReport() } @@ -445,23 +423,6 @@ func (f *Framework) AfterEach() { f.TestSummaries = append(f.TestSummaries, f.logsSizeVerifier.GetSummary()) } - if TestContext.GatherMetricsAfterTest != "false" { - ginkgo.By("Gathering metrics") - // Grab apiserver, scheduler, controller-manager metrics and (optionally) nodes' kubelet metrics. - grabMetricsFromKubelets := TestContext.GatherMetricsAfterTest != "master" && !ProviderIs("kubemark") - grabber, err := e2emetrics.NewMetricsGrabber(f.ClientSet, f.KubemarkExternalClusterClientSet, f.ClientConfig(), grabMetricsFromKubelets, true, true, true, TestContext.IncludeClusterAutoscalerMetrics, false) - if err != nil { - Logf("Failed to create MetricsGrabber (skipping metrics gathering): %v", err) - } else { - received, err := grabber.Grab() - if err != nil { - Logf("MetricsGrabber failed to grab some of the metrics: %v", err) - } - (*e2emetrics.ComponentCollection)(&received).ComputeClusterAutoscalerMetricsDelta(f.clusterAutoscalerMetricsBeforeTest) - f.TestSummaries = append(f.TestSummaries, (*e2emetrics.ComponentCollection)(&received)) - } - } - TestContext.CloudConfig.Provider.FrameworkAfterEach(f) // Report any flakes that were observed in the e2e test and reset. diff --git a/test/e2e/framework/todo/metrics/grab.go b/test/e2e/framework/todo/metrics/grab.go new file mode 100644 index 00000000000..9e36d8661e7 --- /dev/null +++ b/test/e2e/framework/todo/metrics/grab.go @@ -0,0 +1,74 @@ +/* +Copyright 2015 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 metrics + +import ( + "github.com/onsi/ginkgo/v2" + + "k8s.io/kubernetes/test/e2e/framework" + e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics" +) + +func GrabBeforeEach(f *framework.Framework) (result *e2emetrics.Collection) { + gatherMetricsAfterTest := framework.TestContext.GatherMetricsAfterTest == "true" || framework.TestContext.GatherMetricsAfterTest == "master" + if !gatherMetricsAfterTest || !framework.TestContext.IncludeClusterAutoscalerMetrics { + return nil + } + + ginkgo.By("Gathering metrics before test", func() { + grabber, err := e2emetrics.NewMetricsGrabber(f.ClientSet, f.KubemarkExternalClusterClientSet, f.ClientConfig(), !framework.ProviderIs("kubemark"), false, false, false, framework.TestContext.IncludeClusterAutoscalerMetrics, false) + if err != nil { + framework.Logf("Failed to create MetricsGrabber (skipping ClusterAutoscaler metrics gathering before test): %v", err) + return + } + metrics, err := grabber.Grab() + if err != nil { + framework.Logf("MetricsGrabber failed to grab CA metrics before test (skipping metrics gathering): %v", err) + return + } + framework.Logf("Gathered ClusterAutoscaler metrics before test") + result = &metrics + }) + + return +} + +func GrabAfterEach(f *framework.Framework, before *e2emetrics.Collection) { + if framework.TestContext.GatherMetricsAfterTest == "false" { + return + } + + ginkgo.By("Gathering metrics after test", func() { + // Grab apiserver, scheduler, controller-manager metrics and (optionally) nodes' kubelet metrics. + grabMetricsFromKubelets := framework.TestContext.GatherMetricsAfterTest != "master" && !framework.ProviderIs("kubemark") + grabber, err := e2emetrics.NewMetricsGrabber(f.ClientSet, f.KubemarkExternalClusterClientSet, f.ClientConfig(), grabMetricsFromKubelets, true, true, true, framework.TestContext.IncludeClusterAutoscalerMetrics, false) + if err != nil { + framework.Logf("Failed to create MetricsGrabber (skipping metrics gathering): %v", err) + return + } + received, err := grabber.Grab() + if err != nil { + framework.Logf("MetricsGrabber failed to grab some of the metrics: %v", err) + return + } + if before == nil { + before = &e2emetrics.Collection{} + } + (*e2emetrics.ComponentCollection)(&received).ComputeClusterAutoscalerMetricsDelta(*before) + f.TestSummaries = append(f.TestSummaries, (*e2emetrics.ComponentCollection)(&received)) + }) +} diff --git a/test/e2e/framework/todo/metrics/init/init.go b/test/e2e/framework/todo/metrics/init/init.go new file mode 100644 index 00000000000..bed4cdea8bd --- /dev/null +++ b/test/e2e/framework/todo/metrics/init/init.go @@ -0,0 +1,39 @@ +/* +Copyright 2015 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 init installs GrabBeforeEach and GrabAfterEach as callbacks +// for gathering data before and after a test. +package init + +import ( + "github.com/onsi/ginkgo/v2" + + "k8s.io/kubernetes/test/e2e/framework" + e2etodometrics "k8s.io/kubernetes/test/e2e/framework/todo/metrics" +) + +func init() { + framework.NewFrameworkExtensions = append(framework.NewFrameworkExtensions, + func(f *framework.Framework) { + ginkgo.BeforeEach(func() { + metrics := e2etodometrics.GrabBeforeEach(f) + ginkgo.DeferCleanup(func() { + e2etodometrics.GrabAfterEach(f, metrics) + }) + }) + }, + ) +} diff --git a/test/e2e_kubeadm/e2e_kubeadm_suite_test.go b/test/e2e_kubeadm/e2e_kubeadm_suite_test.go index ca1f5b1bbda..8e8f0801d74 100644 --- a/test/e2e_kubeadm/e2e_kubeadm_suite_test.go +++ b/test/e2e_kubeadm/e2e_kubeadm_suite_test.go @@ -30,6 +30,7 @@ import ( // reconfigure framework _ "k8s.io/kubernetes/test/e2e/framework/debug/init" + _ "k8s.io/kubernetes/test/e2e/framework/todo/metrics/init" _ "k8s.io/kubernetes/test/e2e/framework/todo/node/init" ) diff --git a/test/e2e_node/e2e_node_suite_test.go b/test/e2e_node/e2e_node_suite_test.go index 9ce725a3bbe..a0d06e563b8 100644 --- a/test/e2e_node/e2e_node_suite_test.go +++ b/test/e2e_node/e2e_node_suite_test.go @@ -55,6 +55,7 @@ import ( // reconfigure framework _ "k8s.io/kubernetes/test/e2e/framework/debug/init" + _ "k8s.io/kubernetes/test/e2e/framework/todo/metrics/init" _ "k8s.io/kubernetes/test/e2e/framework/todo/node/init" "github.com/onsi/ginkgo/v2"