Kubeadm: 运行飞行前检查挂起

创建于 2019-04-01  ·  22评论  ·  资料来源: kubernetes/kubeadm

在提交此问题之前,您在 kubeadm 问题中搜索了哪些关键字?

预检
悬挂
kubeadm 加入

错误报告

版本

kubeadm 版本(使用kubeadm version ):
kubeadm 版本:&version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:51: 21Z”,GoVersion:“go1.12.1”,编译器:“gc”,平台:“linux/amd64”}

环境

  • Kubernetes 版本(使用kubectl version ):
    客户端版本:version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:53: 57Z”,GoVersion:“go1.12.1”,编译器:“gc”,平台:“linux/amd64”}
  • 云提供商或硬件配置
  • 操作系统(例如来自 /etc/os-release):
    NAME="CentOS Linux"
    版本=“7(核心)”
    ID="centos"
    ID_LIKE="rhel 软呢帽"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (核心)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o: centos:centos :7"
    HOME_URL=" https://www.centos.org/ "
    BUG_REPORT_URL=" https://bugs.centos.org/ "

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

  • 内核(例如uname -a ):
    Linux vm02.andrefagundes.org 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

  • 其他

发生了什么?

加入控制平面时出现问题。 该进程挂起并显示消息正在运行飞行前检查。 见下文:

[ root@vm02 ~]# kubeadm join vm10.andrefacundes. 组织:6443 --token 07nh7g.v8p5fcs61fn3o2h4 --discovery令牌-CA证书哈希SHA256:039a5f9229dafe39d4a51af6899c20adff1de5dda23f780ac9b896e95f95623a --experimental控制平面--certificate键8afd066a7b8baa2abf86ba1b2d5e7f29625875d8f78a3e136f7fd35605b4775
[飞行前] 运行飞行前检查

你预期会发生什么?

我期待加入节点或显示错误消息。

如何重现它(尽可能最小和精确)?

我正在关注下面的官方文档。

https://kubernetes.io/docs/setup/independent/high-availability/#external -etcd-nodes

还有什么我们需要知道的吗?

不。

kinsupport prioritawaiting-more-evidence sinetwork

最有用的评论

确保您使用例如--v=2调用kubeadm init/join以获取有关正在发生的事情的更多详细信息。

所有22条评论

带 v10 参数。

