From 53b5ee6599e106af8862a92248d4ef9834fccae1 Mon Sep 17 00:00:00 2001 From: Bryan Cox Date: Thu, 30 Apr 2026 10:00:01 -0400 Subject: [PATCH] test: add opt-in CPU resource request overrides for control plane components Control plane pods have CPU requests far below actual usage (e.g. ignition-server requests 10m but peaks at 960m). This causes the scheduler to over-pack hosted clusters onto management nodes, leading to CPU starvation and e2e test failures from pods timing out. Add resource-request-override annotations to e2e HostedCluster defaults to better reflect actual CPU consumption. This raises per-cluster total CPU requests from ~3015m to ~4700m, giving the scheduler accurate capacity signals to spread workloads across nodes. The overrides are opt-in via the E2E_RESOURCE_REQUEST_OVERRIDES=1 env var to avoid inadvertently breaking jobs that are running fine today. Based-on: https://github.com/openshift/hypershift/pull/8350 Original-author: Cesar Wong Co-Authored-By: Claude Opus 4.6 --- test/e2e/util/options.go | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/test/e2e/util/options.go b/test/e2e/util/options.go index 54f4eeac3a07..d065ba739f45 100644 --- a/test/e2e/util/options.go +++ b/test/e2e/util/options.go @@ -226,12 +226,9 @@ func (o *Options) DefaultClusterOptions(t *testing.T) PlatformAgnosticOptions { ClusterCIDR: []string{"10.132.0.0/14"}, BeforeApply: o.BeforeApply, Log: NewLogr(t), - Annotations: []string{ - fmt.Sprintf("%s=true", hyperv1.CleanupCloudResourcesAnnotation), - fmt.Sprintf("%s=true", hyperv1.SkipReleaseImageValidation), - }, - EtcdStorageClass: o.ConfigurableClusterOptions.EtcdStorageClass, - DisableClusterCapabilities: o.ConfigurableClusterOptions.DisableClusterCapabilities, + Annotations: e2eDefaultAnnotations(), + EtcdStorageClass: o.ConfigurableClusterOptions.EtcdStorageClass, + DisableClusterCapabilities: o.ConfigurableClusterOptions.DisableClusterCapabilities, }, NonePlatform: o.DefaultNoneOptions(), AWSPlatform: o.DefaultAWSOptions(), @@ -603,3 +600,26 @@ func (s *stringMapVar) Set(value string) error { func shouldTestCPOOverride() bool { return os.Getenv("TEST_CPO_OVERRIDE") == "1" } + +func e2eDefaultAnnotations() []string { + annotations := []string{ + fmt.Sprintf("%s=true", hyperv1.CleanupCloudResourcesAnnotation), + fmt.Sprintf("%s=true", hyperv1.SkipReleaseImageValidation), + } + if os.Getenv("E2E_RESOURCE_REQUEST_OVERRIDES") == "1" { + annotations = append(annotations, + fmt.Sprintf("%s/ignition-server.ignition-server=cpu=200m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/control-plane-operator.control-plane-operator=cpu=500m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/packageserver.packageserver=cpu=50m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/certified-operators-catalog.registry=cpu=30m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/community-operators-catalog.registry=cpu=30m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/redhat-marketplace-catalog.registry=cpu=30m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/redhat-operators-catalog.registry=cpu=30m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/hosted-cluster-config-operator.hosted-cluster-config-operator=cpu=100m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/control-plane-pki-operator.control-plane-pki-operator=cpu=30m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/kube-apiserver.kube-apiserver=cpu=500m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + fmt.Sprintf("%s/cluster-version-operator.cluster-version-operator=cpu=75m", hyperv1.ResourceRequestOverrideAnnotationPrefix), + ) + } + return annotations +}