LFX Mentorship - Kubespray 實習心得 - 從 user 到 contributor,再到 reviewer

用 Google 查了一下 LFX Mentorship 相關紀錄,臺灣好像沒人寫過實習心得,由我來打頭陣寫出第一篇吧!

本篇文章為繁體中文版本,英文版本請點擊這裡
This article is in Traditional Chinese. For the English version, please click here.

Kubespray 是什麼

Kubespray Logo

Kubespray 是 Kubernetes 生態系下的一個開源項目,它提供了一組 Ansible 腳本、角色和變數,用於部署高可用性和適用於正式環境的 Kubernetes 叢集。Kubespray 支援多種雲端供應商及裸機安裝,為不同的部署環境提供靈活性和可擴展性。自動化許多複雜的任務(包括網路、儲存和配置管理)來簡化 Kubernetes 叢集的安裝和管理過程。Kubespray 提供像滾動升級、冪等性以及支援多種擴充元件等功能,因此廣泛用於 IT 管理員和 DevOps 工程師,以高效地部署和維護 Kubernetes 叢集。

專案網站:https://kubespray.io
GitHub:https://github.com/kubernetes-sigs/kubespray

為何會接觸到 Kubespray?

我還在擔任公司工讀生的時候(大約是剛學校實習結束沒多久),要來練習建置地端 Kubernetes,如果用 Kubeadm 手動裝一遍,其實很耗時間,很多安裝細節需要注意。

Kubespray 就已經寫好安裝 Kubernetes 的 Ansible 腳本,只要設定好 inventory (主機列表) 和 group_vars 就自動執行想要的安裝方式。例如 kube_network_plugin 可以設定 calicocilium 等,就會根據 kube_network_plugin 安裝指定的 CNI。(當然前提是 Kubespray 有撰寫支援,如果沒有想要的 CNI,可以自行撰寫貢獻或開 feature request 等待有緣人去寫。)

就在我熟悉 Kubespray 一段時間後,再加上我對於 IT/SRE 和 K8s 監控有些心得,於是就寫了《關於我怎麼把一年內學到的新手 IT/SRE 濃縮到 30 天筆記這檔事》參與「iThome 鐵人賽 2022」,當時以 Kubespray 最新版本 (v2.19.1) 去撰寫安裝流程,包含新增節點、刪除節點等操作,論 iThome 點閱數量,Kubespray 還是我第二名的點閱呢!(第一名為介紹 Kube Prometheus Stack 安裝方式。)最後很幸運獲得 DevOps 組的佳作。

雖然後面兩年都沒有再撰寫相關文章,一方面自己忙於碩士論文,要撰寫對我來說能及格發出去的文章實在耗費心力無法支撐,不過還是有在持續使用專案。

開始 Kubespray 貢獻

這情況持續到 LFX Mentorship 2024 Term 1 申請失利,於是就開始練習在各個專案貢獻,當然這也包含我翻到 Kubespray 能實作的 issue,於是就發送在 Kubespray 的第一個 PR (pull request),完成這功能對我來說不算難事,順利合併到主分支。

4 月底正好碰上 Ubuntu 24.04 剛釋出,我在 5 月初嘗試發送 PR 讓 Kubespray 支援最新版本的 Ubuntu,也學習到 Vagrant 如何使用。當時 CI 測試沒有通過,經過一番折騰後,維護者針對 Ubuntu 24.04 進行了映像檔的建置,才成功通過 CI 測試。

剛好碰上 Kubespray 在 LFX Mentorship 2024 Term 2 招募 mentee,於是我再次嘗試申請,憑藉過去在文章上的撰寫和近期的貢獻,很幸運這次有錄取成功,順利成為 LFX Mentorship 2024 Term 2 的 mentee。

收到 LFX Mentorship 2024 Term 2 - Kubespray 的 Accepted 信件

成為 mentee 後的工作

初步跟 mentor Kay Yan (yankay) 稍微聊過後,mentorship 主要成果需要繳交一些 PR,mentor 可以在 PR 中跟 mentee 互動,只要在期中和期末讓 mentor 繳交連結給 CNCF 審核就可以了。一方面我自己過去也有相關經驗,對我來說,這不算太難的工作。

這專案中,我的貢獻包括新增功能(e.g. Gateway API 安裝)、修復 CI 問題(e.g. CentOS 7 EOL (End Of Life) 問題)、更新應用程式版本(e.g. OpenStack Cloud Controller Manager、Cert Manager 和 Kubernetes 等)、審查其他貢獻者的 PR,並回答社群中的問題。

修復 CI 和 CentOS 7 EOL 問題

其中,最難的問題是遇到 CI 測試和 CentOS 7 EOL 問題,當時 ant31 在重構 CI 測試的邏輯,更新主分支但忘記 cherry-pick 給其他版本的分支,再加上 CentOS 7 因為 EOL 問題要移除測試,需要 cherry-pick「重構 CI 邏輯」的 PR,才能移除 CentOS 7 測試。但就算 cherry-pick 成功,又會因為 CentOS 7 EOL 問題失敗。只要檢查沒通過,就算專案維護者給了 lgtmapprovek8s-ci-robot 依然不會合併。

你覺得上面敘述太複雜嗎?沒關係,我做了一張 meme 來了解來龍去脈:

CentOS 7 EOL 導致 CI 流程問題

經由 ant31 的提點,最後就像圖片所述,只能先修好 CentOS 7 的 CI (PR #11360),做 cherry-pick 不會因為 CentOS 7 而失敗,最後才能移除 CentOS 7 的測試,如果這步驟沒有完成的話,後續 release-2.24release-2.25 基本上就無法更新了。

協助維護者 debug 應用程式問題

PR #11250 只是單純更新 Node Feature Discovery (NFD) 的版本(也包含更新 CRD 和 ClusterRole 等),但為何會 CI 測試會失敗?於是我開始細查原因。

打開 Vagrant 用 Kubespray 跑完安裝流程後,觀察了 NFD 的 deployment,利用 describe 命令查看,Liveness Probe 檢查失敗 (沒有 /usr/bin/grpc_health_probe 的應用程式),回去翻 NFD 的安裝內容,已經改成用 K8s 內建的 gRPC 檢查。

維護者 mzaian 修改完成後,也順利通過 CI,對我來說成就感非常大!

https://github.com/kubernetes-sigs/kubespray/pull/11250#issuecomment-2296419555

獲邀成為 Kubespray 的 reviewer

這段實習前後我 review 不少 PR,不過 week 9 快要結束的時候 (8/16),就收到 mentor 正式邀請,問我有沒有興趣成為 reviewer。

正式邀請成為 Kubespray 的 reviewer

我也很樂意接下這份工作 (PR #11453),繼續協助 review 其他貢獻者的 PR!

實習心得

參與這次的 LFX Mentorship 計劃,為我提供了寶貴的成長機會。首先,我要感謝我的導師 Kay Yan (yankay)Mohamed Zaian (mzaian) 以及其他維護者 Antoine Legrand (ant31),他們不僅給予我自由發揮創意的空間,還在關鍵時刻指導我如何修補其他分支的 CI。能夠在開源社群中與這些專家們合作,對我來說是極大的榮幸。除了累積實際經驗之外,我也擴展了技術視野,並對未來的職涯規劃充滿信心。這次的 Mentorship 雖然結束,但我的貢獻不會停止,未來我將持續投入維護 Kubespray 的工作。


LFX Mentorship - Kubespray 實習心得 - 從 user 到 contributor,再到 reviewer
https://blog.yangjerry.tw/lfx-mentorship-kubespray/
作者
Jerry Yang
發布於
2024年9月9日
許可協議