[ root@vm03 etcd]# kubeadm 加入 vm10.andrefagundes。 组织:6443 --token 07nh7g.v8p5fcs61fn3o2h4 --discovery令牌-CA证书哈希SHA256:039a5f9229dafe39d4a51af6899c20adff1de5dda23f780ac9b896e95f95623a --experimental控制平面--certificate键cf3c8ca4f74751bfe7fc9d3e00e03a37619d36a6d6fb79fb5ba3645d74dd7bf4 -v10
I0401 00:34:08.531961 16893 join.go:367] [preflight] 发现 NodeName 为空; 使用 OS 主机名作为 NodeName
I0401 00:34:08.532014 16893 join.go:371] [preflight] 发现广告地址为空; 使用默认接口的 IP 地址作为广告地址
I0401 00:34:08.532048 16893 initconfiguration.go:105] 检测到并使用 CRI 套接字:/var/run/dockershim.sock
I0401 00:34:08.532179 16893 interface.go:384] 寻找具有 IPv4 地址的默认路由
I0401 00:34:08.532187 16893 interface.go:389] 默认路由中转接口“eth0”
I0401 00:34:08.532324 16893 interface.go:196] 接口 eth0 已启动
I0401 00:34:08.532380 16893 interface.go:244] 接口“eth0”有 4 个地址:[192.168.122.103/24 fe80::a3c0:2a34:91f2:e0eb/64 fe80::8439:c3eb:5848:c1f2/ 64 fe80::4381:b4a5:5836:a0e1/64]。
I0401 00:34:08.532399 16893 interface.go:211] 检查地址 192.168.122.103/24。
I0401 00:34:08.532407 16893 interface.go:218] IP 找到 192.168.122.103
I0401 00:34:08.532415 16893 interface.go:250] 找到接口“eth0”的有效 IPv4 地址 192.168.122.103。
I0401 00:34:08.532421 16893 interface.go:395] 找到活动 IP 192.168.122.103
[飞行前] 运行飞行前检查
I0401 00:34:08.532495 16893 preflight.go:90] [preflight] 运行常规检查
I0401 00:34:08.532539 16893 checks.go:254] 验证目录 /etc/kubernetes/manifests 的存在性和空性
I0401 00:34:08.532570 16893 checks.go:292] 验证文件 /etc/kubernetes/kubelet.conf 的存在
I0401 00:34:08.532579 16893 checks.go:292] 验证文件 /etc/kubernetes/bootstrap-kubelet.conf 的存在
I0401 00:34:08.532586 16893 checks.go:105] 验证容器运行时
I0401 00:34:08.580885 16893 checks.go:131] 验证服务是否已启用并处于活动状态
I0401 00:34:08.638659 16893 checks.go:341] 验证文件 /proc/sys/net/bridge/bridge-nf-call-iptables 的内容
I0401 00:34:08.638724 16893 checks.go:341] 验证文件 /proc/sys/net/ipv4/ip_forward 的内容
I0401 00:34:08.638755 16893 checks.go:653] 验证交换是否启用
I0401 00:34:08.638788 16893 checks.go:382] 验证可执行 ip 的存在
I0401 00:34:08.638809 16893 checks.go:382] 验证可执行 iptables 的存在
I0401 00:34:08.638824 16893 checks.go:382] 验证可执行挂载的存在
I0401 00:34:08.638837 16893 checks.go:382] 验证可执行 nsenter 的存在
I0401 00:34:08.638849 16893 checks.go:382] 验证可执行 ebtables 的存在
I0401 00:34:08.638860 16893 checks.go:382] 验证是否存在可执行的 ethtool
I0401 00:34:08.638871 16893 checks.go:382] 验证可执行 socat 的存在
I0401 00:34:08.638883 16893 checks.go:382] 验证可执行 tc 的存在
I0401 00:34:08.638894 16893 checks.go:382] 验证是否存在可执行触摸
I0401 00:34:08.638914 16893 checks.go:524] 运行所有检查
I0401 00:34:08.664826 16893 checks.go:412] 使用 net.LookupHost 检查给定的节点名称是否可访问
I0401 00:34:08.665583 16893 checks.go:622] 验证 kubelet 版本
I0401 00:34:08.709573 16893 checks.go:131] 验证服务是否已启用且处于活动状态
I0401 00:34:08.716270 16893 checks.go:209] 验证端口 10250 的可用性
I0401 00:34:08.716418 16893 checks.go:439] 验证连接类型是通过代理还是直接
I0401 00:34:08.716444 16893 join.go:427] [飞行前] 发现集群信息
I0401 00:34:08.716498 16893 token.go:200] [发现] 尝试连接到 API 服务器“ vm10.andrefagundes.org:6443
I0401 00:34:08.716961 16893 token.go:75] [discovery] 创建集群信息发现客户端,从“ https://vm10.andrefagundes.org:6443 ”请求信息
I0401 00:34:08.717031 16893 round_trippers.go:419] curl -k -v -XGET -H "接受:应用程序/json, / " -H "用户代理:kubeadm/v1.14.0 (linux/amd64) kubernetes/ 641856d"' https://vm10.andrefagundes.org :6443/api/v1/namespaces/kube-public/configmaps/cluster-info'
I0401 00:34:08.722405 16893 round_trippers.go:438] GET https://vm10.andrefagundes.org :6443/api/v1/namespaces/kube-public/configmaps/cluster-info 403 5 毫秒内禁止
I0401 00:34:08.722423 16893 round_trippers.go:444] 响应标头:
I0401 00:34:08.722432 16893 round_trippers.go:447] 内容类型:应用程序/json
I0401 00:34:08.722441 16893 round_trippers.go:447] X-Content-Type-Options: nosniff
I0401 00:34:08.722450 16893 round_trippers.go:447] 内容长度:321
I0401 00:34:08.722458 16893 round_trippers.go:447] 日期:2019 年 4 月 1 日星期一 03:34:08 GMT
I0401 00:34:08.722497 16893 request.go:942] 响应正文:{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message ":"configmaps \"cluster-info\" 被禁止:用户 \" system:anonymous\ " 无法在命名空间 \"kube-public\"" 中的 API 组 \"\" 中获取资源 \"configmaps\",原因":"禁止","详细信息":{"name":"cluster-info","kind":"configmaps"},"code":403}
I0401 00:34:08.722937 16893 token.go:83] [discovery] 无法请求集群信息,将重试:[configmaps "cluster-info" 被禁止:用户 " system:anonymous " 无法在 API 中获取资源 "configmaps"命名空间“kube-public”中的组“”]

另一个信息... vm10.andrefagundes.org 是我控制平面前面的 Haproxy。

对我来说似乎是一个网络问题。
你确定这个加入节点连接到 LB 上的端口 6443 并且可以解析 vm10.andrefagundes.org 吗?

是的,我还将 vm10 更改为指向控制平面。 我看到控制平面上的流量正在使用 TCDUMP 进行监控。

您是否在 kubelet 日志中看到任何未解决的错误?

日志中有几个错误。 我还尝试重新安装集群几次,每次都遇到不同的错误。 我要放弃了。 我们可以结案了。 谢谢!!

