快轉到主要內容

Kubernetes Release Team 裡看 Signal:Release Signal 的日常與成長

ChengHao Yang
作者
ChengHao Yang
SRE / CNCF Ambassador
目錄

Kubernetes v1.35 終於 release 了,不過你有想過大型專案 Kubernetes 每一個版本背後,都有人在盯著「訊號」是否開始失真嗎? Release Signal 在做什麼?每天到底在看什麼?

這篇文章記錄我從 Shadow 走進 Kubernetes Release Team,成為 sub-team lead 的心路歷程,實際參與版本節奏、code freeze、RC 前後的真實日常。

Kubernetes v1.35: Timbernetes 世界樹 Logo
Kubernetes v1.35: Timbernetes 世界樹

為何會加入 Release Team?
#

當初是在 Kubernetes 社群和 LinkedIn 裡面閒逛,偶然就滑到別人在貼 Kubernetes Release Team 徵 shadow,有看到 v1.30 的訊息,但個人評估是沒有時間就先 skip 掉,直到 v1.31 嘗試申請。

LinkedIn 貼文宣傳 Kubernetes v1.35 Release Team Shadow Application
LinkedIn 貼文:宣傳 Kubernetes v1.35 Release Team Shadow Application

台灣社群身邊的人似乎也沒人聽過 Release Team,FB 沒人分享這類型訊息,也是我額外的學習機會。另外,這會跟隨最新版本的釋出,會比別人先知道許多訊息,儘管內容 (e.g. KEP 等) 是公開的,但不是每個人都會去翻找。

仔細閱讀 handbook 後,就可以準備一下申請內容送出了。我自己因為是 SRE 職位的關係,看起來跟 CI 有關的就是 Release Signal,我也想藉機會學習 Kubernetes 的測試是如何進行,即使身處小公司,依然可以對外尋求資源,幫助自己拓展視野。

申請之後,就等待吧!我個人不偏好去跟 Lead 做「刷存在感」這類事,shadow 的決定還有很多因素影響,關於這點我放到後面段落解釋。

當時,很幸運被選中成為 Kubernetes v1.32 Release Signal 的 shadow,於是就開始協助這幾次版本發佈。

v1.32 Release Signal Lead 的歡迎訊息
v1.32 Release Signal 的第一則訊息

Release Team 在做什麼?
#

Release Team 主要是負責新版的發佈工作,目前有四個組別在招募 shadow,基本上不用先備知識,分別是:

  • Enhancements
  • Release Signal
  • Documentation
  • Communications

Release Lead 也有徵 shadow,不過需要先當過上述任一組的 lead 才有資格申請。Branch Management (BM) 是由 SIG Release 管理,基本上要參與過 Release Team 才能成為 BM shadow。

Enhancements 負責整理新版 Kubernetes 的改善功能,同時也是 SIG Architecture 的子專案 Enhancement 聯絡人,需要維護 kubernetes/enhancements 專案和協助 KEP owner 和 SIG lead 之間溝通。後續要協助 Communications 組起稿和審閱 blog 文章。

Release Signal 主要觀察 SIG Release 的新版 dashboard,開發期間的 PR 只會執行較短時間的測試,需要長時間的 E2E 測試就會放到背景中定期啟動。如果有發現 failing test 和 flaking test,就要回報並提醒對應的 SIG 組別。定期跟 BM 回報是否能發版。同時負責追蹤 bug triage。

Documentation 處理新版的 Kubernetes 文件,相關內容都會在 kubernetes/websitedev-v1.y 分支中,定期與 SIG Docs 日常會議,負責 Release Note 的整理工作。

Communications 主要是對外的公關,前期雖然工作內容較少,但後期需要寫許多 Kubernetes blog 的文章,包含中期的 Deprecations and Removals、Release blog、該版本的功能 blog 後續發佈。代表 Release Team 跟 CNCF 安排新聞發佈和舉辦網路研討會。

Release Signal 的日常工作
#

