[kube-proxy:nftables] Add partialSync mode to only transact changed
objects. Change the order of operations to stop current iteration if no changes to the service chains are needed. Bump syncProxy frequency to 1 hour. In a test kind cluster creation of 10K services, 2 endpoints each, takes ~25m before the fix and ~9min after. Maximum memory usage during creation is ~650MiB and 260MiB respectively. Another important metric is the time it takes to create 1 new service when 10K svc already exist. It used to take ~8m before the fix, with partialSync it takes ~141ms. Signed-off-by: Nadia Pinaeva <n.m.pinaeva@gmail.com>
This commit is contained in:
@@ -119,6 +119,7 @@ func NewFakeProxier(ipFamily v1.IPFamily) (*knftables.Fake, *Proxier) {
|
||||
serviceChanges: proxy.NewServiceChangeTracker(newServiceInfo, ipFamily, nil, nil),
|
||||
endpointsMap: make(proxy.EndpointsMap),
|
||||
endpointsChanges: proxy.NewEndpointsChangeTracker(testHostname, newEndpointInfo, ipFamily, nil, nil),
|
||||
needFullSync: true,
|
||||
nftables: nft,
|
||||
masqueradeMark: "0x4000",
|
||||
conntrack: conntrack.NewFake(),
|
||||
@@ -130,6 +131,12 @@ func NewFakeProxier(ipFamily v1.IPFamily) (*knftables.Fake, *Proxier) {
|
||||
networkInterfacer: networkInterfacer,
|
||||
staleChains: make(map[string]time.Time),
|
||||
serviceCIDRs: serviceCIDRs,
|
||||
clusterIPs: newNFTElementStorage("set", clusterIPsSet),
|
||||
serviceIPs: newNFTElementStorage("map", serviceIPsMap),
|
||||
firewallIPs: newNFTElementStorage("map", firewallIPsMap),
|
||||
noEndpointServices: newNFTElementStorage("map", noEndpointServicesMap),
|
||||
noEndpointNodePorts: newNFTElementStorage("map", noEndpointNodePortsMap),
|
||||
serviceNodePorts: newNFTElementStorage("map", serviceNodePortsMap),
|
||||
}
|
||||
p.setInitialized(true)
|
||||
p.syncRunner = async.NewBoundedFrequencyRunner("test-sync-runner", p.syncProxyRules, 0, time.Minute, 1)
|
||||
|
||||
Reference in New Issue
Block a user