diff --git a/pkg/controller/nodeipam/ipam/cidr_allocator.go b/pkg/controller/nodeipam/ipam/cidr_allocator.go index 6541e1ca5c5..6261672bd61 100644 --- a/pkg/controller/nodeipam/ipam/cidr_allocator.go +++ b/pkg/controller/nodeipam/ipam/cidr_allocator.go @@ -78,7 +78,6 @@ const ( ) // nodePollInterval is used in listing node -// This is a variable instead of a const to enable testing. var nodePollInterval = 10 * time.Second // CIDRAllocator is an interface implemented by things that know how @@ -116,8 +115,7 @@ type nodeReservedCIDRs struct { // New creates a new CIDR range allocator. func New(ctx context.Context, kubeClient clientset.Interface, cloud cloudprovider.Interface, nodeInformer informers.NodeInformer, allocatorType CIDRAllocatorType, allocatorParams CIDRAllocatorParams) (CIDRAllocator, error) { - logger := klog.FromContext(ctx) - nodeList, err := listNodes(logger, kubeClient) + nodeList, err := listNodes(ctx, kubeClient) if err != nil { return nil, err } @@ -132,13 +130,15 @@ func New(ctx context.Context, kubeClient clientset.Interface, cloud cloudprovide } } -func listNodes(logger klog.Logger, kubeClient clientset.Interface) (*v1.NodeList, error) { +func listNodes(ctx context.Context, kubeClient clientset.Interface) (*v1.NodeList, error) { var nodeList *v1.NodeList + logger := klog.FromContext(ctx) + // We must poll because apiserver might not be up. This error causes // controller manager to restart. - if pollErr := wait.Poll(nodePollInterval, apiserverStartupGracePeriod, func() (bool, error) { + if pollErr := wait.PollUntilContextTimeout(ctx, nodePollInterval, apiserverStartupGracePeriod, true, func(ctx context.Context) (bool, error) { var err error - nodeList, err = kubeClient.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{ + nodeList, err = kubeClient.CoreV1().Nodes().List(ctx, metav1.ListOptions{ FieldSelector: fields.Everything().String(), LabelSelector: labels.Everything().String(), }) diff --git a/pkg/controller/nodeipam/ipam/controller_legacyprovider.go b/pkg/controller/nodeipam/ipam/controller_legacyprovider.go index bb77cac6a48..7cd93385cd5 100644 --- a/pkg/controller/nodeipam/ipam/controller_legacyprovider.go +++ b/pkg/controller/nodeipam/ipam/controller_legacyprovider.go @@ -118,7 +118,8 @@ func NewController( func (c *Controller) Start(logger klog.Logger, nodeInformer informers.NodeInformer) error { logger.Info("Starting IPAM controller", "config", c.config) - nodes, err := listNodes(logger, c.adapter.k8s) + ctx := klog.NewContext(context.TODO(), logger) + nodes, err := listNodes(ctx, c.adapter.k8s) if err != nil { return err }