code: func (p *progressReporter) start() {
  	go func() {
  		ticker := time.NewTicker(defaultImagePullingProgressReportInterval)
  		defer ticker.Stop()
  		for {
  			// TODO(random-liu): Report as events.
  			select {
  			case <-ticker.C:
  				progress, timestamp := p.progress.get()
  				// If there is no progress for p.imagePullProgressDeadline, cancel the operation.
  				if time.Since(timestamp) > p.imagePullProgressDeadline {
  					klog.Errorf("Cancel pulling image %q because of no progress for %v, latest progress: %q", p.image, p.imagePullProgressDeadline, progress)
  					p.cancel()
  					return
  				}
  				klog.V(2).Infof("Pulling image %q: %q", p.image, progress)
  			case <-p.stopCh:
  				progress, _ := p.progress.get()
  				klog.V(2).Infof("Stop pulling image %q: %q", p.image, progress)
  				return
  			}
  		}
  	}()
  }
docs: // start starts the progressReporter