起因在csdn上看了一直整天都没看到一个能解决我问题的方法,哪怕是我一个问题解决了,另一个报错又起来了,头疼的问题,折磨了一天,在不断查阅资料学习当中,终于解决了这个问题

结论:原因是服务器的/opt/cni/bin/目录中没有flannel插件

先看下报错

journalctl -f -u kubelet.service

6月 21 20:17:49 master kubelet[5841]: : [failed to find plugin "flannel" in path [/opt/cni/bin]]
6月 21 20:17:49 master kubelet[5841]: W0621 20:17:49.563530    5841 cni.go:237] Unable to update cni config: no valid networks found in /etc/cni/net.d
6月 21 20:17:54 master kubelet[5841]: E0621 20:17:54.223793    5841 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is no
6月 21 20:17:54 master kubelet[5841]: W0621 20:17:54.564025    5841 cni.go:202] Error validating CNI config list 

去github找到插件:Release CNI plugins v0.8.6 · containernetworking/plugins (github.com)

wget https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz

下载好后上传到服务器然后解压

tar -xvf cni-plugins-linux-amd64-v0.8.6.tgz

 

将其复制到目录/opt/cni/bin/下

mv flannel /opt/cni/bin/

 重新运行

kubectl apply -f kube-flannel.yml

其他节点大致也是这个问题:
1.但是过程当中可能某个节点会有陆陆续续很多的问题,
如果这个节点上有资源:先驱逐这个node节点上的pod

kubectl drain node1(节点名) --delete-local-data --force --ignore-daemonsets

 2.删除这个node1节点

kubectl delete nodes node01

 3.然后在node1这个节点上执行如下命令:

kubeadm reset
//重置Kubernetes集群的状态,包括删除所有的节点和清除所有的配置

systemctl stop kubelet
//停止kubelet服务

rm -rf /var/lib/cni/
//删除CNI插件的配置和状态信息

rm -rf /var/lib/kubelet/*
//删除kubelet的配置和状态信息

rm -rf /etc/cni/
//删除CNI插件的配置和状态信息

ifconfig cni0 down
//关闭cni0网络接口

ifconfig flannel.1 down
//关闭flannel.1网络接口

ifconfig docker0 down
//关闭docker0网络接口

ip link delete cni0
//删除cni0网络接口

ip link delete flannel.1
//删除flannel.1网络接口

systemctl start docker
//启动docker服务

systemctl start kubelet
//启动kubelet服务

 如果不做上面的操作的话会导致这个节点上的pod无法启动,具体报错信息为:networkPlugin cni failed to set up pod "alertmanager-main-1_monitoring" network: failed to set bridge ad has an IP address different from 10.244.5.1/24 ,意思是已经集群网络cni已经有一个不同于10.244.51.1/24 的网络地址,所以需要执行上述命令重置节点网络。

4.重新加入这个node节点
由于默认token的有效期为24小时,当过期之后,该token就不可用了,解决方法如下: 

1.查看当前的token列表
  kubeadm token list
2.重新生成新的token
 kubeadm token create
3.再次查看当前的token列表
 kubeadm token list
4.获取ca证书sha256编码hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
5.节点加入集群
k8s-master令牌:
kubeadm join 192.168.146.10:6443 --token 6ovaxh.fjhcp58ti080lo3q     --discovery-token-ca-cert-hash sha256:7549f78b40b034fe5cc03b109695f4306d1abbe92a670bafdbd8b7e60a7e1053

令牌组成形式为:
kubeadm join master节点IP:6443 --token token值 ----discovery-token-ca-cert-hash ca证书sha256编码hash值

token值: 6ovaxh.fjhcp58ti080lo3q 

ca证书sha256编码hash值: 7549f78b40b034fe5cc03b109695f4306d1abbe92a670bafdbd8b7e60a7e1053

加入节点后需要到master节点上在执行次kube-flannel.yml文件

kubeclt apply -f kube-flannel.yml
//用于部署和配置Flannel网络插件


//没有kube-flannel.yml的话可以用下面命令去github上拉取
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 重新部署flannel插件后获取以下node节点信息

kubectl get nodes

已经全部Ready,准备就绪~~ 

Logo

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

更多推荐