使用vmWare虚拟机部署K8S集群,将虚拟机挂起重启后其中一个节点显示notReady状态,为解决该问题,进行了如下处理。
先在master节点确定问题
1.查看node节点的详细信息
kubectl describe node node01
没有找到问题。
2.确定不存在网络问题
在node节点,执行下述命令
ping master
3.查看kubelet状态
在node节点,执行下述命令
systemctl status kubelet
有报错信息,但不全。
执行下述命令,查看更详细日志信息
journalctl -u kubelet -f
4.结论
在第3步打开的日志中看出,该node节点在尝试删除master节点上的管理pod,比如:
3月 30 09:38:06 master kubelet[44742]: E0330 09:38:06.728941 44742 mirror_client.go:138] "Failed deleting a mirror pod" err="pods \"etcd-master\" is forbidden: node \"node01\" can only delete pods with spec.nodeName set to itself" pod="kube-system/etcd-master"
决定将该node重启。
方案一:重启物理机。
请注意,在执行重启操作之前,请确保节点上的所有数据都已经备份或保存。
1.将该node上的Pod转移出去,这个v1.23版本以上移除了,在v1.22版本也没有效果。
kubectl drain <node-name>
查看pod情况准备删除pod。
kubectl get node -o wide
确认该节点没有部署Pod,应该是k8s调度处理了。
2.重启节点
sudo reboot
3.加载网络桥接组件
modprobe br_netfilter
4.确认node情况
kubectl get nodes
5.恢复Pod调度
kubectl uncordon <node-name>
6.执行说明
跳过第3步,在master节点查看node节点的状态依旧是notReady,未执行后续步骤。
方案二:将node上的kubelet重置
1.关闭kubelet进程
systemctl stop kubelet
2.确认进程关闭
ps aux | grep kubelet
3.通过kubeadmin重置
kubeadmin reset
4.获取join命令
在master节点执行
kubeadm token create --print-join-command
5.执行join命令
在node节点执行,出现如下错误:
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
执行下述命令加载网络桥接组件:
modprobe br_netfilter
确认,执行下述命令有返回值表明成功。
lsmod | grep br_netfilter
6.再次执行join命令
出现如下错误:
error execution phase kubelet-start: a Node with name "<node-name>" and status "Ready" already exists in the cluster. You must delete the existing Node or change the name of this new joining Node
查看hostname,执行下述命令:
hostname
确认hostname错误执行下述命令变更,执行命令时注意变更node-name
hostnamectl set-hostname <node-name>
> /etc/hostname && echo '<node-name>' > /etc/hostname
7.再次执行join。
成功。
8.在master节点确认。文章来源:https://www.toymoban.com/news/detail-607856.html
kubectl get nodes
9.说明文章来源地址https://www.toymoban.com/news/detail-607856.html
- 因为我的node节点时从master节点克隆出来的,只通过hostnamectl修改了临时值,没有修改静态值。
- 网络桥接代理没有放到重启命令中,需要手动重启。
到了这里,关于K8S-节点notReady如何处理?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!