Skip to content

Commit

Permalink
feature: Optimizing Pod SidecarSet webhook performance #1546
Browse files Browse the repository at this point in the history
Signed-off-by: acejilam <[email protected]>
  • Loading branch information
ls-2018 committed Mar 28, 2024
1 parent 912de49 commit 27a49ea
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 9 deletions.
33 changes: 27 additions & 6 deletions pkg/util/fieldindex/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,23 @@ import (
"context"
"sync"

"sigs.k8s.io/controller-runtime/pkg/client"

appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1"
utildiscovery "github.com/openkruise/kruise/pkg/util/discovery"

batchv1 "k8s.io/api/batch/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/client"
)

const (
IndexNameForPodNodeName = "spec.nodeName"
IndexNameForOwnerRefUID = "ownerRefUID"
IndexNameForController = ".metadata.controller"
IndexNameForIsActive = "isActive"
IndexNameForPodNodeName = "spec.nodeName"
IndexNameForOwnerRefUID = "ownerRefUID"
IndexNameForController = ".metadata.controller"
IndexNameForIsActive = "isActive"
IndexNameForSideCarSetNamespace = "namespace"
IndexValueSideCarSetClusterScope = "ClusterScope"
)

var (
Expand Down Expand Up @@ -87,6 +89,12 @@ func RegisterFieldIndexes(c cache.Cache) error {
return
}
}
// sidecar spec namespaces
if utildiscovery.DiscoverObject(&appsv1alpha1.SidecarSet{}) {
if err = indexSideCatSet(c); err != nil {
return
}
}
})
return err
}
Expand Down Expand Up @@ -152,3 +160,16 @@ func indexImagePullJobActive(c cache.Cache) error {
return []string{isActive}
})
}

func indexSideCatSet(c cache.Cache) error {
return c.IndexField(context.TODO(), &appsv1alpha1.SidecarSet{}, IndexNameForSideCarSetNamespace, func(rawObj client.Object) []string {
obj := rawObj.(*appsv1alpha1.SidecarSet)
if obj == nil {
return nil
}
if obj.Spec.Namespace != "" {
return []string{obj.Spec.Namespace}
}
return []string{IndexValueSideCarSetClusterScope}
})
}
24 changes: 21 additions & 3 deletions pkg/webhook/pod/mutating/sidecarset.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (
"sort"
"strings"

"github.com/openkruise/kruise/pkg/util/fieldindex"

appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1"
"github.com/openkruise/kruise/pkg/control/sidecarcontrol"
"github.com/openkruise/kruise/pkg/util"
Expand All @@ -35,6 +37,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)

Expand Down Expand Up @@ -64,13 +67,28 @@ func (h *PodCreateHandler) sidecarsetMutatingPod(ctx context.Context, req admiss
}

// DisableDeepCopy:true, indicates must be deep copy before update sidecarSet objection

sidecarsetList := &appsv1alpha1.SidecarSetList{}
if err = h.Client.List(ctx, sidecarsetList, utilclient.DisableDeepCopy); err != nil {
sidecarsetList2 := &appsv1alpha1.SidecarSetList{}
podNamespace := pod.Namespace
if podNamespace == "" {
podNamespace = "default"
}
if err := h.Client.List(ctx, sidecarsetList, client.MatchingFields{fieldindex.IndexNameForSideCarSetNamespace: podNamespace}, utilclient.DisableDeepCopy); err != nil {
return false, err
}

if err := h.Client.List(ctx, sidecarsetList2, client.MatchingFields{fieldindex.IndexNameForSideCarSetNamespace: fieldindex.IndexValueSideCarSetClusterScope}, utilclient.DisableDeepCopy); err != nil {
return false, err
}
handleSideCarSetMap := make(map[string]bool, len(sidecarsetList.Items)+len(sidecarsetList2.Items))
matchedSidecarSets := make([]sidecarcontrol.SidecarControl, 0)
for _, sidecarSet := range sidecarsetList.Items {
for _, sidecarSet := range append(sidecarsetList.Items, sidecarsetList2.Items...) {
// Prevents sidecarSet from processing twice
key := fmt.Sprintf("%s/%s", sidecarSet.Namespace, sidecarSet.Name)
if handleSideCarSetMap[key] {
continue
}
handleSideCarSetMap[key] = true
if sidecarSet.Spec.InjectionStrategy.Paused {
continue
}
Expand Down

0 comments on commit 27a49ea

Please sign in to comment.