調(diào)試kubernetes組件

1.why

kubernetes是使用go語言編寫的竹祷,對于很多同學(xué)來說介蛉,可能對這種語言機制不甚熟悉。掌握調(diào)試方法溶褪,一方面能夠精準(zhǔn)定位問題,另一方面對學(xué)習(xí)相關(guān)語言也有反向促進機制践险。摩刀不誤砍柴功猿妈。只要有源碼吹菱,任何問題都是可以解決的,剩下的只是時間問題彭则。

2.準(zhǔn)備工作

  1. 安裝delve
    delve是目前最方便用于調(diào)試golang的工具鳍刷,安裝delve有兩種方法:
  • 使用go命令:
go get -u github.com/derekparker/delve/cmd/dlv
  • 使用源碼
https://github.com/derekparker/delve
make install

2.編譯kubernetes組件

  • 通過make help查看如何編譯帶調(diào)試信息的kubernetes組件
[newcent@localhost kubernetes-1.9.2]$ make help
--------------------------------------------------------------------------------
all
# Build code.
#
# Args:
#   WHAT: Directory names to build.  If any of these directories has a 'main'
#     package, the build will produce executable files under _output/go/bin.
#     If not specified, "everything" will be built.
#   GOFLAGS: Extra flags to pass to 'go' when building.
#   GOLDFLAGS: Extra linking flags passed to 'go' when building.
#   GOGCFLAGS: Additional go compile flags passed to 'go' when building.
#
# Example:
#   make
#   make all
#   make all WHAT=cmd/kubelet GOFLAGS=-v
#   make all GOGCFLAGS="-N -l"
#     Note: Use the -N -l options to disable compiler optimizations an inlining.
#           Using these build options allows you to subsequently use source
#           debugging tools like delve.
---------------------------------------------------------------------------------
......

  • 使用make all GOGCFLAGS="-N -l"編譯kubernetes組件

3.調(diào)試kubelet

  • 將編譯kubelet拷貝到相應(yīng)的node上
  • 在node上通過dlv啟動kubelet
 dlv exec ./kubelet --headless -l 192.168.122.12:1234 -- --logtostderr=true --v=0 --allow-privileged=false --address=0.0.0.0 --hostname-override=node1 --pod-infra-container-image=gcr.io/google_ctainers/pause-amd64:3.0 --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --cgroup-driver=systemd

--headless -l 192.168.122.12:1234指定啟動一個調(diào)試server端,因為編譯kubernetes組件往往不會在node上編譯俯抖,node上也沒有相應(yīng)的源碼输瓜,通過這一機制,可以在編譯節(jié)點上啟動dlv client芬萍,調(diào)試相關(guān)代碼尤揣。

  • 在編譯節(jié)點上連接server端
[newcent@localhost kubernetes-1.9.2]$ dlv connect 192.168.122.12:1234
Type 'help' for list of commands.
(dlv) b main.main
Breakpoint 1 set at 0x394496b for main.main() ./_output/local/go/src/k8s.io/kubernetes/cmd/kubelet/kubelet.go:44
(dlv) c
> main.main() ./_output/local/go/src/k8s.io/kubernetes/cmd/kubelet/kubelet.go:44 (hits goroutine(1):1 total:1) (PC: 0x394496b)
Warning: debugging optimized function
Warning: listing may not match stale executable
    39: func die(err error) {
    40:     fmt.Fprintf(os.Stderr, "error: %v\n", err)
    41:     os.Exit(1)
    42: }
    43: 
