diff --git a/pkg/ipamd/ipamd.go b/pkg/ipamd/ipamd.go index 6ea08d42a1..6533149900 100644 --- a/pkg/ipamd/ipamd.go +++ b/pkg/ipamd/ipamd.go @@ -652,7 +652,11 @@ func (c *IPAMContext) updateIPPoolIfRequired(ctx context.Context) { log.Debugf("IP stats - total IPs: %d, assigned IPs: %d, cooldown IPs: %d", stats.TotalIPs, stats.AssignedIPs, stats.CooldownIPs) if datastorePoolTooLow { - c.increaseDatastorePool(ctx) + // Allow for rapid scale up to decrease time it takes for pod to retrieve an ip + // but conservative scale down to account for pod churn + for datastorePoolStillTooLow := datastorePoolTooLow; datastorePoolStillTooLow; datastorePoolStillTooLow, _ = c.isDatastorePoolTooLow() { + c.increaseDatastorePool(ctx) + } } else if c.isDatastorePoolTooHigh(stats) { c.decreaseDatastorePool(decreaseIPPoolInterval) }