7

今天我在运行kubeadm join --token 189518.c21306e71082d6ec命令时使用 v1.7.1 重新创建了集群,它给出了以下错误。这在以前版本的 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`

谢谢

4

3 回答 3

5

看起来它正在尝试查找主机名并且不能,因为它不在 DNS 中。有两种解决方法:

  1. Kubernetes 与命名节点一起工作得更好。虽然这很烦人,但从长远来看,它会带来好处,例如当您必须在重新启动时使用不同的 IP 地址时。您可以/etc/hosts在每台机器上进行编辑,为集群中的所有盒子命名,或者启动本地 DNS,将名称添加到其中。
  2. 或者,您可以尝试跳过预检检查...kubeadm join --skip-preflight-checks --token TOKEN HOST:PORT
于 2017-07-17T13:44:25.870 回答
2

根据#49065 GitHub issue,这将在 1.7.2 中修复,在此之前,建议使用--skip-preflight-checksflag。这对我有用。

于 2017-07-19T17:46:36.063 回答
0

我想确认这应该只在 v1.7.1 上出现问题。我也在 GCloud 实验室发现了这个问题。我现在的解决方案是滚动状态以使用如果找到的 V1.7.0。请参阅下面的步骤测试:

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

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

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

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

2. (kubeserve_ms) setup 通过命令运行集群系统(普通用户) ):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/配置
3. (kubeserve_ms) 通过命令初始化集群:
sudo su -
kubeadm init --pod-network-cidr=10.244.0.0/16 --token 8c2350.f55343444a6ffc46
4.(kubeserve_ms) 通过命令应用编织网络模块:
kubectl apply - n kube-system -f " https://cloud.weave.works/k8s/net?k8s-version= $(kubectl 版本 | 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] WARNING: kubeadm处于测试阶段,请不要将其用于生产集群。
[preflight] 运行飞行前检查
[preflight] 警告:docker 版本大于最近验证的版本。Docker 版本:17.06.0-ce。最大验证版本:1.12
[preflight] WARNING: hostname "" could not be reached
[preflight] WARNING: hostname "" lookup : no such host
[预检] 发生一些致命错误:主机名“” DNS-1123 子域必须由小写字母数字字符“-”或“.”组成,并且必须以字母数字字符开头和结尾(例如“example.com”、正则表达式用于验证的是 'a-z0-9?(.a-z0-9?)*')
[preflight] 如果您知道自己在做什么,您可以使用--skip-preflight-checks

解决方案跳过飞行前检查,现在解决方法:
安装“kubelet ","kubeadm","kubectl" 版本 1.7.0 一切正常

于 2017-07-18T15:29:55.073 回答