以下是我在 Release Signal 的工作內容需要做的事情:

  1. 監控 master-blockingmaster-informing 儀表板
  2. 尋找 Failing Test 和 Flaking Test
  3. 給 Branch Management 切版訊號 Go / No-Go
  4. Bug Triage
  5. 回報 Release Team 同步會議更新

1. 監控 master-blockingmaster-informing 儀表板
#

使用 TestGrid 去看 Kubernetes 的 CI 狀況,不過 TestGrid 不會只有 Kubernetes 的測試,還有其他 SIG 子專案和 CNCF Project (e.g. Istio、Cert Manager 等)。

TestGrid 首頁
TestGrid 首頁

我們是 SIG Release 的 Release Team,主要關心就會是 SIG Release 的儀表板,點進去後會有其他的子儀表板,分別有 master-blockingmaster-informing 還有各版本的 blocking 和 informing,以及其他 Release Engineering 的儀表板。

TestGrid 的 SIG Release 頁面
TestGrid 的 SIG Release 頁面

Release Team 主要負責新版本的發佈,所以只需要關心 master-blockingmaster-informing 的儀表板即可。

master-blocking 的儀表板
master-blocking 的儀表板
master-informing 的儀表板
master-informing 的儀表板

RC 切版後,會多出 release-1.y 分支,同時也會多出 1.y-blocking1.y-informing 的儀表板,到正式版本發佈以前需要額外監控這兩個儀表板。


Blocking 和 Informing 差異主要是緊急和重要程度,放在 Blocking 的 job 通常都很緊急、重要,出現錯誤要跟 SIG 確認是否會阻礙發佈或修正,其他 job 很重要但不需要緊急處理(或測試頻率較低)就會放到 Informing。

如果想了解詳細內容,可以去看 Release Blocking 的判斷標準,雖然不是 Release Signal 先備知識,但可以理解前因後果。

2. 尋找 Failing Test 和 Flaking Test
#

我們需要尋找兩個性質的錯誤:持續性錯誤 (Failing Test) 和偶發性錯誤 (Flaking Test)。

Failing Test 和 Flaking Test 會分別以紅色和紫色呈現

Failing Test 只要看有持續發生錯誤的測試,那就沒錯了。

持續性錯誤的測試

Flaking Test 比較不好抓,但這會有很多原因,可能會是 infra issue 或潛在 race condition。

偶發性錯誤的測試
用 Spyglass 看錯誤詳細訊息

這時候就需要透過 Triage Tool 交叉比對,看看其他 job 的測試是不是有類似原因。

Triage Tool 比對錯誤訊息

確認錯誤後,根據 SIG Owner 和 Test Owner 通知相關人員,mention 出 SIG Lead 來判斷。

不過,回報流程很複雜,Release Signal 會先檢查是否已有對應的 issue;若尚未存在,便會建立新的 issue 以利後續追蹤與協作。

issue 內容通常會描述異常發生的 dashboard、對應的測試項目、首次出現的時間點,以及實際觀察到的錯誤訊息,並在可能的情況下補充初步的背景或推測原因,讓後續接手 triage 的人能快速理解問題脈絡。實際撰寫方式可參考像是 kubernetes/kubernetes#132397 這類範例。

Source: https://github.com/kubernetes/kubernetes/issues/132397

當確認 CI 訊號需要進一步關注時,Release Signal 會先將狀況回報至 #release-ci-signal。這個頻道作為 Release Team 集中追蹤訊號的入口,訊息通常會包含錯誤類型、具體錯誤訊息、相關的 Prow job,以及目前已知的 triage 狀態,確保其他 SIG 成員能快速掌握背景。

Source: https://kubernetes.slack.com/archives/CN0K3TE2C/p1750313809531309

由於並非所有 SIG 成員都會即時關注 #release-ci-signal,在確認影響範圍後,Release Signal 也需要將相同訊息轉發至對應的 SIG Slack 頻道,並標記 SIG Lead 或相關 maintainer。以上述 issue 為例,錯誤與 node 行為相關,因此會同步回報至 #sig-node,確保負責該領域的 SIG 成員能及早介入處理。

