我的 Kubernetes 节点有问题,但很难调试,因为我得到了堆栈跟踪的页面和页面,例如
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/client-go/tools/cache.(*Reflector).Run(0xc000040f
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: created by k8s.io/kubernetes/pkg/kubelet/config.newSourceApiserverFromLW
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: goroutine 244 [select]:
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.contextForChannel.func
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: created by k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.contextForC
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: goroutine 205 [sync.Cond.Wait]:
Nov 13 10:55:51 corona kubelet[29656]: runtime.goparkunlock(...)
Nov 13 10:55:51 corona kubelet[29656]: /usr/local/go/src/runtime/proc.go:312
Nov 13 10:55:51 corona kubelet[29656]: sync.runtime_notifyListWait(0xc000b140c8, 0x1)
Nov 13 10:55:51 corona kubelet[29656]: /usr/local/go/src/runtime/sema.go:513 +0xf8
Nov 13 10:55:51 corona kubelet[29656]: sync.(*Cond).Wait(0xc000b140b8)
Nov 13 10:55:51 corona kubelet[29656]: /usr/local/go/src/sync/cond.go:56 +0x9d
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/client-go/tools/cache.(*DeltaFIFO).Pop(0xc000b140
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/client-go/tools/cache.(*controller).processLoop(0
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1(0xc
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.BackoffUntil(0xc000def
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc000defe
Nov 13 10:55:51 corona kubelet[29656]: /workspace/anago-v1.19.4-rc.0.51+5f1e5cafd33a88/src/k8s.io/kubernetes/_ou
Nov 13 10:55:51 corona kubelet[29656]: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.Until(...)
我尝试-v=0
在 systemd 单元文件中添加 kubelet 命令,但它仍在喷涌而出。我看了看,/var/lib/kubelet/config.yaml
它说logging: {}
。我不确定是否可以放一些东西让它更安静。
有没有办法告诉 kubelet 跳过堆栈跟踪?跟踪之前的错误消息很有帮助,但很难在噪音中找到。
首先检查它没有任何用于运行 kubelet 的配置文件或环境变量。
最好的检查方法:
1. 检查 kubelet 进程(例如 ps -ef | grep kubelet)查看所有 args
2. 如果 kubelet 使用动态配置,请检查 Kube-system 中的 ConfigMap kubelet-config-1.18 以查看是否指定了 cgroupDriver 3.如果您使用 运行 kubelet
systemd
,则可以使用以下方法查看 kubelet 的日志:请参阅:系统组件日志。
请参阅如何缩小日志范围的示例:management-logs-kubernetes。
错误
failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
是由于 Kubelet 中使用的 Cgroup 驱动程序造成的。Kubelet 和 Docker 应该使用 Systemd 驱动程序或 Cgroupfs 运行。推荐使用 Systemd。检查工作节点文件
/var/lib/kubelet/kubeadm-flags.env
以及KUBELET_KUBEADM_ARGS
是否有--cgroup-driver=cgroupfs
标志。将其更改为systemd
kubelet 将再次开始工作。看一下: kubelete-cgroupfs-driver,kubelet-cgroupfs。
另请参阅:kubelet-runtime-panic。
堆栈跟踪来自 kubelet 调用
panic
中的代码,这是一个 Golang 例程,它从所有线程转储堆栈跟踪并以不成功的退出代码终止程序。除了不在代码中调用之外,没有办法避免堆栈跟踪
panic
。通常,恐慌表明程序已进入意外状态,堆栈跟踪将帮助程序员调试问题。在这种情况下,至少有一些恐慌来自已知错误。该程序以不正确的配置启动。没有办法缩短或避免堆栈跟踪输出。可能应该更正 kubelet 代码,以便在出现错误时干净地退出,而不是在问题明确的情况下惊慌失措。
从操作员的角度来看,唯一可以做的就是找到恐慌的第一行,它通常包含一个可读的错误消息,看看它是否可以解决。