move sudo before bash -c everywhere we invoke kubeadms to ensure gets the correct path

pull/21642/head
Medya Ghazizadeh 2025-09-26 12:47:47 -07:00
parent a7417989c5
commit c6ebbd5736
3 changed files with 14 additions and 16 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)