自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes組件問題排查的一些方法

云計(jì)算
Kubernetes的基礎(chǔ)組件就像一棟房子的地基,它們的重要性不言而喻。作為Kubernetes集群的維護(hù)者,經(jīng)常會(huì)遇到組件的問題,那平時(shí)是怎么去定位解決的呢?

[[394145]]

本文轉(zhuǎn)載自微信公眾號(hào)「運(yùn)維開發(fā)故事」,作者 喬克 。轉(zhuǎn)載本文請(qǐng)聯(lián)系運(yùn)維開發(fā)故事公眾號(hào)。

Kubernetes的基礎(chǔ)組件就像一棟房子的地基,它們的重要性不言而喻。作為Kubernetes集群的維護(hù)者,經(jīng)常會(huì)遇到組件的問題,那平時(shí)是怎么去定位解決的呢?

這里簡(jiǎn)要分析一下我的排查思路。

  • 通過集群的狀態(tài),找到故障的節(jié)點(diǎn)或者組件
  • 分析組件的日志
  • 使用pprof分析組件的具體性能

確定范圍

Kubernetes的基礎(chǔ)組件不多,而且部署也非常簡(jiǎn)單,所以在定義范圍的時(shí)候還是很容易的,比如我們?cè)谑褂胟ubectl get nodes的時(shí)候,如果某個(gè)節(jié)點(diǎn)的狀態(tài)是NotReady,我們腦海中是不是會(huì)出現(xiàn)兩種可能?

(1)節(jié)點(diǎn)的kubelet組件有問題

(2)節(jié)點(diǎn)的網(wǎng)絡(luò)組件有問題

這樣一來,大體方向已經(jīng)確定了,然后就是做排除法了。

這里為何說是排除法?因?yàn)樵诮鉀Q問題的途中,我們通常會(huì)采用先假設(shè)再驗(yàn)證的方式進(jìn)行,先把所以可能的因素列出來,然后一個(gè)一個(gè)的去驗(yàn)證去排除,直到解決問題。

分析日志

日志分析是故障排查最直接的方式,大部分問題都能從日志里體現(xiàn)出來,Kubernetes的組件日志查看方式通常有兩種:

  • 通過systemd啟動(dòng)的服務(wù),使用journalctl -l -u xxxx
  • 使用靜態(tài)pod啟動(dòng)的服務(wù),使用kubectl logs -n kube-system $PODNAME --tail 100

當(dāng)然,很多時(shí)候不僅僅是分析它本身的問題,我們還會(huì)關(guān)注周邊的問題,比如基礎(chǔ)設(shè)施的CPU、內(nèi)存、IO等情況,這樣進(jìn)行綜合考慮來找出問題。

性能分析

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

對(duì)于大部分人來說,并不擅長(zhǎng),也不喜歡分析組件的性能。第一是時(shí)間比較長(zhǎng),第二是要對(duì)各個(gè)性能指標(biāo)有一定的了解,第三是學(xué)習(xí)成本比較大。

眾所周知,Kubernetes的版本迭代比較快,基本一年會(huì)發(fā)2-3個(gè)版本,如此快的迭代速度,不排除一些版本中存在BUG,存在一些性能問題。所以在實(shí)在沒招的情況下,可以嘗試對(duì)其組件的性能進(jìn)行分析。

Kubernetes是使用Golang開發(fā),而Golang的pprof是性能分析的利器,提供交互式界面和UI圖形化,比較直觀,可以很方便的找出問題。除此之外,還可以使用go-torch將profile數(shù)據(jù)生成火焰圖,這樣會(huì)更直觀。

Kubernetes的組件都可以使用pprof進(jìn)行性能分析,界面在host:port/debug/pprof/。

pprof的常用方式

使用交互式命令

查看堆棧調(diào)用信息

  1. go tool pprof http://localhost:8001/debug/pprof/heap 

查看 30 秒內(nèi)的 CPU 信息

  1. go tool pprof http://localhost:8001/debug/pprof/profile?seconds=30 

查看 goroutine 阻塞

  1. go tool pprof http://localhost:8001/debug/pprof/block 

收集 5 秒內(nèi)的執(zhí)行路徑

  1. go tool pprof http://localhost:8001/debug/pprof/trace?seconds=5 

互斥持有者的堆棧跟蹤

  1. go tool pprof http://localhost:8001/debug/pprof/mutex 

通過UI界面

UI分析工具使用起來相對(duì)比較麻煩,我們需要先導(dǎo)出文件,然后再使用go tool工具起服務(wù)進(jìn)行分析。

比如我們導(dǎo)出kube-scheduler的堆棧信息。

  1. curl -sK -v http://localhost:10251/debug/pprof/heap > heap.out 

然后使用go tool工具起一個(gè)服務(wù),如下:

  1. go tool pprof -http=0.0.0.0:8989 heap.out 

然后就可以在瀏覽器上看到具體的堆棧信息圖了。

