code: func findNodeForPod(client kube_client.Interface, predicateChecker *ca_simulator.PredicateChecker, nodes []*v1.Node, pod *v1.Pod) *v1.Node {
  	for _, node := range nodes {
  		// ignore nodes with taints
  		if err := checkTaints(node); err != nil {
  			glog.Warningf("Skipping node %v due to %v", node.Name, err)
  		}
  
  		requiredPods, _, err := groupPods(client, node)
  		if err != nil {
  			glog.Warningf("Skipping node %v due to error: %v", node.Name, err)
  			continue
  		}
  
  		nodeInfo := schedulercache.NewNodeInfo(requiredPods...)
  		nodeInfo.SetNode(node)
  
  		if err := predicateChecker.CheckPredicates(pod, nil, nodeInfo, true); err == nil {
  			return node
  		}
  	}
  	return nil
  }
docs: // Currently the logic choose a random node which satisfies requirements (a critical pod fits there).
  // TODO(piosz): add a prioritization to this logic