mirror of https://github.com/k3s-io/k3s
Merge pull request #63850 from islinwb/check_ipvs_mod
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Enable checking whether ipvs modules are built-in or not **What this PR does / why we need it**: Enable checking whether ipvs modules are built-in or not. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #63801 **Special notes for your reviewer**: **Release note**: ```release-note NONE ```pull/8/head
commit
6406b9653d
|
@ -19,7 +19,9 @@ package ipvs
|
|||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
@ -440,6 +442,25 @@ func NewLinuxKernelHandler() *LinuxKernelHandler {
|
|||
|
||||
// GetModules returns all installed kernel modules.
|
||||
func (handle *LinuxKernelHandler) GetModules() ([]string, error) {
|
||||
// Check whether IPVS required kernel modules are built-in
|
||||
kernelVersionFile := "/proc/sys/kernel/osrelease"
|
||||
b, err := ioutil.ReadFile(kernelVersionFile)
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to read file %s with error %v", kernelVersionFile, err)
|
||||
}
|
||||
kernelVersion := strings.TrimSpace(string(b))
|
||||
builtinModsFilePath := fmt.Sprintf("/lib/modules/%s/modules.builtin", kernelVersion)
|
||||
b, err = ioutil.ReadFile(builtinModsFilePath)
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to read file %s with error %v", 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()
|
||||
|
@ -456,7 +477,7 @@ func (handle *LinuxKernelHandler) GetModules() ([]string, error) {
|
|||
}
|
||||
|
||||
mods := strings.Split(string(out), "\n")
|
||||
return mods, nil
|
||||
return append(mods, bmods...), nil
|
||||
}
|
||||
|
||||
// CanUseIPVSProxier returns true if we can use the ipvs Proxier.
|
||||
|
|
Loading…
Reference in New Issue