Merge pull request #12739 from alias-dev/master
Support starting minikube with the Podman driver on NixOS systemspull/14295/head
commit
2f3a8514ee
|
@ -108,6 +108,44 @@ func PrepareContainerNode(p CreateParams) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// kernelModulesPath checks for the existence of a known alternative kernel modules directory,
|
||||||
|
// returning the default if none are present
|
||||||
|
func kernelModulesPath() string {
|
||||||
|
paths := []string{
|
||||||
|
"/run/current-system/kernel-modules/lib/modules", // NixOS
|
||||||
|
}
|
||||||
|
for _, path := range paths {
|
||||||
|
if _, err := os.Stat(path); err == nil {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "/lib/modules"
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkRunning(p CreateParams) func() error {
|
||||||
|
return func() error {
|
||||||
|
r, err := ContainerRunning(p.OCIBinary, p.Name)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("temporary error checking running for %q : %v", p.Name, err)
|
||||||
|
}
|
||||||
|
if !r {
|
||||||
|
return fmt.Errorf("temporary error created container %q is not running yet", p.Name)
|
||||||
|
}
|
||||||
|
s, err := ContainerStatus(p.OCIBinary, p.Name)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("temporary error checking status for %q : %v", p.Name, err)
|
||||||
|
}
|
||||||
|
if s != state.Running {
|
||||||
|
return fmt.Errorf("temporary error created container %q is not running yet", p.Name)
|
||||||
|
}
|
||||||
|
if !iptablesFileExists(p.OCIBinary, p.Name) {
|
||||||
|
return fmt.Errorf("iptables file doesn't exist, see #8179")
|
||||||
|
}
|
||||||
|
klog.Infof("the created container %q has a running status.", p.Name)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// CreateContainerNode creates a new container node
|
// CreateContainerNode creates a new container node
|
||||||
func CreateContainerNode(p CreateParams) error {
|
func CreateContainerNode(p CreateParams) error {
|
||||||
// on windows os, if docker desktop is using Windows Containers. Exit early with error
|
// on windows os, if docker desktop is using Windows Containers. Exit early with error
|
||||||
|
@ -136,7 +174,7 @@ func CreateContainerNode(p CreateParams) error {
|
||||||
"--tmpfs", "/run", // systemd wants a writable /run
|
"--tmpfs", "/run", // systemd wants a writable /run
|
||||||
// logs,pods be stroed on filesystem vs inside container,
|
// logs,pods be stroed on filesystem vs inside container,
|
||||||
// some k8s things want /lib/modules
|
// some k8s things want /lib/modules
|
||||||
"-v", "/lib/modules:/lib/modules:ro",
|
"-v", fmt.Sprintf("%s:/lib/modules:ro", kernelModulesPath()),
|
||||||
"--hostname", p.Name, // make hostname match container name
|
"--hostname", p.Name, // make hostname match container name
|
||||||
"--name", p.Name, // ... and set the container name
|
"--name", p.Name, // ... and set the container name
|
||||||
"--label", fmt.Sprintf("%s=%s", CreatedByLabelKey, "true"),
|
"--label", fmt.Sprintf("%s=%s", CreatedByLabelKey, "true"),
|
||||||
|
@ -226,29 +264,7 @@ func CreateContainerNode(p CreateParams) error {
|
||||||
return errors.Wrap(err, "create container")
|
return errors.Wrap(err, "create container")
|
||||||
}
|
}
|
||||||
|
|
||||||
checkRunning := func() error {
|
if err := retry.Expo(checkRunning(p), 15*time.Millisecond, 25*time.Second); err != nil {
|
||||||
r, err := ContainerRunning(p.OCIBinary, p.Name)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("temporary error checking running for %q : %v", p.Name, err)
|
|
||||||
}
|
|
||||||
if !r {
|
|
||||||
return fmt.Errorf("temporary error created container %q is not running yet", p.Name)
|
|
||||||
}
|
|
||||||
s, err := ContainerStatus(p.OCIBinary, p.Name)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("temporary error checking status for %q : %v", p.Name, err)
|
|
||||||
}
|
|
||||||
if s != state.Running {
|
|
||||||
return fmt.Errorf("temporary error created container %q is not running yet", p.Name)
|
|
||||||
}
|
|
||||||
if !iptablesFileExists(p.OCIBinary, p.Name) {
|
|
||||||
return fmt.Errorf("iptables file doesn't exist, see #8179")
|
|
||||||
}
|
|
||||||
klog.Infof("the created container %q has a running status.", p.Name)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := retry.Expo(checkRunning, 15*time.Millisecond, 25*time.Second); err != nil {
|
|
||||||
excerpt := LogContainerDebug(p.OCIBinary, p.Name)
|
excerpt := LogContainerDebug(p.OCIBinary, p.Name)
|
||||||
_, err := DaemonInfo(p.OCIBinary)
|
_, err := DaemonInfo(p.OCIBinary)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue