code: func (kl *Kubelet) runOnce(pods []*v1.Pod, retryDelay time.Duration) (results []RunPodResult, err error) {
  	ch := make(chan RunPodResult)
  	admitted := []*v1.Pod{}
  	for _, pod := range pods {
  		// Check if we can admit the pod.
  		if ok, reason, message := kl.canAdmitPod(admitted, pod); !ok {
  			kl.rejectPod(pod, reason, message)
  			results = append(results, RunPodResult{pod, nil})
  			continue
  		}
  
  		admitted = append(admitted, pod)
  		go func(pod *v1.Pod) {
  			err := kl.runPod(pod, retryDelay)
  			ch <- RunPodResult{pod, err}
  		}(pod)
  	}
  
  	klog.Infof("Waiting for %d pods", len(admitted))
  	failedPods := []string{}
  	for i := 0; i < len(admitted); i++ {
  		res := <-ch
  		results = append(results, res)
  		if res.Err != nil {
  			faliedContainerName, err := kl.getFailedContainers(res.Pod)
  			if err != nil {
  				klog.Infof("unable to get failed containers' names for pod %q, error:%v", format.Pod(res.Pod), err)
  			} else {
  				klog.Infof("unable to start pod %q because container:%v failed", format.Pod(res.Pod), faliedContainerName)
  			}
  			failedPods = append(failedPods, format.Pod(res.Pod))
  		} else {
  			klog.Infof("started pod %q", format.Pod(res.Pod))
  		}
  	}
  	if len(failedPods) > 0 {
  		return results, fmt.Errorf("error running pods: %v", failedPods)
  	}
  	klog.Infof("%d pods started", len(pods))
  	return results, err
  }
docs: // runOnce runs a given set of pods and returns their status.