注意,這里需要在服務(wù)端安裝graphviz組件,各種操作系統(tǒng)的安裝方式見[3]。

UI界面主要的菜單以及其功能簡(jiǎn)要介紹如下:

  • VIEW:查看模式
    • Top:從高到底排序查看
    • Graph:默認(rèn)的模式,以關(guān)系圖形式查看
    • Flame Graph:以火焰圖形式查看
    • Peek:排序查看,展示的信息更多
    • Source:排序查看,帶源碼標(biāo)注
    • Disassemble:現(xiàn)實(shí)所有總量
  • SAMPLE:為VIEW提供查看模式
    • alloc_objects:已分配的對(duì)象總量(不管是否已釋放
    • alloc_space:已分配的內(nèi)存總量(不管是否已釋放)
    • inuse_objects:已分配但尚未釋放的對(duì)象數(shù)量
    • inuse_sapce:已分配但尚未釋放的內(nèi)存數(shù)量
    • REFINE:提供篩選能力

上面簡(jiǎn)單介紹了pprof的基本使用方法,下面就Kubernetes的各個(gè)組件進(jìn)行簡(jiǎn)單的分析,這里只就CPU信息進(jìn) 行獲取以及展示。

注意:由于版本原因,有的版本默認(rèn)開啟了pprof,有的版本則沒有,如果沒有開啟的,需要自行去開啟,參數(shù)基本都是profiling: true,具體的信息可以到官網(wǎng)進(jìn)行查看[4]。

分析kube-apiserver

(1)使用kubectl proxy啟動(dòng)一個(gè)代理

  1. kubectl proxy 

(2)另起一個(gè)終端,獲取CPU信息

  1. curl -sK -v http://localhost:8001/debug/pprof/profile >apiserver-cpu.out 

(3)使用go tool工具啟動(dòng)服務(wù)

  1. go tool pprof -http=0.0.0.0:8989 apiserver-cpu.out 

(4)在瀏覽器上進(jìn)行查看

分析kube-scheduler

(1)獲取CPU的信息

  1. curl -sK -v  http://localhost:10251/debug/pprof/profile >scheduler-cpu.out 

(2)使用go tool工具啟動(dòng)服務(wù)

  1. go tool pprof -http=0.0.0.0:8989 scheduler-cpu.out 

(3)在瀏覽器進(jìn)行查看

分析kube-controller-manager

(1)獲取CPU的信息

  1. curl -sK -v  http://localhost:10252/debug/pprof/profile >controller-cpu.out 

(2)使用go tool工具啟動(dòng)服務(wù)

  1. go tool pprof -http=0.0.0.0:8989 controller-cpu.out 

(3)在瀏覽器進(jìn)行查看

分析kubelet

(1)使用kubectl proxy啟動(dòng)一個(gè)代理

  1. kubectl proxy 

(2)另起一個(gè)終端,獲取CPU信息

  1. curl -sK -v http://127.0.0.1:8001/api/v1/nodes/k8s-node04-138/proxy/debug/pprof/profile >kubelet-cpu.out 

(3)使用go tool工具啟動(dòng)服務(wù)

  1. go tool pprof -http=0.0.0.0:8989 kubelet-cpu.out 

(4)在瀏覽器上進(jìn)行查看

能夠抓到具體的性能數(shù)據(jù)才是第一步,后續(xù)的具體分析才會(huì)幫助我們找到問題。

文檔

[1] https://github.com/google/pprof

[2] https://github.com/uber-archive/go-torch

[3] http://www.graphviz.org/download/#linux

[4] https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/

 

責(zé)任編輯:武曉燕 來源: 運(yùn)維開發(fā)故事
相關(guān)推薦

2021-07-30 20:59:21

MySQL內(nèi)存.參數(shù)

2015-08-24 09:26:18

Java內(nèi)存問題見解

2009-06-18 13:42:48

Hibernate s

2009-06-04 16:28:43

EJB常見問題

2017-05-23 14:33:46

簡(jiǎn)歷求職前端開發(fā)

2023-09-04 16:55:18

2017-05-10 14:49:52

Kotlin語言Java

2021-10-14 07:28:03

Kubernetes通用排查

2016-10-18 22:10:02

HTTP推送HTML

2018-05-17 14:52:11

Javascripthtmlcss

2011-03-08 14:28:03

proftpdGentoo

2012-06-15 09:41:40

Linux內(nèi)核

2017-02-21 13:36:11

iosAPP性能

2009-06-12 10:25:42

Webservices

2018-06-12 15:39:41

容器部署云平臺(tái)

2017-04-13 12:59:43

數(shù)據(jù)分析

2009-11-25 09:23:47

PHP引用&符號(hào)

2022-01-16 08:04:44

集群部署canal

2009-09-04 13:11:25

ASP.NET生成XM

2021-10-26 13:55:53

搞定系統(tǒng)設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)