=>  44: func main() {
    45:     // construct KubeletFlags object and register command line flags mapping
    46:     kubeletFlags := options.NewKubeletFlags()
    47:     kubeletFlags.AddFlags(pflag.CommandLine)
    48: 
    49:     fmt.Printf("args: %s\n", os.Args[0])
(dlv) 

4.delve使用方法(附)

命令 描述
args 打印函數(shù)參數(shù)
break 設(shè)置斷點
brekpoints 打印活躍斷點
clear 刪除斷點
check? 在當(dāng)前位置創(chuàng)建一個檢查點
checkpoints 打印存在的檢查點
clear-checkpoint 刪除檢查點
clearall 刪除多個斷點
condition 設(shè)置條件斷點
config柬祠? 改變配置參數(shù)
continue 繼續(xù)執(zhí)行
disassemble 反匯編器
exit 退出調(diào)式
frame北戏? 在不同的幀上執(zhí)行命令
funcs 打印函數(shù)列表
goroutine 展示當(dāng)前協(xié)程
help 打印幫助文檔
list 展示源代碼
locals 打印局部變量
next 跳到下一行源代碼
on? 當(dāng)斷點被命中后執(zhí)行一個命令
print 打印表達式
regs 打印CPU寄存器內(nèi)容
restart 從checkpoint或事件開始重啟進程
rewind漫蛔? 回退知道斷點或程序終止
set 改變一個變量的值
source 執(zhí)行一個包含delve命令列表的文件
stack 打印調(diào)用棧
step 單步執(zhí)行
step-instruction 單個CPU指令執(zhí)行
stepout 跳出當(dāng)前函數(shù)
thread 切換至某個具體的函數(shù)
threads 打印每一個所跟蹤的線程信息
trace 設(shè)置一個跟蹤點
types 打出類型列表
vars嗜愈? 打印封裝變量
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市莽龟,隨后出現(xiàn)的幾起案子蠕嫁,更是在濱河造成了極大的恐慌,老刑警劉巖毯盈,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剃毒,死亡現(xiàn)場離奇詭異,居然都是意外死亡奶镶,警方通過查閱死者的電腦和手機迟赃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂镇,“玉大人纤壁,你說我怎么就攤上這事∞嘈牛” “怎么了酌媒?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迄靠。 經(jīng)常有香客問我秒咨,道長,這世上最難降的妖魔是什么掌挚? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任雨席,我火速辦了婚禮,結(jié)果婚禮上吠式,老公的妹妹穿的比我還像新娘陡厘。我一直安慰自己抽米,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布糙置。 她就那樣靜靜地躺著云茸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谤饭。 梳的紋絲不亂的頭發(fā)上标捺,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音揉抵,去河邊找鬼亡容。 笑死,一個胖子當(dāng)著我的面吹牛功舀,可吹牛的內(nèi)容都是我干的萍倡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辟汰,長吁一口氣:“原來是場噩夢啊……” “哼列敲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帖汞,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤戴而,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翩蘸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體所意,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年催首,在試婚紗的時候發(fā)現(xiàn)自己被綠了扶踊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡郎任,死狀恐怖秧耗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舶治,我是刑警寧澤分井,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站霉猛,受9級特大地震影響尺锚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惜浅,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一瘫辩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦伐厌、人聲如沸阅仔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至空民,卻和暖如春刃唐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背界轩。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工画饥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浊猾。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓抖甘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親葫慎。 傳聞我的和親對象是個殘疾皇子衔彻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.1 Kubernetes是什么 首先,它是一個全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案偷办; 其次艰额,Kubernet...
    c84f3109853b閱讀 80,589評論 1 117
  • 用到的組件 1、通過CocoaPods安裝 2椒涯、第三方類庫安裝 3柄沮、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,616評論 1 180
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 朋友喬遷新居,請新老舊友聚會废岂,就在新居里設(shè)宴祖搓。多年不見,朋友已經(jīng)是有車有房的成功人士湖苞,賓主相見甚歡拯欧。宴會畢,大伙兒...
    德拉西翁的星空閱讀 335評論 0 0
  • “為什么會變胖呢滑肉?”為什么會瘦呢?“你能認(rèn)真地回答這個問題嗎摘仅? 首先減肥不純粹是為了美麗靶庙,還同時需要具有健康的意識...
    一顆梧桐樹閱讀 693評論 1 4