LFX Mentorship - Kubespray 實習心得 - 從 user 到 contributor,再到 reviewer
用 Google 查了一下 LFX Mentorship 相關紀錄,臺灣好像沒人寫過實習心得,由我來打頭陣寫出第一篇吧!
本篇文章為繁體中文版本,英文版本請點擊這裡。
This article is in Traditional Chinese. For the English version, please click here.
Kubespray 是什麼
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
可以設定 calico
或 cilium
等,就會根據 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。
成為 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 問題失敗。只要檢查沒通過,就算專案維護者給了 lgtm
和 approve
,k8s-ci-robot
依然不會合併。
你覺得上面敘述太複雜嗎?沒關係,我做了一張 meme 來了解來龍去脈:
經由 ant31 的提點,最後就像圖片所述,只能先修好 CentOS 7 的 CI (PR #11360),做 cherry-pick 不會因為 CentOS 7 而失敗,最後才能移除 CentOS 7 的測試,如果這步驟沒有完成的話,後續 release-2.24
和 release-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,對我來說成就感非常大!
獲邀成為 Kubespray 的 reviewer
這段實習前後我 review 不少 PR,不過 week 9 快要結束的時候 (8/16),就收到 mentor 正式邀請,問我有沒有興趣成為 reviewer。
我也很樂意接下這份工作 (PR #11453),繼續協助 review 其他貢獻者的 PR!
實習心得
參與這次的 LFX Mentorship 計劃,為我提供了寶貴的成長機會。首先,我要感謝我的導師 Kay Yan (yankay)、Mohamed Zaian (mzaian) 以及其他維護者 Antoine Legrand (ant31),他們不僅給予我自由發揮創意的空間,還在關鍵時刻指導我如何修補其他分支的 CI。能夠在開源社群中與這些專家們合作,對我來說是極大的榮幸。除了累積實際經驗之外,我也擴展了技術視野,並對未來的職涯規劃充滿信心。這次的 Mentorship 雖然結束,但我的貢獻不會停止,未來我將持續投入維護 Kubespray 的工作。