Cauchy
添加节点失败的原因的如您所说,是以下几个命令的路径在 PATH 环境变量里面找不到
[ERROR FileExisting-conntrack]: conntrack not found in system path
[ERROR FileExisting-ip]: ip not found in system path
[ERROR FileExisting-iptables]: iptables not found in system path
我这边使用非 root 用户执行的添加节点命令。master 节点和 worker 节点都是非 root 用户。以下是上面三个命令的绝对路径
# 非root用户
[user@nodes07 ~]$ which conntrack
/usr/sbin/conntrack
[user@nodes07 ~]$ which ip
/usr/sbin/ip
[user@nodes07 ~]$ which iptables
/usr/sbin/iptables
# root用户
[root@nodes07 ~]# which conntrack
/sbin/conntrack
[root@nodes07 ~]# which ip
/sbin/ip
[root@nodes07 ~]# which
/sbin/iptables
看了下 kk 命令的源码,发现 v1.2.0 版本在执行 kubeadm join 的时候,为 PATH 环境变量添加了 /sbin 和 /usr/sbin 两个路径,v1.1.0&v1.1.1 版本是没有的,把 kk 命令从 v1.1.1 升级到 v1.2.0 版本之后,添加节点操作执行成功。
// v1.2.0
for i := 0; i < 3; i++ {
_, err := mgr.Runner.ExecuteCmd("sudo env PATH=$PATH:/sbin:/usr/sbin /bin/sh -c \"/usr/local/bin/kubeadm join --config=/etc/kubernetes/kubeadm-config.yaml\"", 0, true)
if err != nil {
if i == 2 {
return errors.Wrap(errors.WithStack(err), "Failed to add master to cluster")
}
_, _ = mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo env PATH=$PATH:/sbin:/usr/sbin /bin/sh -c \"%s\"", resetCmd), 0, true)
} else {
break
}
}
// v1.1.0 & v1.1.1
func addWorker(mgr *manager.Manager) error {
for i := 0; i < 3; i++ {
_, err := mgr.Runner.ExecuteCmd(fmt.Sprintf("sudo env PATH=$PATH /bin/sh -c \"%s\"", clusterStatus["joinWorkerCmd"]), 0, true)
if err != nil {
if i == 2 {
return errors.Wrap(errors.WithStack(err), "Failed to add worker to cluster")
}
_, _ = mgr.Runner.ExecuteCmd("sudo env PATH=$PATH /bin/sh -c \"/usr/local/bin/kubeadm reset -f\"", 0, true)
} else {
break
}
}