Source: https://kubernetes.slack.com/archives/C0BP8PW9G/p1750313932494759

這也是 Release Signal 工作最重的一環,因為回報流程非常繁瑣。這次 release 中我們透過 SignalHound 來簡化這個流程,關於這個工具的由來,後面會再提到。

3. 給 Branch Management 切版訊號 Go / No-Go
#

追蹤這些 Failing Test 和 Flaking Test 後,就要詢問 SIG 或相關成員這會不會是發佈阻礙 (release blocker)。

這個 cycle 期間會有數次的切版,包含 alpha、beta、rc 等,每次要切版的前 3 天,就要傳訊息到 #release-management 確認能不能切版。基本上需要等對應的 SIG 成員或 lead 出來回覆是否為 release blocker。

Source: https://kubernetes.slack.com/archives/CJH2GBF7Y/p1750646006158519

4. Bug Triage
#

註記

以前有 Bug Triage 組,但現在已經跟 CI Signal 合併成為 Release Signal。

大約在程式碼凍結 (Code Freeze) 和測試凍結 (Test Freeze) 前 4~5 週,預計要在這次 release 解決的 Issue 或 PR 都會打上 milestone。需要跟該 Issue 相關人員和 PR 作者提醒「我們會在 X 月 X 日 code freeze,請把握時間把相關 PR 打上 /lgtm/approve,如果有需要其他協助請跟我們聯繫。」

留言提醒 PR 要在 Code Freeze 合併

這期間,也會有其他新的 issue 和 PR 加入 milestone,這部分就要由 Release Signal Lead 去定期確認,確保每個 milestone 的 issue 和 PR 都有被 shadow 追蹤。

然後 Code Freeze 前 3 ~ 4 天要再傳一次訊息提醒那些有該版本的 milestone 還沒關閉的 Issue 和尚未處理的 PR(不包含已經有 /lgtm/approve),說「已經剩下 X 天就要 code freeze,如果需要延後請發送 Exception 請求」

最後提醒的 PR 合併

Exception 請求會傳到 Release Lead 團隊,同時該請求的 SIG Lead 也要附議,Release Lead 團隊會評估時程、進度等,給予 APPROVINGREJECTING

Exception 請求討論

這時候就有個問題會出現:

如果今天有很重要錯誤要修正,還會需要附上 Exception 請求嗎?

不用,程式碼凍結後,PR 除了原本 /lgtm/approve 標籤外,另外需要 milestone 才能合併,這部分 Release Lead 和其他的 sub-team lead 都有加 milestone 權限(或其他 SIG Lead,不過通常會尊重 Release Team 決定)。

我通常還是會看一下 PR 確定是功能修正或測試修復,沒問題就會打上標籤。

加入 Milestone v1.35 讓 PR 合併

5. 回報 Release Team 同步會議更新
#

每週三會有 Release Team 會議,分為 APAC 時區和 EMEA 時區,以台灣時間來說,APAC 時區會在下午,EMEA 時區會在半夜。

因為涉及到跨時區的關係,所以一定要使用行事曆訂閱,以免錯過會議更新。

大約到第 10 週後,加開 Burndown meeting,分別是星期一和星期五,一樣會有 APAC 時區和 EMEA 時區。最後幾週會有 Slack 非同步更新,全部就在 Slack Channel 回覆。


這樣看下來,工作內容確實很多,但不會是只有自己一個人,別忘記還有其他國家、時區的工作夥伴,所以不需要擔心工作會做不完。

從 shadow 成為 sub-team lead 的轉變
#

在 1.34 release 接近尾聲時,我開始以「下一版 Release Signal Lead」的角色參與交接,也因此第一次從 sub-team lead 的視角,完整理解 shadow 選擇所涉及的流程。

開始選擇 shadow
#

每一個 release cycle,每一組的 sub-team 都會收到大量的 shadow 申請。各 sub-team lead 會依照工作型態與需求,提出對應的 shadow 名單。

