使用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节点确认。

kubectl get nodes

9.说明

  • 因为我的node节点时从master节点克隆出来的,只通过hostnamectl修改了临时值,没有修改静态值。
  • 网络桥接代理没有放到重启命令中,需要手动重启。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