本篇文章已超過一年。較舊的文章可能包含過時的內容。請確認頁面上的資訊自發布以來是否已變得不正確。
Kubebuilder 簡介:用於使用 CRD 建置 Kubernetes API 的 SDK
讓我們能讓應用程式 (如 MySQL、Spark 和 Cassandra) 像 Kubernetes Deployments 和 Pods 一樣自我管理嗎? 我們該如何將這些應用程式配置為它們自己的第一級 API,而不是 StatefulSets、Services 和 ConfigMaps 的集合?
我們一直在開發一個解決方案,並且很高興介紹 kubebuilder,一個全面的開發套件,用於使用 CRD 快速建構和發布 Kubernetes API 和控制器。 Kubebuilder 為專案和 API 定義建立基礎,並建構於 controller-runtime 程式庫之上。
為什麼選擇 Kubebuilder 和 Kubernetes API?
應用程式和叢集資源通常需要一些操作工作 - 無論是將失敗的副本替換為新的副本,還是在重新分片資料時擴展副本計數。 執行 MySQL 應用程式可能需要排程備份、在擴展後重新配置副本、設定失敗偵測和修復等等。
透過 Kubernetes API 模型,管理邏輯直接嵌入到應用程式特定的 Kubernetes API 中,例如「MySQL」API。 然後,使用者可以使用 kubectl 等工具,透過 YAML 配置以宣告方式管理應用程式,就像他們對 Kubernetes 物件所做的那樣。 這種方法稱為應用程式控制器,也稱為 Operator。 控制器是一種強大的技術,支援核心 Kubernetes API,除了應用程式之外,還可用於建構多種類型的解決方案;例如自動擴展器、工作負載 API、配置 API、CI/CD 系統等等。
然而,雖然開拓者有可能在原始 API 機制之上建構新的控制器,但這樣做一直是一種 DIY「從頭開始」的體驗,需要開發人員學習關於 Kubernetes 程式庫如何實作的低階細節、手寫樣板程式碼,並為整合測試、RBAC 配置、文件等等包裝他們自己的解決方案。 Kubebuilder 透過應用從建構核心 Kubernetes API 中學到的經驗,使這種體驗變得簡單容易。
開始建構應用程式控制器和 Kubernetes API
透過為建立控制器和 Kubernetes API 提供有主見且結構化的解決方案,開發人員可以獲得開箱即用的工作體驗,該體驗使用從開發核心 Kubernetes API 中學到的經驗和最佳實踐。 使用 kubebuilder
建立新的「Hello World」控制器非常簡單,只需:
- 使用
kubebuilder init
建立專案 - 使用
kubebuilder create api
定義新的 API - 使用
make install & make run
建構並執行提供的 main 函數
這將為使用者修改 API 和控制器建立基礎,並為整合測試、RBAC 規則、Dockerfile、Makefile 等建立基礎。 在將他們的實作新增到專案後,使用者透過以下方式建立發布其 API 的成品:
- 使用
make docker-build
和make docker-push
命令,從提供的 Dockerfile 建構並推送容器映像檔 - 使用
make deploy
命令部署 API
無論您已經是控制器愛好者,還是只是想了解熱門話題,請查看 kubebuilder repo 或查看 kubebuilder book 中的範例,以了解建構控制器有多麼簡單容易。
參與貢獻
Kubebuilder 是 SIG API Machinery 下的一個專案,並且正在由來自許多公司 (如 Google、Red Hat、VMware、Huawei 等) 的貢獻者積極開發中。 透過這些管道向我們提供回饋來參與貢獻:
- Kubebuilder Slack 聊天室
- SIG 郵寄清單
- GitHub 議題
- 在 kubebuilder repo 中發送 Pull Request