diff --git a/vertical-pod-autoscaler/e2e/integration/recommender.go b/vertical-pod-autoscaler/e2e/integration/recommender.go index ccce5fa93dab..404bd359020e 100644 --- a/vertical-pod-autoscaler/e2e/integration/recommender.go +++ b/vertical-pod-autoscaler/e2e/integration/recommender.go @@ -46,7 +46,7 @@ var _ = utils.RecommenderE2eDescribe("Flags", func() { }) ginkgo.AfterEach(func() { - f.ClientSet.AppsV1().Deployments(utils.RecommenderNamespace).Delete(context.TODO(), utils.RecommenderDeploymentName, metav1.DeleteOptions{}) + f.ClientSet.AppsV1().Deployments(utils.VpaNamespace).Delete(context.TODO(), utils.RecommenderDeploymentName, metav1.DeleteOptions{}) }) ginkgo.It("starts recommender with --vpa-object-namespace parameter", func() { @@ -54,7 +54,7 @@ var _ = utils.RecommenderE2eDescribe("Flags", func() { ignoredNamespace, err := f.CreateNamespace(context.TODO(), "ignored-namespace", nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) - f.Namespace.Name = utils.RecommenderNamespace + f.Namespace.Name = utils.VpaNamespace vpaDeployment := utils.NewVPADeployment(f, []string{ "--recommender-interval=10s", fmt.Sprintf("--vpa-object-namespace=%s", hamsterNamespace), @@ -69,7 +69,7 @@ var _ = utils.RecommenderE2eDescribe("Flags", func() { ignoredNamespace, err := f.CreateNamespace(context.TODO(), "ignored-namespace", nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) - f.Namespace.Name = utils.RecommenderNamespace + f.Namespace.Name = utils.VpaNamespace vpaDeployment := utils.NewVPADeployment(f, []string{ "--recommender-interval=10s", fmt.Sprintf("--ignored-vpa-object-namespaces=%s", ignoredNamespace.Name), diff --git a/vertical-pod-autoscaler/e2e/utils/common.go b/vertical-pod-autoscaler/e2e/utils/common.go index b4fc8e12c3f5..21cc5a1d6f8c 100644 --- a/vertical-pod-autoscaler/e2e/utils/common.go +++ b/vertical-pod-autoscaler/e2e/utils/common.go @@ -20,6 +20,7 @@ import ( "context" "encoding/json" "fmt" + "os" "time" ginkgo "github.com/onsi/ginkgo/v2" @@ -44,8 +45,6 @@ const ( // RecommenderDeploymentName is VPA recommender deployment name RecommenderDeploymentName = "vpa-recommender" - // RecommenderNamespace is namespace to deploy VPA recommender - RecommenderNamespace = "kube-system" // PollInterval is interval for polling PollInterval = 10 * time.Second // PollTimeout is timeout for polling @@ -57,6 +56,18 @@ const ( DefaultHamsterBackoffLimit = int32(10) ) +var ( + // VpaNamespace is namespace to deploy VPA components. + // Can be overridden via VPA_NAMESPACE environment variable. + VpaNamespace = "kube-system" +) + +func init() { + if ns := os.Getenv("VPA_NAMESPACE"); ns != "" { + VpaNamespace = ns + } +} + // HamsterTargetRef is CrossVersionObjectReference of hamster app var HamsterTargetRef = &autoscaling.CrossVersionObjectReference{ APIVersion: "apps/v1", diff --git a/vertical-pod-autoscaler/e2e/utils/webhook.go b/vertical-pod-autoscaler/e2e/utils/webhook.go index c1d2f70ac033..200001739fd0 100644 --- a/vertical-pod-autoscaler/e2e/utils/webhook.go +++ b/vertical-pod-autoscaler/e2e/utils/webhook.go @@ -219,7 +219,7 @@ func waitWebhookConfigurationReady(f *framework.Framework) error { func CreateAuthReaderRoleBinding(f *framework.Framework, namespace string) { ginkgo.By("Create role binding to let webhook read extension-apiserver-authentication") client := f.ClientSet - _, err := client.RbacV1().RoleBindings("kube-system").Create(context.TODO(), &rbacv1.RoleBinding{ + _, err := client.RbacV1().RoleBindings(VpaNamespace).Create(context.TODO(), &rbacv1.RoleBinding{ ObjectMeta: metav1.ObjectMeta{ Name: roleBindingName, Annotations: map[string]string{ @@ -382,5 +382,5 @@ func CleanWebhookTest(client clientset.Interface, namespaceName string) { _ = client.CoreV1().Services(namespaceName).Delete(context.TODO(), WebhookServiceName, metav1.DeleteOptions{}) _ = client.AppsV1().Deployments(namespaceName).Delete(context.TODO(), deploymentName, metav1.DeleteOptions{}) _ = client.CoreV1().Secrets(namespaceName).Delete(context.TODO(), WebhookServiceName, metav1.DeleteOptions{}) - _ = client.RbacV1().RoleBindings("kube-system").Delete(context.TODO(), roleBindingName, metav1.DeleteOptions{}) + _ = client.RbacV1().RoleBindings(VpaNamespace).Delete(context.TODO(), roleBindingName, metav1.DeleteOptions{}) } diff --git a/vertical-pod-autoscaler/e2e/v1/common.go b/vertical-pod-autoscaler/e2e/v1/common.go index 17517ff15918..386757f92450 100644 --- a/vertical-pod-autoscaler/e2e/v1/common.go +++ b/vertical-pod-autoscaler/e2e/v1/common.go @@ -53,9 +53,6 @@ const ( // VpaInPlaceTimeout is a timeout for the VPA to finish in-place resizing a // pod, if there are no mechanisms blocking it. VpaInPlaceTimeout = 2 * time.Minute - - // VpaNamespace is the default namespace that holds the all the VPA components. - VpaNamespace = "kube-system" ) // UpdaterE2eDescribe describes a VPA updater e2e test. diff --git a/vertical-pod-autoscaler/e2e/v1/recommender.go b/vertical-pod-autoscaler/e2e/v1/recommender.go index 4177e9971fda..ae747ccc881a 100644 --- a/vertical-pod-autoscaler/e2e/v1/recommender.go +++ b/vertical-pod-autoscaler/e2e/v1/recommender.go @@ -480,7 +480,7 @@ var _ = utils.RecommenderE2eDescribe("VPA CRD object", func() { }) func deleteRecommender(c clientset.Interface) error { - namespace := "kube-system" + namespace := utils.VpaNamespace listOptions := metav1.ListOptions{} podList, err := c.CoreV1().Pods(namespace).List(context.TODO(), listOptions) if err != nil { diff --git a/vertical-pod-autoscaler/e2e/v1/updater.go b/vertical-pod-autoscaler/e2e/v1/updater.go index 19327021c8e0..0039565a071a 100644 --- a/vertical-pod-autoscaler/e2e/v1/updater.go +++ b/vertical-pod-autoscaler/e2e/v1/updater.go @@ -48,7 +48,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { statusUpdater := status.NewUpdater( f.ClientSet, status.AdmissionControllerStatusName, - status.AdmissionControllerStatusNamespace, + utils.VpaNamespace, statusUpdateInterval, "e2e test", ) @@ -57,7 +57,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { // Status is created outside the test namespace. ginkgo.By("Deleting the Admission Controller status") close(stopCh) - err := f.ClientSet.CoordinationV1().Leases(status.AdmissionControllerStatusNamespace). + err := f.ClientSet.CoordinationV1().Leases(utils.VpaNamespace). Delete(context.TODO(), status.AdmissionControllerStatusName, metav1.DeleteOptions{}) gomega.Expect(err).NotTo(gomega.HaveOccurred()) }() @@ -79,7 +79,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { statusUpdater := status.NewUpdater( f.ClientSet, status.AdmissionControllerStatusName, - status.AdmissionControllerStatusNamespace, + utils.VpaNamespace, statusUpdateInterval, "e2e test", ) @@ -88,7 +88,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { // Status is created outside the test namespace. ginkgo.By("Deleting the Admission Controller status") close(stopCh) - err := f.ClientSet.CoordinationV1().Leases(status.AdmissionControllerStatusNamespace). + err := f.ClientSet.CoordinationV1().Leases(utils.VpaNamespace). Delete(context.TODO(), status.AdmissionControllerStatusName, metav1.DeleteOptions{}) gomega.Expect(err).NotTo(gomega.HaveOccurred()) }() @@ -109,7 +109,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { statusUpdater := status.NewUpdater( f.ClientSet, status.AdmissionControllerStatusName, - status.AdmissionControllerStatusNamespace, + utils.VpaNamespace, statusUpdateInterval, "e2e test", ) @@ -118,7 +118,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { // Status is created outside the test namespace. ginkgo.By("Deleting the Admission Controller status") close(stopCh) - err := f.ClientSet.CoordinationV1().Leases(status.AdmissionControllerStatusNamespace). + err := f.ClientSet.CoordinationV1().Leases(utils.VpaNamespace). Delete(context.TODO(), status.AdmissionControllerStatusName, metav1.DeleteOptions{}) gomega.Expect(err).NotTo(gomega.HaveOccurred()) }() @@ -151,7 +151,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { statusUpdater := status.NewUpdater( f.ClientSet, status.AdmissionControllerStatusName, - status.AdmissionControllerStatusNamespace, + utils.VpaNamespace, statusUpdateInterval, "e2e test", ) @@ -160,7 +160,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { // Status is created outside the test namespace. ginkgo.By("Deleting the Admission Controller status") close(stopCh) - err := f.ClientSet.CoordinationV1().Leases(status.AdmissionControllerStatusNamespace). + err := f.ClientSet.CoordinationV1().Leases(utils.VpaNamespace). Delete(context.TODO(), status.AdmissionControllerStatusName, metav1.DeleteOptions{}) gomega.Expect(err).NotTo(gomega.HaveOccurred()) }() @@ -183,7 +183,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { statusUpdater := status.NewUpdater( f.ClientSet, status.AdmissionControllerStatusName, - status.AdmissionControllerStatusNamespace, + utils.VpaNamespace, statusUpdateInterval, "e2e test", ) @@ -192,7 +192,7 @@ var _ = UpdaterE2eDescribe("Updater", func() { // Status is created outside the test namespace. ginkgo.By("Deleting the Admission Controller status") close(stopCh) - err := f.ClientSet.CoordinationV1().Leases(status.AdmissionControllerStatusNamespace). + err := f.ClientSet.CoordinationV1().Leases(utils.VpaNamespace). Delete(context.TODO(), status.AdmissionControllerStatusName, metav1.DeleteOptions{}) gomega.Expect(err).NotTo(gomega.HaveOccurred()) }()