Skip to content

Commit

Permalink
feature: Optimizing Pod SidecarSet webhook performance openkruise#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 4298d8b
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 9 deletions.
46 changes: 40 additions & 6 deletions pkg/util/fieldindex/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,24 @@ 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"
LabelMetadataName = "kubernetes.io/metadata.name"
)

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

func indexSideCarSet(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}
}
if obj.Spec.NamespaceSelector != nil {
if obj.Spec.NamespaceSelector.MatchLabels != nil {
if v, ok := obj.Spec.NamespaceSelector.MatchLabels[LabelMetadataName]; ok {
return []string{v}
}
}
for _, item := range obj.Spec.NamespaceSelector.MatchExpressions {
if item.Key == LabelMetadataName && item.Operator == metav1.LabelSelectorOpIn {
return item.Values
}
}
}
return []string{IndexValueSidecarSetClusterScope}
})
}
17 changes: 14 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,21 @@ 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
}

matchedSidecarSets := make([]sidecarcontrol.SidecarControl, 0)
for _, sidecarSet := range sidecarsetList.Items {
for _, sidecarSet := range append(sidecarsetList.Items, sidecarsetList2.Items...) {
if sidecarSet.Spec.InjectionStrategy.Paused {
continue
}
Expand Down

0 comments on commit 4298d8b

Please sign in to comment.