code: func NewNoExecuteTaintManager(c clientset.Interface, getPod GetPodFunc, getNode GetNodeFunc) *NoExecuteTaintManager {
  	eventBroadcaster := record.NewBroadcaster()
  	recorder := eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "taint-controller"})
  	eventBroadcaster.StartLogging(klog.Infof)
  	if c != nil {
  		klog.V(0).Infof("Sending events to api server.")
  		eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: c.CoreV1().Events("")})
  	} else {
  		klog.Fatalf("kubeClient is nil when starting NodeController")
  	}
  
  	tm := &NoExecuteTaintManager{
  		client:       c,
  		recorder:     recorder,
  		getPod:       getPod,
  		getNode:      getNode,
  		taintedNodes: make(map[string][]v1.Taint),
  
  		nodeUpdateQueue: workqueue.NewNamed("noexec_taint_node"),
  		podUpdateQueue:  workqueue.NewNamed("noexec_taint_pod"),
  	}
  	tm.taintEvictionQueue = CreateWorkerQueue(deletePodHandler(c, tm.emitPodDeletionEvent))
  
  	return tm
  }
docs: // NewNoExecuteTaintManager creates a new NoExecuteTaintManager that will use passed clientset to
  // communicate with the API server.