Skip to content

Commit

Permalink
UPSTREAM: <carry>: Revert "Adding config for event filtering"
Browse files Browse the repository at this point in the history
This reverts commit 6601bf0. See kubernetes#2495
  • Loading branch information
enxebre authored and JoelSpeed committed May 31, 2022
1 parent 5c3ac70 commit 1efbced
Showing 1 changed file with 3 additions and 48 deletions.
51 changes: 3 additions & 48 deletions cluster-autoscaler/utils/kubernetes/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,19 @@ limitations under the License.
package kubernetes

import (
"strings"

clientv1 "k8s.io/api/core/v1"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/scheme"
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
kube_record "k8s.io/client-go/tools/record"
)

const (
// Rate of refill for the event spam filter in client go
// 1 per event key per 5 minutes.
defaultQPS = 1. / 300.
// Number of events allowed per event key before rate limiting is triggered
// Has to greater than or equal to 1.
defaultBurstSize = 1
// Number of distinct event keys in the rate limiting cache.
defaultLRUCache = 8192
klog "k8s.io/klog/v2"
)

// CreateEventRecorder creates an event recorder to send custom events to Kubernetes to be recorded for targeted Kubernetes objects
func CreateEventRecorder(kubeClient clientset.Interface) kube_record.EventRecorder {
eventBroadcaster := kube_record.NewBroadcasterWithCorrelatorOptions(getCorrelationOptions())
eventBroadcaster := kube_record.NewBroadcaster()
eventBroadcaster.StartLogging(klog.V(4).Infof)
if _, isfake := kubeClient.(*fake.Clientset); !isfake {
actualSink := &v1core.EventSinkImpl{Interface: v1core.New(kubeClient.CoreV1().RESTClient()).Events("")}
// EventBroadcaster has a StartLogging() method but the throttling options from getCorrelationOptions() get applied only to
Expand All @@ -53,37 +42,3 @@ func CreateEventRecorder(kubeClient clientset.Interface) kube_record.EventRecord
}
return eventBroadcaster.NewRecorder(scheme.Scheme, clientv1.EventSource{Component: "cluster-autoscaler"})
}

func getCorrelationOptions() kube_record.CorrelatorOptions {
return kube_record.CorrelatorOptions{
QPS: defaultQPS,
BurstSize: defaultBurstSize,
LRUCacheSize: defaultLRUCache,
SpamKeyFunc: getCustomSpamKeyFunc(),
}
}

// getCustomSpamKeyFunc returns EventSpamKeyFunc to be used by EventBroadcaster.
// By default only defaultBurstSize events are allowed to be sent per each
// event.Source-event.InvolvedObject combination. We want to emit defaultBurstSize events per each
// Reason-Source-InvolvedObject combination and for cluster-autoscaler-status ConfigMap we
// want to emit all of the events, thus we provide custom SpamKeyFunc
func getCustomSpamKeyFunc() kube_record.EventSpamKeyFunc {
return func(event *clientv1.Event) string {
elementsToJoin := []string{
event.Reason,
event.Source.Component,
event.Source.Host,
event.InvolvedObject.Kind,
event.InvolvedObject.Namespace,
event.InvolvedObject.Name,
string(event.InvolvedObject.UID),
event.InvolvedObject.APIVersion,
}
// In case of cluster-autoscaler-status config map we want to emit all of the events, so we use event.Message as a key.
if event.InvolvedObject.Name == "cluster-autoscaler-status" && event.InvolvedObject.Namespace == "kube-system" && event.InvolvedObject.Kind == "ConfigMap" {
elementsToJoin = []string{event.Message}
}
return strings.Join(elementsToJoin, "")
}
}

0 comments on commit 1efbced

Please sign in to comment.