前情提要

kubeadm init报错

This error is likely caused by:

- The kubelet is not running

- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

kubelet报错

"Error getting node" err="node \"master01\" not found"

"Error getting node" err="node \"master01\" not found"

"Error getting node" err="node \"master01\" not found"

经过对HA,Keepalived,kubelet的排查基本确定是kubelet链接不到VIP+端口,但始终未定位具体原因。

---------------------------------------接下来是江湖大侠的操作及排查流程------------------------------------------

API-SERVER 排查

1)首先排查docker ps -a|grep api-server

这是看看apiserver起来没有,有没有日志。

结果没有起来。。

启动命令 排查

2)接着呢他有排查了我的启动命令

kubeadm init --apiserver-advertise-address=10.1.101.69 --apiserver-bind-port=6443 --control-plane-endpoint=10.1.101.65:16443 --kubernetes-version v1.23.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=172.17.0.0/16 --v=5

他看了以后更新了我的初始化命令,少了upload-certs,他更正了一下。upload-certs是用于同步证书的,加上这个参数之后,不需要手动传递。

kubeadm init \
  --control-plane-endpoint=10.1.101.65:16443 \
  --apiserver-advertise-address=10.1.101.69 \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=172.17.0.0/16 \
  --upload-certs \
  --v=5

在次执行一遍,结果还是不行,现象和原来一样。

DOCKER 排查

这一步骤的思路来源于:报错中的required cgroups disabled

目测也没有什么问题。

然后又重新加载了一遍执行,确认这个配置加载进去。

而后,又排查:/usr/lib/systemd/system/docker.service,确保里面没有cgroupdriver

再执行一遍init,看看能不能成功,docker的问题可以排除。结果还是不行。

报错还是一样的。

Kubelet 排查

首先看master01是哪个 cat /etc/hosts/,让我们从操作来解读思路,从322开始。

然后再排查网络能不能通,网络包括本机IP还有VIP,所以我们能看到他又进行了323和324的操作。

结果:这两个都能通。域名这块问题应该不大。

接着这部分,他又测试了一下更改hostsname,是否正常,通过更改后的结果,发现kubelet依旧没法识别master01。

348:查看了一下kubelet的配置文件

这里应该是要看一下server请求的地址是多少。

接下来是排查核心

核心排查

350:curl https://10.1.101.69:6443 查看apiserver是否正常,本机curl测试正常。

​

本地测试6443端口正常

再测试一下curl https://10.1.101.65:16443 是否正常,返回的却是空等待!注:这里没有截图

362:看了一下keepalive的状态

其实这里的exited就已经可以看出是keepalived的问题了。

这里他又在master02上进行了一次测试,这个很关键,确定是VIP出了问题。下图是master02的历史记录截图。

由此判断,10.1.101.65:16443存在问题。

后续就是更新keepalived配置文件,然后重启,修复完这个问题后,init成功!

以上便是完整的问题排错思路。

总结

--------------------------------------------------------------------------------------------------------------------------------

第一,你的网络验证不能本机ping,这个是我之前做KEEP验证的时候犯的一个错误,本机ping本机的虚拟IP,那走的是本地回环。所以要验证网络,要用另外的机器去ping,这个是升华的思路。

第二,之前再执行systemctl status keepalived状态的时候,就已经有exit标签了,开始没发现,也是因为熟练度不够,看见exit说明程序有问题退出。

第三,就是curl apiserver这个排查,本质连接的排查,包括返回内容是什么都要熟练。

--------------------------------------------------------------------------------------------------------------------------------

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