From f19750987975820f9f9afccea289bffa565855a1 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 18 Jul 2022 09:20:58 -0500 Subject: [PATCH] proxy: queue syncs on node events rather than syncing immediately The proxies watch node labels for topology changes, but node labels can change in bursts especially in larger clusters. This causes pressure on all proxies because they can't filter the events, since the topology could match on any label. Change node event handling to queue the request rather than immediately syncing. The sync runner can already handle short bursts which shouldn't change behavior for most cases. Signed-off-by: Dan Williams --- pkg/proxy/iptables/proxier.go | 6 +++--- pkg/proxy/ipvs/proxier.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 6b759ece813..55e9d678fb8 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -633,7 +633,7 @@ func (proxier *Proxier) OnNodeAdd(node *v1.Node) { proxier.mu.Unlock() klog.V(4).InfoS("Updated proxier node labels", "labels", node.Labels) - proxier.syncProxyRules() + proxier.Sync() } // OnNodeUpdate is called whenever modification of an existing @@ -657,7 +657,7 @@ func (proxier *Proxier) OnNodeUpdate(oldNode, node *v1.Node) { proxier.mu.Unlock() klog.V(4).InfoS("Updated proxier node labels", "labels", node.Labels) - proxier.syncProxyRules() + proxier.Sync() } // OnNodeDelete is called whenever deletion of an existing node @@ -672,7 +672,7 @@ func (proxier *Proxier) OnNodeDelete(node *v1.Node) { proxier.nodeLabels = nil proxier.mu.Unlock() - proxier.syncProxyRules() + proxier.Sync() } // OnNodeSynced is called once all the initial event handlers were diff --git a/pkg/proxy/ipvs/proxier.go b/pkg/proxy/ipvs/proxier.go index 823ca8e5324..f99378a3f24 100644 --- a/pkg/proxy/ipvs/proxier.go +++ b/pkg/proxy/ipvs/proxier.go @@ -955,7 +955,7 @@ func (proxier *Proxier) OnNodeAdd(node *v1.Node) { proxier.mu.Unlock() klog.V(4).InfoS("Updated proxier node labels", "labels", node.Labels) - proxier.syncProxyRules() + proxier.Sync() } // OnNodeUpdate is called whenever modification of an existing @@ -978,7 +978,7 @@ func (proxier *Proxier) OnNodeUpdate(oldNode, node *v1.Node) { proxier.mu.Unlock() klog.V(4).InfoS("Updated proxier node labels", "labels", node.Labels) - proxier.syncProxyRules() + proxier.Sync() } // OnNodeDelete is called whenever deletion of an existing node @@ -992,7 +992,7 @@ func (proxier *Proxier) OnNodeDelete(node *v1.Node) { proxier.nodeLabels = nil proxier.mu.Unlock() - proxier.syncProxyRules() + proxier.Sync() } // OnNodeSynced is called once all the initial event handlers were