code: func (c *Controller) Start(nodeInformer informers.NodeInformer) error {
  	klog.V(0).Infof("Starting IPAM controller (config=%+v)", c.config)
  
  	nodes, err := listNodes(c.adapter.k8s)
  	if err != nil {
  		return err
  	}
  	for _, node := range nodes.Items {
  		if node.Spec.PodCIDR != "" {
  			_, cidrRange, err := net.ParseCIDR(node.Spec.PodCIDR)
  			if err == nil {
  				c.set.Occupy(cidrRange)
  				klog.V(3).Infof("Occupying CIDR for node %q (%v)", node.Name, node.Spec.PodCIDR)
  			} else {
  				klog.Errorf("Node %q has an invalid CIDR (%q): %v", node.Name, node.Spec.PodCIDR, err)
  			}
  		}
  
  		func() {
  			c.lock.Lock()
  			defer c.lock.Unlock()
  
  			// XXX/bowei -- stagger the start of each sync cycle.
  			syncer := c.newSyncer(node.Name)
  			c.syncers[node.Name] = syncer
  			go syncer.Loop(nil)
  		}()
  	}
  
  	nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		AddFunc:    nodeutil.CreateAddNodeHandler(c.onAdd),
  		UpdateFunc: nodeutil.CreateUpdateNodeHandler(c.onUpdate),
  		DeleteFunc: nodeutil.CreateDeleteNodeHandler(c.onDelete),
  	})
  
  	return nil
  }
docs: // Start initializes the Controller with the existing list of nodes and
  // registers the informers for node changes. This will start synchronization
  // of the node and cloud CIDR range allocations.