由于未初始化CNI插件,Kubernetes工作者节点未就绪

问题描述

我正在使用kind在本地Macbook上运行测试kubernetes集群。

我找到了一个状态为NotReady的节点:

$ kind get clusters                                                                                                                                                                 
mc

$ kubernetes get nodes
NAME                STATUS     ROLES    AGE     VERSION
mc-control-plane    Ready      master   4h42m   v1.18.2
mc-control-plane2   Ready      master   4h41m   v1.18.2
mc-control-plane3   Ready      master   4h40m   v1.18.2
mc-worker           NotReady   <none>   4h40m   v1.18.2
mc-worker2          Ready      <none>   4h40m   v1.18.2
mc-worker3          Ready      <none>   4h40m   v1.18.2

kubectl describe node mc-worker中唯一有趣的事情是CNI插件未初始化:

Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Tue,11 Aug 2020 16:55:44 -0700   Tue,11 Aug 2020 12:10:16 -0700   KubeletHasSufficientMemory   kubelet has sufficient memory available
  diskPressure     False   Tue,11 Aug 2020 12:10:16 -0700   KubeletHasNodiskPressure     kubelet has no disk pressure
  PIDPressure      False   Tue,11 Aug 2020 12:10:16 -0700   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            False   Tue,11 Aug 2020 12:10:16 -0700   KubeletNotReady              runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady
message:Network plugin returns error: cni plugin not initialized

我有2个相似的群集,并且仅在此群集上发生。

由于kind使用本地Docker守护程序将这些节点作为容器运行,所以我已经尝试过重新启动容器(应该等同于重新启动节点)。

我已经考虑过删除并重新创建群集,但是应该有一种无需重新创建群集即可解决此问题的方法

以下是我正在运行的版本:

$ kind version                                                                                                                                                                     
kind v0.8.1 go1.14.4 darwin/amd64

$ kubectl version                                                                                                                                                  
Client Version: version.Info{Major:"1",Minor:"16+",GitVersion:"v1.16.6-beta.0",GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc",GitTreeState:"clean",BuildDate:"2020-01-15T08:26:26Z",GoVersion:"go1.13.5",Compiler:"gc",Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1",Minor:"18",GitVersion:"v1.18.2",GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032",BuildDate:"2020-04-30T20:19:45Z",GoVersion:"go1.13.9",Platform:"linux/amd64"}

您如何解决此问题?

解决方法

最可能的原因:

docker VM的某些资源用完了,无法在该特定节点上启动CNI。

您可以通过以下方式在HyperKit VM中四处浏览:

从外壳:

user_id

如果由于某些原因无法正常工作:

staff

在虚拟机中一次:

staff_id

然后,您始终可以在Docker UI上更新设置:

Image1

最后,您的节点毕竟在容器中运行。因此,您可以连接到该容器并查看看到的staff个错误:

staff_type

✌️

,

我遇到了这种情况。主节点已准备就绪,但工作节点的状态不是。经过一番调查,我发现/ opt / cni / bin为空-我的工作节点主机没有网络插件。因此,我安装了此“ kubernetes-cni.x86_64”并重新启动了kubelet服务。这解决了我的工作节点的“未就绪”状态。