创建单个控制平面节点+一些工作节点是否适合您,还是仅在加入其他控制平面节点时才会出现问题?

用户“ system:anonymous ”无法在命名空间“kube-public”中的API组“”中获取资源“configmaps”“原因”:“Forbidden”,“details”:{“name”:“cluster-info”, “种类”:“配置映射”},“代码”:403

似乎 kubeadm init 没有正确创建/配置集群信息
你能分享一下 kubeadm init 日志吗?

执行命令“kubeadm join ...”后,我遇到了同样的错误:运行飞行前检查卡住了。 我不知道如何处理它。

我遇到过同样的问题。 我需要重新启动主节点,然后在节点上再次执行“kubeadm join ...”命令对我有用。

我对kubeadm v1.15有同样的问题,reboot master 对我不起作用

我对kubeadm v1.15有同样的问题,reboot master 对我不起作用

回退到 kubelet 和 kubeadm v1.13.1 修复了这个问题

确保您使用例如--v=2调用kubeadm init/join以获取有关正在发生的事情的更多详细信息。

遇到了同样的问题,但问题被追溯到网络连接,我的 keepalived 和 haproxy 守护程序配置错误,阻止挂起主节点通过 API 服务 VIP 加入集群

值得指出的是,使用 --v=2 运行 kubeadm init/join 是我解决它的方法

确保您使用例如--v=2调用kubeadm init/join以获取有关正在发生的事情的更多详细信息。

kubeadm v1.15

kubeadm 加入 .. --v=2

I0802 11:47:31.027812 359 token.go:202] [发现] 无法连接到 API 服务器“”:令牌 ID“r5uyqk”对此集群无效或已过期。 在控制平面节点上使用“kubeadm token create”创建一个新的有效令牌

kubeadm 初始化阶段上传证书 --upload-certs
kubeadm 令牌创建

然后 kubeadm 加入成功

就我而言,我能够通过停止主节点上的防火墙来成功加入节点。

systemctl stop firewall

就我而言,我能够通过停止主节点上的防火墙来成功加入节点。

systemctl stop firewall

这个很有魅力。
[ root@localhost ~]# kubeadm join 192.168.8.128:6443 --token 38lhr8.kxi5uy8aoy71dj17 --discovery-token-ca-cert-hash sha256:a12c805b8d98f42a256486d27e87463e22aaba190ab8f5bdce89bbb8ca34
[飞行前] 运行飞行前检查
[警告 IsDockerSystemdCheck]:检测到“cgroupfs”作为 Docker cgroup 驱动程序。 推荐的驱动程序是“systemd”。 请按照https://kubernetes.io/docs/setup/cri/上的指南进行操作
[警告 SystemVerification]:此 Docker 版本不在已验证版本列表中:19.03.1。 最新验证版本:18.09
[预检] 从集群中读取配置...
[飞行前] 仅供参考:您可以使用“kubectl -n kube-system get cm kubeadm-config -oyaml”查看此配置文件
[kubelet-start] 从 kube-system 命名空间中的“kubelet-config-1.14”ConfigMap 下载 kubelet 的配置
[kubelet-start] 将 kubelet 配置写入文件“/var/lib/kubelet/config.yaml”
[kubelet-start] 将带有标志的 kubelet 环境文件写入文件“/var/lib/kubelet/kubeadm-flags.env”
[kubelet-start] 激活 kubelet 服务
[kubelet-start] 等待 kubelet 执行 TLS Bootstrap...

此节点已加入集群:

  • 证书签名请求已发送到 apiserver 并收到响应。
  • Kubelet 被告知新的安全连接细节。

在控制平面上运行“kubectl get nodes”以查看该节点加入集群。

再次查看 OP 中的日志,这不是预检中的“挂起”,而是无法访问 cluster-info 配置映射,如果“init”的“boostrap-token”阶段可能会发生这种情况被跳过。

查看后来的报告,我看到网络和过期令牌问题属于“支持”项目而不是错误。

/分类支持
如有问题,请在 k8s slack 上尝试 stackoverflow、reddit 或 #kubeadm。

如果您发现真正的错误,请打开一个新问题。

就我而言,我能够通过停止主节点上的防火墙来成功加入节点。

systemctl stop firewall

systemctl 停止防火墙

我发现流量不允许连接主节点。

在 sg 中添加规则解决了我的问题

执行命令“kubeadm join ...”后,我遇到了同样的错误:运行飞行前检查卡住了。 我不知道如何处理它。

你找到任何解决方案了吗?

我发现流量不允许连接主节点。

在 sg 中添加规则解决了我的问题

你允许什么入站端口?

此页面是否有帮助?
0 / 5 - 0 等级