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 (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -440,6 +442,25 @@ func NewLinuxKernelHandler() *LinuxKernelHandler {
|
||||||
|
|
||||||
// GetModules returns all installed kernel modules.
|
// GetModules returns all installed kernel modules.
|
||||||
func (handle *LinuxKernelHandler) GetModules() ([]string, error) {
|
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
|
// Try to load IPVS required kernel modules using modprobe first
|
||||||
for _, kmod := range ipvsModules {
|
for _, kmod := range ipvsModules {
|
||||||
err := handle.executor.Command("modprobe", "--", kmod).Run()
|
err := handle.executor.Command("modprobe", "--", kmod).Run()
|
||||||
|
@ -456,7 +477,7 @@ func (handle *LinuxKernelHandler) GetModules() ([]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mods := strings.Split(string(out), "\n")
|
mods := strings.Split(string(out), "\n")
|
||||||
return mods, nil
|
return append(mods, bmods...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanUseIPVSProxier returns true if we can use the ipvs Proxier.
|
// CanUseIPVSProxier returns true if we can use the ipvs Proxier.
|
||||||
|
|
Loading…
Reference in New Issue