diff --git a/cluster-autoscaler/utils/kubernetes/factory.go b/cluster-autoscaler/utils/kubernetes/factory.go index 77c245cdd9ee..bb814276206a 100644 --- a/cluster-autoscaler/utils/kubernetes/factory.go +++ b/cluster-autoscaler/utils/kubernetes/factory.go @@ -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 @@ -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, "") - } -}