本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
介紹 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 規則、Dockerfiles、Makefiles 等。在向專案新增其實現後,使用者透過以下方式建立用於釋出其 API 的工件:
- 使用
make docker-build
和make docker-push
命令從提供的 Dockerfile 構建並推送容器映象 - 使用
make deploy
命令部署 API
無論您已經是控制器愛好者,還是隻想了解這個熱門話題,請檢視 kubebuilder 倉庫或在 kubebuilder 手冊中檢視一個示例,瞭解構建控制器有多麼簡單易行。
參與其中
Kubebuilder 是 SIG API Machinery 下的一個專案,由來自 Google、Red Hat、VMware、華為等眾多公司的貢獻者積極開發。透過以下渠道向我們提供反饋,參與進來:
- Kubebuilder Slack 聊天室
- SIG 郵件列表
- GitHub Issues
- 在 kubebuilder 倉庫中傳送拉取請求