From 620d21385630b1c809889ee3116e688dcecf78c7 Mon Sep 17 00:00:00 2001 From: Todd Treece <360020+toddtreece@users.noreply.github.com> Date: Fri, 28 Feb 2025 10:39:41 -0500 Subject: [PATCH] K8s: Set priority for aggregated discovery (#101427) --- pkg/services/apiserver/builder/helper.go | 12 ++++++++++++ pkg/services/apiserver/service.go | 9 ++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkg/services/apiserver/builder/helper.go b/pkg/services/apiserver/builder/helper.go index 8f6fe0e3783..5fdf11c51a8 100644 --- a/pkg/services/apiserver/builder/helper.go +++ b/pkg/services/apiserver/builder/helper.go @@ -245,6 +245,18 @@ func SetupConfig( serverConfig.EffectiveVersion = v + // set priority for aggregated discovery + for i, b := range builders { + gvs := GetGroupVersions(b) + if len(gvs) == 0 { + return fmt.Errorf("builder did not return any API group versions: %T", b) + } + pvs := scheme.PrioritizedVersionsForGroup(gvs[0].Group) + for j, gv := range pvs { + serverConfig.AggregatedDiscoveryGroupManager.SetGroupVersionPriority(metav1.GroupVersion(gv), 15000+i, len(pvs)-j) + } + } + if err := AddPostStartHooks(serverConfig, builders); err != nil { return err } diff --git a/pkg/services/apiserver/service.go b/pkg/services/apiserver/service.go index dd9d39874e8..1105604aee1 100644 --- a/pkg/services/apiserver/service.go +++ b/pkg/services/apiserver/service.go @@ -278,18 +278,21 @@ func (s *service) start(ctx context.Context) error { groupVersions := make([]schema.GroupVersion, 0, len(builders)) // Install schemas - initialSize := len(kubeaggregator.APIVersionPriorities) for i, b := range builders { gvs := builder.GetGroupVersions(b) groupVersions = append(groupVersions, gvs...) + if len(gvs) == 0 { + return fmt.Errorf("no group versions found for builder %T", b) + } if err := b.InstallSchema(Scheme); err != nil { return err } + pvs := Scheme.PrioritizedVersionsForGroup(gvs[0].Group) - for _, gv := range gvs { + for j, gv := range pvs { if s.features.IsEnabledGlobally(featuremgmt.FlagKubernetesAggregator) { // set the priority for the group+version - kubeaggregator.APIVersionPriorities[gv] = kubeaggregator.Priority{Group: 15000, Version: int32(i + initialSize)} + kubeaggregator.APIVersionPriorities[gv] = kubeaggregator.Priority{Group: int32(15000 + i), Version: int32(len(pvs) - j)} } if a, ok := b.(builder.APIGroupAuthorizer); ok {