Kubernetes 3Master+Haproxy+Keepalived搭建过程中的排错思路思考 精华篇(下)
前情提要
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这个排查,本质连接的排查,包括返回内容是什么都要熟练。
--------------------------------------------------------------------------------------------------------------------------------
更多推荐


所有评论(0)