Kubernetes v1.7.1 kubeadm加入主机名“”无法到达错误。

7
今天我重建了我的集群,使用的是v1.7.1版本。当我运行kubeadm join --token 189518.c21306e71082d6ec命令时,出现了以下错误。在之前的kubernetes版本中此命令可以正常工作。请问在这个版本中是否有任何变化,如何解决这个问题?
[root@k8s17-02 ~]# kubeadm join --token 189518.c21306e71082d6ec 192.168.15.91:6443
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] WARNING: hostname "" could not be reached
[preflight] WARNING: hostname "" lookup : no such host
[preflight] Some fatal errors occurred:
        hostname "" a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
[preflight] If you know what you are doing, you can skip pre-flight checks with `--skip-preflight-checks`

2017年7月21日更新:

测试发现,在v1.7.2版中仍然存在同样的问题。

# ./kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.2", GitCommit:"922a86cfcd65915a9b2f69f3f193b8907d741d9c", GitTreeState:"clean", BuildDate:"2017-07-21T08:08:00Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

# ./kubeadm join --token 189518.c21306e71082d6ec 192.168.15.91:6443
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] WARNING: hostname "" could not be reached
[preflight] WARNING: hostname "" lookup : no such host
[preflight] Some fatal errors occurred:
        hostname "" a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
[preflight] If you know what you are doing, you can skip pre-flight checks with `--skip-preflight-checks`

感谢SR。

也许这个版本的参数解析器有点问题。你试过执行 'kubeadm join 192.168.15.91:6443 --token 189518.c21306e71082d6ec' 命令了吗? - Zahlex
你之前使用的是哪个版本?该消息来自 https://github.com/kubernetes/kubernetes/commit/3856d91ed8c1d3f50526236d59e35ca5885e2c80 - VonC
之前我使用的是v1.7.0版本,同时我也能够配置其他机器上的1.6.4版本。 - sfgroups
可能与 https://github.com/kubernetes/kubeadm/issues/64 相关。 - iny
@sfgroups 你设法解决了吗? - Umair Sarfraz
显示剩余2条评论
3个回答

5
看起来它正在尝试查找主机名,但由于不在DNS中,因此无法完成。有两种解决方法:
  1. Kubernetes与命名节点配合使用效果更佳。虽然这很烦人,但从长远来看,它会带来好处,比如在重新启动时必须使用不同的IP地址。您可以在每台计算机上编辑/etc/hosts,为集群中的所有框架提供名称,或者启动本地DNS,并将名称添加到其中。
  2. 或者,您可以尝试跳过预检查... kubeadm join --skip-preflight-checks --token TOKEN HOST:PORT

我的主机文件中列出了正确的IP和主机名。在v1.7及更早版本中它可以工作。只有在v1.7.1中出现错误,似乎新版本中更改了一些逻辑。如果你看一下消息,它没有得到主机名,是空的。 - sfgroups
你是否尝试过在/etc/hosts文件中使用主机名而非IP地址来引用该框? - Nathaniel Dean

2
根据 #49065 GitHub 问题,这将在 1.7.2 中修复,此时建议使用 --skip-preflight-checks 标志。对我有用。

好消息。我将 V1.7.0 版本的代码与 V1.7.1 版本进行了比较,没有发现 kubeadm 代码验证主机名的任何更改。 - sfgroups

0

我想确认这个问题只出现在v1.7.1版本上。我也在GCloud实验室发现了这个问题。我的解决方案是将状态回滚到使用V1.7.0,如果找到的话。请看下面的测试步骤:

====================================================

实验描述(所有节点都已安装docker/kubelet/kubectl/kubeadm):
机器名称 角色: IP地址:
kubeserve-ms 主节点 192.168.99.200
kubeserve-1 工作节点 192.168.99.201
kubeserve-2 工作节点 192.168.99.202

===================================================

1.(kubeserve_ms)通过命令初始化集群(su 到 root 用户):
kubeadm init --pod-network-cidr=10.244.0.0/16 --token 8c2350.f55343444a6ffc46

2.(kubeserve_ms)通过命令设置运行集群系统(常规用户):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.(kubeserve_ms)通过命令初始化集群:
sudo su -
kubeadm init --pod-network-cidr=10.244.0.0/16 --token 8c2350.f55343444a6ffc46
4.(kubeserve_ms)通过命令应用 weave 网络模块:
kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
5.(kubeserve-1,kuberserve-2)通过命令开始加入节点:
kubeadm --token 8c2350.f55343444a6ffc46 join 192.168.99.200:6443
结果:
kubeadm join kubernetes-ms:6443 --token 8c2350.f55343444a6ffc46
[kubeadm]警告:kubeadm 正处于 beta 阶段,请勿将其用于生产集群。
[preflight]运行预检查
[preflight]警告:docker 版本高于最近验证的版本。Docker 版本:17.06.0-ce。最大验证版本:1.12
[preflight]警告:无法到达主机名“”
[preflight]警告:主机名“”查找:没有这样的主机
[preflight]一些致命错误发生: 主机名“”DNS-1123 子域必须由小写字母数字字符、“-”或“.”组成,并且必须以字母数字字符开头和结尾(例如“example.com”,用于验证的正则表达式是“a-z0-9?(.a-z0-9?)*”)
[preflight]如果您知道您在做什么,可以使用 --skip-preflight-checks 跳过预检查

现在的解决办法:
安装 "kubelet"、"kubeadm"、"kubectl" 1.7.0 版本即可解决问题。


v1.7.2 - 已发布,我们需要测试它。 - sfgroups
我正在使用kubeadm v1.7.2。遇到了相同的问题。 - Phagun Baya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接