code: func (s *ServiceController) Run(stopCh <-chan struct{}, workers int) {
  	defer runtime.HandleCrash()
  	defer s.queue.ShutDown()
  
  	klog.Info("Starting service controller")
  	defer klog.Info("Shutting down service controller")
  
  	if !controller.WaitForCacheSync("service", stopCh, s.serviceListerSynced, s.nodeListerSynced) {
  		return
  	}
  
  	for i := 0; i < workers; i++ {
  		go wait.Until(s.worker, time.Second, stopCh)
  	}
  
  	go wait.Until(s.nodeSyncLoop, nodeSyncPeriod, stopCh)
  
  	<-stopCh
  }
docs: // Run starts a background goroutine that watches for changes to services that
  // have (or had) LoadBalancers=true and ensures that they have
  // load balancers created and deleted appropriately.
  // serviceSyncPeriod controls how often we check the cluster's services to
  // ensure that the correct load balancers exist.
  // nodeSyncPeriod controls how often we check the cluster's nodes to determine
  // if load balancers need to be updated to point to a new set.
  //
  // It's an error to call Run() more than once for a given ServiceController
  // object.