nodeipam: poll nodes immediately

This commit is contained in:
Krzysztof Dąbrowski 2024-03-29 20:56:08 +01:00
parent f4e246bc93
commit 5e94ffe90b
No known key found for this signature in database
3 changed files with 11 additions and 24 deletions

View File

@ -75,11 +75,10 @@ const (
// updateMaxRetries is the max retries for a failed node
updateMaxRetries = 10
)
// nodePollInterval is used in listing node
// This is a variable instead of a const to enable testing.
var nodePollInterval = 10 * time.Second
// nodePollInterval is used in listing node
nodePollInterval = 10 * time.Second
)
// CIDRAllocator is an interface implemented by things that know how
// to allocate/occupy/recycle CIDR for nodes.
@ -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(),
})

View File

@ -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
}

View File

@ -292,13 +292,6 @@ func TestOccupyPreExistingCIDR(t *testing.T) {
}
func TestAllocateOrOccupyCIDRSuccess(t *testing.T) {
// Non-parallel test (overrides global var)
oldNodePollInterval := nodePollInterval
nodePollInterval = test.NodePollInterval
defer func() {
nodePollInterval = oldNodePollInterval
}()
// all tests operate on a single node
testCases := []testCase{
{
@ -680,13 +673,6 @@ type releaseTestCase struct {
}
func TestReleaseCIDRSuccess(t *testing.T) {
// Non-parallel test (overrides global var)
oldNodePollInterval := nodePollInterval
nodePollInterval = test.NodePollInterval
defer func() {
nodePollInterval = oldNodePollInterval
}()
testCases := []releaseTestCase{
{
description: "Correctly release preallocated CIDR",