code: func (handle *LinuxKernelHandler) GetModules() ([]string, error) {
  	// Check whether IPVS required kernel modules are built-in
  	kernelVersion, ipvsModules, err := utilipvs.GetKernelVersionAndIPVSMods(handle.executor)
  	if err != nil {
  		return nil, err
  	}
  	builtinModsFilePath := fmt.Sprintf("/lib/modules/%s/modules.builtin", kernelVersion)
  	b, err := ioutil.ReadFile(builtinModsFilePath)
  	if err != nil {
  		klog.Warningf("Failed to read file %s with error %v. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules", builtinModsFilePath, err)
  	}
  	var bmods []string
  	for _, module := range ipvsModules {
  		if match, _ := regexp.Match(module+".ko", b); match {
  			bmods = append(bmods, module)
  		}
  	}
  
  	// Try to load IPVS required kernel modules using modprobe first
  	for _, kmod := range ipvsModules {
  		err := handle.executor.Command("modprobe", "--", kmod).Run()
  		if err != nil {
  			klog.Warningf("Failed to load kernel module %v with modprobe. "+
  				"You can ignore this message when kube-proxy is running inside container without mounting /lib/modules", kmod)
  		}
  	}
  
  	// Find out loaded kernel modules
  	out, err := handle.executor.Command("cut", "-f1", "-d", " ", "/proc/modules").CombinedOutput()
  	if err != nil {
  		return nil, err
  	}
  
  	mods := strings.Split(string(out), "\n")
  	return append(mods, bmods...), nil
  }
docs: // GetModules returns all installed kernel modules.