首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于CNI插件未初始化,Kubernetes工作节点为NotReady

由于CNI插件未初始化,Kubernetes工作节点为NotReady
EN

Stack Overflow用户
提问于 2020-08-12 08:07:27
回答 2查看 5.3K关注 0票数 2

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

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

代码语言:javascript
复制
$ 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插件没有初始化:

代码语言:javascript
复制
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 16:55:44 -0700   Tue, 11 Aug 2020 12:10:16 -0700   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Tue, 11 Aug 2020 16:55:44 -0700   Tue, 11 Aug 2020 12:10:16 -0700   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            False   Tue, 11 Aug 2020 16:55:44 -0700   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

我有两个相似的集群,这只发生在这个集群上。

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

我已经考虑过删除并重新创建集群,但应该有一种方法可以在不重新创建集群的情况下解决这个问题。

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

代码语言:javascript
复制
$ 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", GitTreeState:"clean", BuildDate:"2020-04-30T20:19:45Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

您如何解决此问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-12 10:19:13

最可能的原因是:

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

您可以通过连接到HyperKit VM来查看它:

在shell中:

代码语言:javascript
复制
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

如果由于某些原因不起作用:

代码语言:javascript
复制
docker run -it --rm --privileged --pid=host alpine nsenter -t 1 -m -u -n -i sh

进入虚拟机后:

代码语言:javascript
复制
# ps -Af
# free
# df -h
...

然后,您可以随时更新docker UI上的设置:

最后,您的节点毕竟是在容器中运行的。这样您就可以连接到该容器并查看您看到的kubelet错误:

代码语言:javascript
复制
docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                       NAMES
6d881be79f4a        kindest/node:v1.18.2   "/usr/local/bin/entr…"   32 seconds ago      Up 29 seconds       127.0.0.1:57316->6443/tcp   kind-control-plane
docker exec -it 6d881be79f4a bash
root@kind-control-plane:/# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/kind/systemd/kubelet.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since Wed 2020-08-12 02:32:16 UTC; 35s ago
     Docs: http://kubernetes.io/docs/
 Main PID: 768 (kubelet)
    Tasks: 23 (limit: 2348)
   Memory: 32.8M
   CGroup: /docker/6d881be79f4a8ded3162ec6b5caa8805542ff9703fabf5d3d2eee204a0814e01/system.slice/kubelet.service
           └─768 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet
/config.yaml --container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock --fail-swap-on=false --node-ip= --fail-swap-on=false
...

✌️

票数 1
EN

Stack Overflow用户

发布于 2020-10-23 18:14:27

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63367988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档