如何在 Kubernetes 节点处于'Not Ready'状态时进行调试



我初始化了主节点并添加了2个工作节点,但当我运行以下命令时,只有主节点和其中一个工作节点显示:

kubectl get nodes

此外,这两个节点都处于"未就绪"状态。我应该采取哪些步骤来了解问题可能是什么?

  • 我可以从其他每个节点ping所有节点
  • Kubernetes的版本是1.8
  • 操作系统是Cent操作系统7
  • 我使用以下repo来安装Kubernetes:

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes] name=Kubernetes
    baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    EOF
    yum install kubelet kubeadm kubectl kubernetes-cni
    

首先,描述节点并查看它是否报告了任何内容:

$ kubectl describe nodes

查找条件、容量和可分配:

Conditions:
Type              Status
----              ------
OutOfDisk         False
MemoryPressure    False
DiskPressure      False
Ready             True
Capacity:
cpu:       2
memory:    2052588Ki
pods:      110
Allocatable:
cpu:       2
memory:    1950188Ki
pods:      110

如果这里一切正常,SSH进入节点并观察kubelet日志,看看它是否报告了什么。如证书错误、身份验证错误等

如果kubelet作为systemd服务运行,则可以使用

$ journalctl -u kubelet

调试步骤:-

如果您在kubernetes中遇到任何问题,第一步是检查kubernete自身应用程序是否运行良好。

要检查的命令:-kubectl get pods -n kube-system

如果你看到任何吊舱正在崩溃,请检查其日志

如果获取NotReady状态错误,请验证网络pod日志。

如果无法解决以上问题,请执行以下步骤:-

  1. kubectl get nodes#检查哪个节点未处于就绪状态

  2. kubectl describe node nodename#不在readystate 中的节点名

  3. ssh到该节点

  4. executesystemctl status kubelet#确保kubelet正在运行

  5. systemctl status docker#确保docker服务正在运行

  6. journalctl -u kubelet#在深度中检查日志

很可能你会在这里了解错误,修复后用以下命令重置kubelet:-

  1. systemctl daemon-reload
  2. systemctl restart kubelet

如果你仍然没有找到根本原因,请检查以下内容:-

  1. 确保节点有足够的空间和内存。特别检查/var目录空间。要检查的命令:-df-khfree -m

  2. 使用top命令验证cpu利用率。并确保任何进程都不会占用意外内存。

由于不同的原因,我遇到了类似的问题:

错误:

cord@node1:~$ kubectl get nodes
NAME    STATUS     ROLES    AGE     VERSION
node1   Ready      master   17h     v1.13.5
node2   Ready      <none>   17h     v1.13.5
node3   NotReady   <none>   9m48s   v1.13.5
cord@node1:~$ kubectl describe node node3
Name:               node3
Conditions:
Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
----             ------  -----------------                 ------------------                ------                       -------
Ready            False   Thu, 18 Apr 2019 01:15:46 -0400   Thu, 18 Apr 2019 01:03:48 -0400   KubeletNotReady              runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Addresses:
InternalIP:  192.168.2.6
Hostname:    node3

cord@node3:~$journalctl-u kubelet

Apr 18 01:24:50 node3 kubelet[54132]: W0418 01:24:50.649047   54132 cni.go:149] Error loading CNI config list file /etc/cni/net.d/10-calico.conflist: error parsing configuration list: no 'plugins' key
Apr 18 01:24:50 node3 kubelet[54132]: W0418 01:24:50.649086   54132 cni.go:203] Unable to update cni config: No valid networks found in /etc/cni/net.d
Apr 18 01:24:50 node3 kubelet[54132]: E0418 01:24:50.649402   54132 kubelet.go:2192] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Apr 18 01:24:55 node3 kubelet[54132]: W0418 01:24:55.650816   54132 cni.go:149] Error loading CNI config list file /etc/cni/net.d/10-calico.conflist: error parsing configuration list: no 'plugins' key
Apr 18 01:24:55 node3 kubelet[54132]: W0418 01:24:55.650845   54132 cni.go:203] Unable to update cni config: No valid networks found in /etc/cni/net.d
Apr 18 01:24:55 node3 kubelet[54132]: E0418 01:24:55.651056   54132 kubelet.go:2192] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Apr 18 01:24:57 node3 kubelet[54132]: I0418 01:24:57.248519   54132 setters.go:72] Using node IP: "192.168.2.6"

问题:

我的文件:10-calico.conf冲突不正确。从不同的节点和同一目录"calico.conflist.template"中的示例文件验证了它。

分辨率:

更改文件"10 calico.conflist"并使用"systemctl restart kubelet"重新启动服务,解决了我的问题:

NAME    STATUS   ROLES    AGE   VERSION
node1   Ready    master   18h   v1.13.5
node2   Ready    <none>   18h   v1.13.5
node3   Ready    <none>   48m   v1.13.5

我最近开始使用VMWare Octanthttps://github.com/vmware-tanzu/octant.这是一个比Kubernetes Dashboard更好的UI。您可以查看Kubernetes集群,并查看集群和PODS的详细信息。这将允许您检查日志并在POD中打开一个终端。

我发现应用网络并重新启动两个节点对我来说很有用。

kubectl apply -f [podnetwork].yaml

我最近遇到了这个问题,并在kind网站上查看了已知的问题https://kind.sigs.k8s.io/docs/user/known-issues/它会特别告诉你,主要问题主要来自于分配给docker的内存不足。他们实际上建议将8GB分配给docker,我从3GB分配了6GB,对我来说效果很好,这是一个不错的版本,我正在运行atm

$ kind version
kind v0.10.0 go1.15.7 darwin/amd64

这是docker版本的

$ docker version
Client:
Cloud integration: 1.0.17
Version:           20.10.8
API version:       1.41
Go version:        go1.16.6
Git commit:        3967b7d
Built:             Fri Jul 30 19:55:20 2021
OS/Arch:           darwin/amd64
Context:           default
Experimental:      true
Server: Docker Engine - Community
Engine:
Version:          20.10.8
API version:      1.41 (minimum version 1.12)
Go version:       go1.16.6
Git commit:       75249d8
Built:            Fri Jul 30 19:52:10 2021
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.4.9
GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
runc:
Version:          1.0.1
GitCommit:        v1.0.1-0-g4144b63
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

我希望这能帮助你或任何面临同样问题的人。这是的输出

$ k get node
NAME                  STATUS   ROLES                  AGE     VERSION
test2-control-plane   Ready    control-plane,master   4m42s   v1.20.2

相关内容

最新更新