本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

介紹 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”控制器就像以下步驟一樣簡單:

  1. 使用 kubebuilder init 建立一個專案
  2. 使用 kubebuilder create api 定義一個新的 API
  3. 使用 make install & make run 構建並執行提供的 main 函式

這將為使用者搭建 API 和控制器以供修改,以及搭建整合測試、RBAC 規則、Dockerfiles、Makefiles 等。在向專案新增其實現後,使用者透過以下方式建立用於釋出其 API 的工件:

  1. 使用 make docker-buildmake docker-push 命令從提供的 Dockerfile 構建並推送容器映象
  2. 使用 make deploy 命令部署 API

無論您已經是控制器愛好者,還是隻想了解這個熱門話題,請檢視 kubebuilder 倉庫或在 kubebuilder 手冊中檢視一個示例,瞭解構建控制器有多麼簡單易行。

參與其中

Kubebuilder 是 SIG API Machinery 下的一個專案,由來自 Google、Red Hat、VMware、華為等眾多公司的貢獻者積極開發。透過以下渠道向我們提供反饋,參與進來: