diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index 3175827ad2..fe8b08c37e 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -229,17 +229,14 @@ func (k *Bootstrapper) init(cfg config.ClusterConfig) error { defer cancel() kr, kw := io.Pipe() - // NOTE: The command must run with the a root shell to expand PATH to the - // root PATH. On Debian 12 user PATH does not contain /usr/sbin which breaks - // kubeadm since https://github.com/kubernetes/kubernetes/pull/129450. cmd := fmt.Sprintf( - "env PATH=\"%s:$PATH\" kubeadm init --config %s %s --ignore-preflight-errors=%s", - bsutil.BinRoot(cfg.KubernetesConfig.KubernetesVersion), + "%s init --config %s %s --ignore-preflight-errors=%s", + bsutil.KubeadmCmdWithPath(cfg.KubernetesConfig.KubernetesVersion), conf, extraFlags, strings.Join(ignore, ","), ) - c := exec.CommandContext(ctx, "sudo", "bash", "-c", cmd) + c := exec.CommandContext(ctx, "sudo", "/bin/bash", "-c", cmd) c.Stdout = kw c.Stderr = kw @@ -661,7 +658,7 @@ func (k *Bootstrapper) restartPrimaryControlPlane(cfg config.ClusterConfig) erro return errors.Wrap(err, "cp") } - baseCmd := fmt.Sprintf("%s init", bsutil.InvokeKubeadm(cfg.KubernetesConfig.KubernetesVersion)) + baseCmd := fmt.Sprintf("%s init", bsutil.KubeadmCmdWithPath(cfg.KubernetesConfig.KubernetesVersion)) cmds := []string{ fmt.Sprintf("%s phase certs all --config %s", baseCmd, conf), fmt.Sprintf("%s phase kubeconfig all --config %s", baseCmd, conf), @@ -672,10 +669,11 @@ func (k *Bootstrapper) restartPrimaryControlPlane(cfg config.ClusterConfig) erro // Run commands one at a time so that it is easier to root cause failures. for _, c := range cmds { - if _, err := k.c.RunCmd(exec.Command("/bin/bash", "-c", c)); err != nil { + // c := exec.CommandContext(ctx, "sudo", "bash", "-c", cmd) + if _, err := k.c.RunCmd(exec.Command("sudo", "/bin/bash", "-c", c)); err != nil { klog.Errorf("%s failed - will try once more: %v", c, err) - if _, err := k.c.RunCmd(exec.Command("/bin/bash", "-c", c)); err != nil { + if _, err := k.c.RunCmd(exec.Command("sudo", "/bin/bash", "-c", c)); err != nil { return errors.Wrap(err, "run") } } @@ -784,14 +782,14 @@ func (k *Bootstrapper) JoinCluster(cc config.ClusterConfig, n config.Node, joinC // GenerateToken creates a token and returns the appropriate kubeadm join command to run, or the already existing token func (k *Bootstrapper) GenerateToken(cc config.ClusterConfig) (string, error) { // Take that generated token and use it to get a kubeadm join command - tokenCmd := exec.Command("/bin/bash", "-c", fmt.Sprintf("%s token create --print-join-command --ttl=0", bsutil.InvokeKubeadm(cc.KubernetesConfig.KubernetesVersion))) + tokenCmd := exec.Command("sudo", "/bin/bash", "-c", fmt.Sprintf("%s token create --print-join-command --ttl=0", bsutil.KubeadmCmdWithPath(cc.KubernetesConfig.KubernetesVersion))) r, err := k.c.RunCmd(tokenCmd) if err != nil { return "", errors.Wrap(err, "generating join command") } joinCmd := r.Stdout.String() - joinCmd = strings.Replace(joinCmd, "kubeadm", bsutil.InvokeKubeadm(cc.KubernetesConfig.KubernetesVersion), 1) + joinCmd = strings.Replace(joinCmd, "kubeadm", bsutil.KubeadmCmdWithPath(cc.KubernetesConfig.KubernetesVersion), 1) joinCmd = fmt.Sprintf("%s --ignore-preflight-errors=all", strings.TrimSpace(joinCmd)) // avoid "Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket' field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/cri-dockerd.sock" error @@ -860,14 +858,14 @@ func (k *Bootstrapper) DeleteCluster(k8s config.KubernetesConfig) error { return errors.Wrap(err, "runtime") } - ka := bsutil.InvokeKubeadm(k8s.KubernetesVersion) + ka := bsutil.KubeadmCmdWithPath(k8s.KubernetesVersion) sp := cr.SocketPath() cmd := fmt.Sprintf("%s reset --cri-socket %s --force", ka, sp) if ver.LT(semver.MustParse("1.11.0")) { cmd = fmt.Sprintf("%s reset --cri-socket %s", ka, sp) } - rr, derr := k.c.RunCmd(exec.Command("/bin/bash", "-c", cmd)) + rr, derr := k.c.RunCmd(exec.Command("sudo", "/bin/bash", "-c", cmd)) if derr != nil { klog.Warningf("%s: %v", rr.Command(), err) } diff --git a/pkg/minikube/node/node.go b/pkg/minikube/node/node.go index 2fb28674fd..93e6274799 100644 --- a/pkg/minikube/node/node.go +++ b/pkg/minikube/node/node.go @@ -149,8 +149,8 @@ func teardown(cc config.ClusterConfig, name string) (*config.Node, error) { sp = "unix://" + sp } - cmd := exec.Command("/bin/bash", "-c", fmt.Sprintf("KUBECONFIG=/var/lib/minikube/kubeconfig %s reset --force --ignore-preflight-errors=all --cri-socket=%s", - bsutil.InvokeKubeadm(cc.KubernetesConfig.KubernetesVersion), sp)) + cmd := exec.Command("sudo", "/bin/bash", "-c", fmt.Sprintf("KUBECONFIG=/var/lib/minikube/kubeconfig %s reset --force --ignore-preflight-errors=all --cri-socket=%s", + bsutil.KubeadmCmdWithPath(cc.KubernetesConfig.KubernetesVersion), sp)) if _, kerr = r.RunCmd(cmd); kerr == nil { klog.Infof("successfully reset node %q", m) } diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go index 3325049811..f533a6b058 100755 --- a/pkg/minikube/node/start.go +++ b/pkg/minikube/node/start.go @@ -346,7 +346,7 @@ func joinCluster(starter Starter, cpBs bootstrapper.Bootstrapper, bs bootstrappe // reset node to revert any changes made by previous kubeadm init/join klog.Infof("resetting %s node %q before attempting to rejoin cluster...", role, starter.Node.Name) - if _, err := starter.Runner.RunCmd(exec.Command("/bin/bash", "-c", fmt.Sprintf("%s reset --force", bsutil.InvokeKubeadm(starter.Cfg.KubernetesConfig.KubernetesVersion)))); err != nil { + if _, err := starter.Runner.RunCmd(exec.Command("sudo", "/bin/bash", "-c", fmt.Sprintf("%s reset --force", bsutil.KubeadmCmdWithPath(starter.Cfg.KubernetesConfig.KubernetesVersion)))); err != nil { klog.Infof("kubeadm reset failed, continuing anyway: %v", err) } else { klog.Infof("successfully reset %s node %q", role, starter.Node.Name)