如何在Kubernetes节点处于“未就绪”状态时进行调试

时间:2017-11-04 03:37:59

标签: kubernetes

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

kubectl get nodes

此外,这两个节点都处于“未就绪”状态。 我应该采取哪些步骤来了解问题所在?

  • 我可以ping每个其他节点的所有节点。
  • Kubernetes的版本是1.8。
  • 操作系统是Cent OS 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
    

5 个答案:

答案 0 :(得分:37)

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

$ 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

答案 1 :(得分:2)

调试步骤:-

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

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

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

如果出现NotReady状态错误,请验证网络Pod日志。

如果无法通过以上方法解决,请执行以下步骤:-

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

  2. kubectl describe node nodename #nodename尚未就绪

  3. ssh到该节点

  4. 执行systemctl 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利用率。并确保任何进程都不会占用意外内存。

答案 2 :(得分:0)

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

错误:

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.conflist不正确。从另一个节点和同一目录“ 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

答案 3 :(得分:0)

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

kubectl apply -f [podnetwork] .yaml

答案 4 :(得分:0)

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