《k8s 1 13版本原始碼分析》 原始碼除錯

2022-07-04 20:18:09 字數 1312 閱讀 8147

寫在前面:本文已過時,請移步 daniel hu's blog

本節內容並不是在準備好k8s環境後就寫的,大家也不需要在開始看原始碼前研究怎麼除錯**。今天之前我已經發了《排程器優選過程》也就是差不多準備好k8s環境後乙個月了。所以大家也可以先跳過本節,先開始看後面的原始碼分析,靈活把握開始除錯原始碼的時間吧。

debug應該是所有「攻城獅」的基本技能。除非是「hello world」之類的小程式,不然都會出錯,俗稱bug,有bug就要debug. 今天不贅述除錯本身的技術,我們只以排程器為例聊聊怎麼把k8s的**單步執行跑起來,看看記憶體裡是個啥~

1、找到static pod 的yaml檔案:

這時候scheduler是執行狀態:

2、挪開yaml檔案,讓scheduler停止:

這時候再看scheduler可以發現pod已經沒了

在main函式前面點一下這個綠色的三角形,當然這樣執行肯定會失敗,但是點一下會為我們生成一些配置,可以簡化很多事情。點完之後開始配置:

點選上面的edit,可以看到下面視窗:

這裡的program arguments預設是空的,我們怎麼知道這裡配置啥呢?

從前面挪動的yaml中可以看到如下配置:

很明顯,拷貝這個scheduler.conf到goland所在的機子,加上--kubeconfig這個flag之後就可以執行了。從前面的截圖中可以看到我是將其放在了/etc/kubernetes/scheduler.conf.

開啟除錯:

如上,進入了熟悉的介面。

當然到這裡還沒有和api server互動,要進入排程邏輯需要有待排程的pod才行。我們使用前面驗證環境的使用的tomcat:

建立這個deployment之後可以看到pod是pending的:

我們把斷點打在scheduleone()裡面:

非常熟悉的介面來了:

這樣就能跟到排程器裡的各種邏輯了。

當排程器跑完後,pod也就起來了:

最後說下我的goland是跑在**的:

所以goland不在k8s集群內。當然這個沒有啥講究,也可以跑在一起,靈活決定。

本來計畫講一下scheduler裡的一些主要流程的除錯,但是debug這一節放在排程器那章裡感覺又不合適,最後決定放在環境準備裡面。讓新接觸本書的小夥伴可以早點看到,靈活決定開始除錯的時間。放在這裡的話講太多排程器的知識也不合適。所以這次就不多說具體**的除錯了,在各個章節裡如果哪個模組講解時我覺得需要插乙個除錯過程,就直接插在對應的地方吧~

k8s原始碼分析 pdf k8s原始碼分析之Cobra

一 cobra簡介 cobra 既是乙個用來建立強大的現代cli命令列的golang庫,也是乙個生成程式應用和命令列檔案的程式.cobra主要提供的功能 完全相容posix命令列模式 巢狀子命令subcommand 支援全域性,區域性,串聯flags 自動生成commands和flags的幫助資訊 ...

k8s原始碼分析準備工作 原始碼準備

寫在前面 本文已過時,請移步 daniel hu s blog 作業系統 我們使用linux作為k8s原始碼分析和除錯環境,fedora centos ubuntu都行,我這裡使用fedora golang相關 mkdir p root go src k8s.io cd root go src k8...

mysql安裝(5 7版本原始碼安裝)

環境是ubuntu16.04 嘗試安裝最新的mysql5.7.21版本,發現以前安裝指令碼執行後會報錯缺少boost 1 59 0 5.7版本依賴於boost 1 59 0,嘗試用1.63.0版本替換失敗 mariadb 10.2.13卻完美相容mysql以前的安裝語句 第一步執行 sudo apt...