大家好,我是來自Dockout的張世銘我分享的內容主題是節點要關閉萌生的K8S開發入門之旅說到參與性K8S的開發大家的第一反應是什麼呢?困難或者對自己不自信人本能的對一些未知屬感到的恐懼這是人之常情但很多事情你嘗試了之後才會發現事實並不是這樣子的今天的分享內容主要圍繞著我個人做一個萌生入門K8S的開發的新路地程參與開發了優雅關切的一些功能以及熟悉K8S社區開發的協作模式與公司內部集中式的項目開發模式不同幾乎所有的開發社區都是一個分布式的鬆散的組織K8S同樣如此為此K8S建立了一套完備的社區智慮制度協作上主要圍繞著 issue和 PR展開那麼開始我們今天要分享的內容在一個斑鑽的下午我收到的需求需要調研一下K8S的新特性解典優雅關閉於是我馬不停的看一下文檔搭建環境配置好參數搭建好的環境好不容易整個測試環境好了但是發現一行警告身為有點技術潔癖的人這簡直不能忍於是我反手上給他提了個 issue按照 issue 的模板協商發生什麼也就是我的測試環境等等可能有些人不太熟悉這個界面左邊是一個馬克當的文本編輯器右邊的上面紅色框是該 issue 的一些標籤左邊右邊下面的紅色框是修改該 issue 的 PR由於截圖是已經完成的時候後續截的所以這是個完成狀態並且的話描述部分的話由於一開始比較萌新不太清楚貼了一張圖片其實最好的話還是盡量用文本去貼在貼了 issue 之後當時看到還缺少一個 seagate 的標籤然後的話會看到標籤內藍有個 need seagate 這樣一個標籤他提示我需要去補個 seagate當時的我也翻了一下文檔翻了一下有看到有很多的 seagate自己對照了一下挑了一個最合適我那個位置的 seagate 標籤因為是跟 kubernetes 相關的它是分到 signal 的這一塊所以說我主動回覆了一個 gun seagate然後 node然後這樣子就出發了它的 cikubernetes 的 ci然後就可能是接受了我這個回覆吧主動給我添加了一個 signal 的標籤然後刪除了 need seagate 的一些標籤提完 issue 之後我回顧了一下報錯信息感覺這是一個非常簡單的錯誤於是就配置文件其實就是配置文件被賦予了可執行的權限於是我們默默的翻了一下代碼定位到了問題代碼部分修改了一下在測試服務期做了一個簡單的驗證發現事情果然如我想的一樣於是我右上給大家提了個 PR去修復我自己提的 issue大家可以看到這個 PR 的結構和 issue 也是類似的左邊是個 macdon 編輯器右邊分別是 reviewer 等等下面的是 labelreviewer 是 ci 自動給 PR 分配的它會根據修改了代碼的部分隨機挑選兩個 reviewer 然後分配給你但是可能分配給你的 reviewer 已經不活躍了所以的話可能你的提一個 PR 會好久沒人理首先我這個 PR 提的是比較幸運吧很快就有人回覆了我這邊從左到右從上往下看很快就有人回覆了首先肯定也是看了我的修改給我回了一個 look good to meci 也給我這個 PR 添加了一個 look good to me 的標籤後續又有人幫我讚了 uproar其實就是有權限合併的神他會 他有權限去合併我的代碼他回覆個 uproar 的話ci 就會自動再給這個 PR 添加個 uproar 的標籤在你這個 PR 激起了 look good to me和 uproar 的標籤之後並且沒有什麼其他的阻止合併的標籤這時就會觸發 ci 的合併流程這個合併流程先會把你 PR 的單冊重新再全部跑一遍然後的話會把你合到倉庫的主分支至此我一個小小的修改就成功的合併了 KBS 的主庫心裡還是有點小高興的除了這個 PR 之外後續的工作中我還是默默關注這個方向的問題就又要關機這一塊的話也提了很多相關的 PR大部分也都是成功合併了從這裡可以看到從下往上 1.21 到即將發布的 1.23都有我對於又要關閉的一些修復和增強從跨出第一步開始到後續 暫時還是比較順利的又是一個晴朗的早晨我打開 SLAK發現處罰了新劇情突然被社區大佬小窗了說是至於我長期在有關機這塊的貢獻有個有關機的新需求問我是否有感興趣去做大佬提了這個需求還給了一些需求文檔與其 API 設計的文檔其實就是 KEP 嘛讓我參照的 KEP 去實施一下我當然非常爽快地接下了這個任務當前的話又要關機其實只有兩級一級是系統級的破的一級是普通的破的又要關機先會關閉普通破的然後再去關閉系統級的破的這個新的需求其實就是讓又要關機的層級可以變成變多並且是可以配置的在這上面是原先的配置下面是 KEP 新增的配置這個新增的配置只有在原先的配置都為零的時候才會啟用新增的配置是基於破的的優先級對破的進行分組分組的規則按照這個配置的表來來每組給予一定的又要關機時間優先級從低到高一次關閉總體來說這還是個較容易的需求身為資深班長人的我快就完成了出港像單冊一凸一也是寫的比較完善後續我就直接艾特大佬們來review了經過段段時需漫長的review歷程即將也要接近1.2的發布了你們認為我這個PR能順利合併嗎最後還是沒來得及上大佬做最後的review拖到1.2都已經coderphrase代碼凍結了都還沒有合併發的申請給1.2的release team leader延期合入的一些申請然而還是被拒了簡直一把心酸淚這個PR要被拖到1.23了一個月後1.2正式發布了我總想我現在我這個PR應該可以合併了吧我是這麼想的然而現在想來還是有點太年輕了signal的大佬來review代碼感覺KEP里這個新功能的命名不太好需要重新命名一下其實就是調換了一下名字的語序由於我這邊是按照KEP寫的來的所以說我要先去修改KEP然後的話我就開始了我的支線任務向KEP提交PR來修改這個優雅關機新特性的命名這邊是我提了一個PR然後去KEP的藏庫去提的後續的話也是比較順利KEP總算也合併了最後我回歸到主線任務又是一波rebase和重命名其實這麼長時間來我已經rebase過非常多次了就單單這一個PR然後就是等待大佬們繼續的review看這裡有好多owner想這個PR合併的話就需要這幾行里面的每個owner去美航owner文件里面的Apple去回覆一個Apple的指令才能出發等他們全部回覆完之後才會出發自押的合併流程感覺這又是個持久戰我的話在Gobernated社區也混了挺久成為member也有一段時間了對於社區的體系也大去了解的從下往上第一個是非member主要對應的是為加入KBS組織的人member是指有一定貢獻並加入組織的人reviewer是在member的基礎上對某個SIG代碼有一定熟悉並且reviewer國一些PR就可以申請成為reviewer其實你提的每一個PR的話CI都會隨機選擇這一塊的reviewer隨機選兩位指派去review this PR除此之外的話reviewer在我看來其實跟member沒有什麼太大的差異都沒有合併代碼的權限reviewer是在reviewer的基礎上有的這一塊SIG的合併代碼的權限了reviewer其實這是一個質變就是有沒有合併代碼onor的話是在reviewer的基礎上在我感覺上還有了更多的一些話語權比如說是否接受某個KEP或者制定reviewer的下個里程PR其實更多的在我看來是把空整個SIG的一些大方向在社區混了這麼長時間我也感覺自己的時間和經歷還是有的可以去幫忙reviewer更多別人的代碼所以提了個PR申請把自己留reviewer有機會去幫助更多的人reviewer代碼如果你還想了解更多的話其實可以愛特我或者是愛特近一年內在國內在社區比較活躍的人其實也是可以的我相信大家其實還是整個市區還是比較友好的總體來說在KBS社區裡在我的感覺上下面我來給大家演示一下幼兒關機以及基於權重幼兒關機的一些特性然後大家可以看到光標左持的位置它是幼兒關機的配置第一個是幼兒關機的總時間它是30秒也就是說在關機的時候它會先抑制住關機動作30秒然後在30秒之後去釋放然後第二個是系統組件的幼兒關機時間它的話10秒它會在總的關機時上30秒的最後倒數10秒鐘的時候去嘗試開始關閉也就是說普通的破的從一開始就關然後的話過了20秒鐘開始關系統的組件然後我們介紹一下這個破的破的的話我們可以看到這裡最底部的是破的C它是一個優先級為0的破的它的話就是最普通的那些破的第二個的話是一個自定義優先級的破的它的話我自定義的是1000然後第三個的話是一個跟系統組件同等優先級的破的再我們再來部署應用在原先的這個配置的情況下預期的話是B和C會同時關閉然後過20秒開始去關閉去關閉A然後我們去發送一個關機信號我們這邊部實際去關機而是發送一個關機信號提升一下速度然後我們這邊往上就應用就部署完成了三個然後我們發送一個關機信號可以看到B和C同時開始關閉了但是A的話要過20秒的時間開始關閉大概看這樣子是符合預期的大家可以看到這是符合預期的情況但它在terminal之後的話大概會過一段時間會變成arrow狀態然後arrow之後的話在過5分鐘它會變成它會被實際的刪除掉這時候的話它就會實際去調度到別的節點上去了這是1.22的一個特性在1.22之前的話1.21的話它有一點點不一樣它是一被刪除就重新調度到別的迫得上這是有一些差異然後的話我們這邊改好的配置恢復一下現場演示一下新的配置基於迫得優先級的關閉然後我們這邊加載一下然後的話去發送等應用重新起來等應用重新起來然後我們這邊加載好配置先準備就去等應用重新起來這個配置的應用的話是一個這樣的情況大家可以看到我這邊分的三級第一級的話是大於並且等於這個的話為一組然後大於等於1000的話為一組大於等於0的為一組也就是說每一組它有10秒鐘的關機時間比如說按照預期來說把abc3個破的話它會按順勢從c關閉然後再從b關閉再從a關閉每個間隔10秒鐘是這樣的一個情況現在我們開始按照可以看到c開始去關閉了大約過個10秒鐘cc也變成arrow剛好差不多都是10秒鐘的情況然後它b也變成arrow哦b也變成terminating然後的話再過10秒鐘a也開始關閉b也變成arrow基本上是符合預期的只要就這麼多謝謝大家