名單彙整後,會由 Release Lead 與 Subproject Owner 進行審閱,確保每位 shadow 在同一個 release 週期中只隸屬於一個 sub-team,並同時考量時區分布與實際值班需求。由於 Release Team 的同步會議會有 APAC 與 EMEA 時區,加上 Release Signal 的工作本質需要持續關注 dashboard 與狀態變化,這些條件都會影響最終的成員配置結果。

確認沒問題後就會由 sub-team lead 發出 Slack 私訊通知,並且準備簡報介紹這組工作內容等,後續協助 shadow onboarding 的流程。

選定成員後,我讓有經驗的 shadow 去帶領新進的 shadow,有經驗的 shadow 可以獲得教學經驗,未來更容易接手 sub-team lead 的工作。

與 SIG Release 討論專案捐贈
#

前面提到回報 CI 訊號的流程非常繁瑣,v1.35 的 shadow Amim 在這個 cycle 開發了 SignalHound 來簡化這個流程。當工具逐漸成熟後,我跟 Release Lead 討論將它捐贈到 kubernetes-sigs 組織的可能性,也跟 SIG Release 的 Lead 溝通,最終讓它從個人的 PoC 變成社群共同維護的子專案。

Amim 有能力寫出工具,但要讓工具進入社群,需要有人在流程面協助推進,而這正是 lead 該做的事。

讓 shadow 站上舞台
#

另一個我刻意安排的事情是,讓 shadow 輪流在 Release Team 週會上報告 CI signal update。以前這件事通常由 lead 自己做,但我希望每位 shadow 都有機會練習對外溝通、面對其他 sub-team lead 和 Release Lead 回答問題。

實際做法是依照時區排班,每人負責一到兩週的會議報告,有經驗的 shadow 先上,新進的 shadow 觀摩幾次後再嘗試接手。報告前我會先跟他們檢查內容,確保資訊正確,但不會幫他們講。

不管是讓資深 shadow 帶人、推動工具捐贈、還是安排輪流報告,目的都一樣:sub-team lead 的工作不是自己把事情做完,而是讓每一位成員都有成長的機會。

交接給下一位 sub-team lead
#

Release 接近尾聲的幾週前,sub-team lead 會開始與 shadow 討論下一個 release cycle 的參與方向。常見的選項包含:

  • 繼續留在原本的 sub-team
  • 承接該組的 lead 角色
  • 參與其他的 sub-team shadow
  • 加入其他的 SIG 貢獻

整理每個 shadow 回饋後,與 Release Lead 和 Subproject Owner 討論後,提名出下一版合適的 sub-team lead 人選,並完成交接。

推薦誰來當 Release Shadow
#

Shadow Program 其實就是給新人參與機會,我認為每個想要嘗試貢獻 Kubernetes 但不知道該如何下手,就可以從這裡開始,尤其是學生。

不過學生就需要注意時間 commitment,就 Release Signal 來說,可以事先填寫各自有薪假 (PTO) 或低活躍度的時間,給 sub-team lead 安排協調。

以我來說,小公司能學習的內容很有限,程式架構或測試不一定會像 Kubernetes 很複雜,從這些回報 E2E 錯誤和參與過程中,觀摩大型專案如何維護。

未來面對有新的工作機會,就算實務上沒有經驗,但還是可以根據在 Kubernetes 社群貢獻的觀察,有條理的描述現象和規劃,面試過程中絕對是有加分效益。

後記
#

最後非常感謝 v1.35 跟我一起奮鬥的 Release Signal 成員(依照英文名字典序排列):Amim KnabbenBen PetersenKeisuke IshigamiMuhammad Adil GhaffarPrajyot ParabYun Chi Shih

這些內容還只是介紹 Release Team,裡面還有其他有趣的故事呢!

希望這篇貼文以後,能讓大家了解大型專案的 Release Team 在做什麼,也期待未來台灣人能多參與國際開源技術社群。

相關文章