Skip to content

Commit 376454b

Browse files
committed
Adjust kubeip GCP address listing to include random sleep for better address allocation distribution. Add max wait time constant to control sleep duration.
1 parent 902814f commit 376454b

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

examples/gcp/gke.tf

+3-2
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,9 @@ resource "kubernetes_daemonset" "kubeip_daemonset" {
280280
termination_grace_period_seconds = 30
281281
priority_class_name = "system-node-critical"
282282
container {
283-
name = "kubeip-agent"
284-
image = "doitintl/kubeip-agent:${var.kubeip_version}"
283+
name = "kubeip-agent"
284+
image = "doitintl/kubeip-agent:${var.kubeip_version}"
285+
image_pull_policy = "Always"
285286
env {
286287
name = "NODE_NAME"
287288
value_from {

internal/address/gcp.go

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package address
33
import (
44
"context"
55
"fmt"
6+
"math/rand"
67
"strings"
78
"time"
89

@@ -26,6 +27,7 @@ const (
2627
accessConfigKind = "compute#accessConfig"
2728
defaultPrefixLength = 96
2829
maxRetries = 10 // number of retries for assigning ephemeral public IP address
30+
maxWaitListTime = 10 // max time to wait before listing addresses
2931
)
3032

3133
var (
@@ -221,6 +223,11 @@ func (a *gcpAssigner) Assign(ctx context.Context, instanceID, zone string, filte
221223
return errors.Wrapf(err, "check if static public IP is already assigned to instance %s", instanceID)
222224
}
223225

226+
// add random sleep to reduce the chance of multiple kubeip instances getting the same address list
227+
waitTime := time.Duration(rand.Intn(maxWaitListTime)) * time.Second //nolint:gosec
228+
a.logger.WithField("waitTime", waitTime).Debug("waiting before listing addresses")
229+
time.Sleep(waitTime)
230+
224231
// get available reserved public IP addresses
225232
addresses, err := a.listAddresses(filter, orderBy, reservedStatus)
226233
if err != nil {

0 commit comments

Comments
 (0)