互联网技术 / 互联网资讯 · 2023年12月25日

Kubernetes组件故障排查的方法

KubeRnetes的基础组件就像一栋房子的地基,它们的重要性不言而喻。作为KubeRnetes集群的维护者,经常会遇到组件的问题,那平时是怎么去定位解决的呢?

这里简要分析一下我的排查思路。

通过集群的状态,找到故障的节点或者组件 分析组件的日志 使用pProf分析组件的具体性能 确定范围

KubeRnetes的基础组件不多,而且部署也非常简单,所以在定义范围的时候还是很容易的,比如我们在使用kubectl get nodes的时候,如果某个节点的状态是NotReady,我们脑海中是不是会出现两种可能?

(1)节点的kubelet组件有问题

(2)节点的网络组件有问题

这样一来,大体方向已经确定了,然后就是做排除法了。

这里为何说是排除法?因为在解决问题的途中,我们通常会采用先假设再验证的方式进行,先把所以可能的因素列出来,然后一个一个的去验证去排除,直到解决问题。

分析日志

日志分析是故障排查最直接的方式,大部分问题都能从日志里体现出来,KubeRnetes的组件日志查看方式通常有两种:

通过systemd启动的服务,使用jouRnalctl -l -u xxxx 使用静态pod启动的服务,使用kubectl logs -n kube-system $PODNAME –tAIl 100

当然,很多时候不仅仅是分析它本身的问题,我们还会关注周边的问题,比如基础设施的CPU、内存、IO等情况,这样进行综合考虑来找出问题。

性能分析

为什么把性能分析放到最后呢?

对于大部分人来说,并不擅长,也不喜欢分析组件的性能。第一是时间比较长,第二是要对各个性能指标有一定的了解,第三是学习成本比较大。

众所周知,KubeRnetes的版本迭代比较快,基本一年会发2-3个版本,如此快的迭代速度,不排除一些版本中存在bug,存在一些性能问题。所以在实在没招的情况下,可以尝试对其组件的性能进行分析。

KubeRnetes是使用Golang开发,而Golang的pProf是性能分析的利器,提供交互式界面和UI图形化,比较直观,可以很方便的找出问题。除此之外,还可以使用go-Torch将Profile数据生成火焰图,这样会更直观。

KubeRnetes的组件都可以使用pProf进行性能分析,界面在host:poRt/debug/pProf/。

pProf的常用方式

使用交互式命令

查看堆栈调用信息

goToolpProfhttp://localhost:8001/debug/pProf/heap

查看 30 秒内的 CPU 信息

goToolpProfhttp://localhost:8001/debug/pProf/Profile?seconds=30

查看 goRoutine 阻塞

goToolpProfhttp://localhost:8001/debug/pProf/block

收集 5 秒内的执行路径

goToolpProfhttp://localhost:8001/debug/pProf/tRACE?seconds=5

互斥持有者的堆栈跟踪

goToolpProfhttp://localhost:8001/debug/pProf/Mutex 通过UI界面

UI分析工具使用起来相对比较麻烦,我们需要先导出文件,然后再使用go Tool工具起服务进行分析。

比如我们导出kube-scheduleR的堆栈信息。

cuRlsKvhttp://localhost:10251/debug/pProf/heapgtheap.out

然后使用go Tool工具起一个服务,如下:

goToolpProf-http=0.0.0.0:8989heap.out

然后就可以在浏览器上看到具体的堆栈信息图了。

Kubernetes组件问题排查的一些方法

注意,这里需要在服务端安装gRaphviz组件,各种操作系统的安装方式见.

UI界面主要的菜单以及其功能简要介绍如下:

VIEW查看模式 Top从高到底排序查看 GRaph默认的模式,以关系图形式查看 FlaMe GRaph以火焰图形式查看 Peek排序查看,展示的信息更多 SouRces排序查看,带源码标注 DisaSSeMble现实所有总量 SAMPLE为VIEW提供查看模式 alloc_objects已分配的对象总量(不管是否已释放 alloc_spACE已分配的内存总量(不管是否已释放) inuse_objects已分配但尚未释放的对象数量 inUSe_saPCe已分配但尚未释放的内存数量 REFINE提供筛选能力

上面简单介绍了pProf的基本使用方法,下面就KubeRnetes的各个组件进行简单的分析,这里只就CPU信息进 行获取以及展示。

注意:由于版本原因,有的版本默认开启了pProf,有的版本则没有,如果没有开启的,需要自行去开启,参数基本都是Profiling tRue,具体的信息可以到官网进行查看.

分析kube-APIseRveR

(1)使用kubectl Proxy启动一个代理

kubectl Proxy

(2)另起一个终端,获取CPU信息

cuRlsKvhttp://localhost:8001/debug/pProf/ProfilegtAPIseRveR-CPu.out

(3)使用go Tool工具启动服务

goToolpProf-http=0.0.0.0:8989APIseRveR-CPu.out

(4)在浏览器上进行查看

Kubernetes组件问题排查的一些方法

分析kube-scheduleR

(1)获取CPU的信息

cuRlsKvhttp://localhost:10251/debug/pProf/ProfilegtscheduleR-CPu.out

(2)使用go Tool工具启动服务

goToolpProf-http=0.0.0.0:8989scheduleR-CPu.out

(3)在浏览器进行查看

Kubernetes组件问题排查的一些方法

分析kube-contRolleR-ManageR

(1)获取CPU的信息

cuRlsKvhttp://localhost:10252/debug/pProf/ProfilegtcontRolleR-CPu.out

(2)使用go Tool工具启动服务

goToolpProf-http=0.0.0.0:8989contRolleR-CPu.out

(3)在浏览器进行查看

Kubernetes组件问题排查的一些方法

分析kubelet

(1)使用kubectl Proxy启动一个代理

kubectl Proxy

(2)另起一个终端,获取CPU信息

cuRlsKvhttp://127.0.0.1:8001/API/v1/nodes/k8s-node04-138/Proxy/debug/pProf/Profilegtkubelet-CPu.out

(3)使用go Tool工具启动服务

goToolpProf-http=0.0.0.0:8989kubelet-CPu.out

(4)在浏览器上进行查看

Kubernetes组件问题排查的一些方法

能够抓到具体的性能数据才是第一步,后续的具体分析才会帮助我们找到问题。

文档

[1] https://GithubcoM/Google/pProf

[2] https://GithubcoM/ubeR-aRcHive/go-Torch

[3] http://wwwgRaphvizoRg/download/#linux

[4] https://kubeRnetesio/zh/docs/RefeRence/coMMand-line-Tools-RefeRence/kube-APIseRveR/

 

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册