code: func (kl *Kubelet) initializeModules() error {
  	// Prometheus metrics.
  	metrics.Register(
  		kl.runtimeCache,
  		collectors.NewVolumeStatsCollector(kl),
  		collectors.NewLogMetricsCollector(kl.StatsProvider.ListPodStats),
  	)
  	metrics.SetNodeName(kl.nodeName)
  
  	// Setup filesystem directories.
  	if err := kl.setupDataDirs(); err != nil {
  		return err
  	}
  
  	// If the container logs directory does not exist, create it.
  	if _, err := os.Stat(ContainerLogsDir); err != nil {
  		if err := kl.os.MkdirAll(ContainerLogsDir, 0755); err != nil {
  			klog.Errorf("Failed to create directory %q: %v", ContainerLogsDir, err)
  		}
  	}
  
  	// Start the image manager.
  	kl.imageManager.Start()
  
  	// Start the certificate manager if it was enabled.
  	if kl.serverCertificateManager != nil {
  		kl.serverCertificateManager.Start()
  	}
  
  	// Start out of memory watcher.
  	if err := kl.oomWatcher.Start(kl.nodeRef); err != nil {
  		return fmt.Errorf("Failed to start OOM watcher %v", err)
  	}
  
  	// Start resource analyzer
  	kl.resourceAnalyzer.Start()
  
  	return nil
  }
docs: // initializeModules will initialize internal modules that do not require the container runtime to be up.
  // Note that the modules here must not depend on modules that are not initialized here.