code: func Predicates(pod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
  	var predicateFails []predicates.PredicateFailureReason
  
  	// If ScheduleDaemonSetPods is enabled, only check nodeSelector, nodeAffinity and toleration/taint match.
  	if utilfeature.DefaultFeatureGate.Enabled(features.ScheduleDaemonSetPods) {
  		fit, reasons, err := checkNodeFitness(pod, nil, nodeInfo)
  		if err != nil {
  			return false, predicateFails, err
  		}
  		if !fit {
  			predicateFails = append(predicateFails, reasons...)
  		}
  
  		return len(predicateFails) == 0, predicateFails, nil
  	}
  
  	critical := kubelettypes.IsCriticalPod(pod)
  
  	fit, reasons, err := predicates.PodToleratesNodeTaints(pod, nil, nodeInfo)
  	if err != nil {
  		return false, predicateFails, err
  	}
  	if !fit {
  		predicateFails = append(predicateFails, reasons...)
  	}
  	if critical {
  		// If the pod is marked as critical and support for critical pod annotations is enabled,
  		// check predicates for critical pods only.
  		fit, reasons, err = predicates.EssentialPredicates(pod, nil, nodeInfo)
  	} else {
  		fit, reasons, err = predicates.GeneralPredicates(pod, nil, nodeInfo)
  	}
  	if err != nil {
  		return false, predicateFails, err
  	}
  	if !fit {
  		predicateFails = append(predicateFails, reasons...)
  	}
  
  	return len(predicateFails) == 0, predicateFails, nil
  }
docs: // Predicates checks if a DaemonSet's pod can be scheduled on a node using GeneralPredicates
  // and PodToleratesNodeTaints predicate