code: func (kl *Kubelet) deletePod(pod *v1.Pod) error {
  	if pod == nil {
  		return fmt.Errorf("deletePod does not allow nil pod")
  	}
  	if !kl.sourcesReady.AllReady() {
  		// If the sources aren't ready, skip deletion, as we may accidentally delete pods
  		// for sources that haven't reported yet.
  		return fmt.Errorf("skipping delete because sources aren't ready yet")
  	}
  	kl.podWorkers.ForgetWorker(pod.UID)
  
  	// Runtime cache may not have been updated to with the pod, but it's okay
  	// because the periodic cleanup routine will attempt to delete again later.
  	runningPods, err := kl.runtimeCache.GetPods()
  	if err != nil {
  		return fmt.Errorf("error listing containers: %v", err)
  	}
  	runningPod := kubecontainer.Pods(runningPods).FindPod("", pod.UID)
  	if runningPod.IsEmpty() {
  		return fmt.Errorf("pod not found")
  	}
  	podPair := kubecontainer.PodPair{APIPod: pod, RunningPod: &runningPod}
  
  	kl.podKillingCh <- &podPair
  	// TODO: delete the mirror pod here?
  
  	// We leave the volume/directory cleanup to the periodic cleanup routine.
  	return nil
  }
docs: // deletePod deletes the pod from the internal state of the kubelet by:
  // 1.  stopping the associated pod worker asynchronously
  // 2.  signaling to kill the pod by sending on the podKillingCh channel
  //
  // deletePod returns an error if not all sources are ready or the pod is not
  // found in the runtime cache.