code: func (kl *Kubelet) registerWithAPIServer() {
  	if kl.registrationCompleted {
  		return
  	}
  	step := 100 * time.Millisecond
  
  	for {
  		time.Sleep(step)
  		step = step * 2
  		if step >= 7*time.Second {
  			step = 7 * time.Second
  		}
  
  		node, err := kl.initialNode()
  		if err != nil {
  			klog.Errorf("Unable to construct v1.Node object for kubelet: %v", err)
  			continue
  		}
  
  		klog.Infof("Attempting to register node %s", node.Name)
  		registered := kl.tryRegisterWithAPIServer(node)
  		if registered {
  			klog.Infof("Successfully registered node %s", node.Name)
  			kl.registrationCompleted = true
  			return
  		}
  	}
  }
docs: // registerWithAPIServer registers the node with the cluster master. It is safe
  // to call multiple times, but not concurrently (kl.registrationCompleted is
  // not locked).