Operator 模式
Operator 是 Kubernetes 的軟體擴充功能,它使用自訂資源來管理應用程式及其元件。Operator 遵循 Kubernetes 原則,特別是控制迴圈。
動機
Operator 模式旨在捕捉人類 Operator 管理服務或一組服務的關鍵目標。負責特定應用程式與服務的人類 Operator 對系統應如何運作、如何部署以及出現問題時如何反應有深入的了解。
在 Kubernetes 上執行工作負載的人員通常喜歡使用自動化來處理重複性任務。Operator 模式捕捉了您如何編寫程式碼來自動化 Kubernetes 本身提供的任務以外的工作。
Kubernetes 中的 Operator
Kubernetes 旨在實現自動化。開箱即用,您可以從 Kubernetes 核心獲得許多內建的自動化功能。您可以使用 Kubernetes 自動化部署與執行工作負載,而且您可以自動化 Kubernetes 執行這些操作的方式。
Kubernetes 的Operator 模式概念讓您無需修改 Kubernetes 本身的程式碼,即可擴展叢集的行為,方法是將控制器連結到一個或多個自訂資源。Operator 是 Kubernetes API 的用戶端,作為自訂資源的控制器。
Operator 範例
您可以使用 Operator 自動執行的一些事項包括
- 隨需部署應用程式
- 取得和還原該應用程式狀態的備份
- 處理應用程式程式碼的升級,以及相關的變更,例如資料庫結構描述或額外的組態設定
- 發布 Service 給不支援 Kubernetes API 以探索它們的應用程式
- 模擬叢集全部或部分故障,以測試其彈性
- 為分散式應用程式選擇領導者,而無需內部成員選舉程序
Operator 的更詳細外觀為何?這是一個範例
- 名為 SampleDB 的自訂資源,您可以將其配置到叢集中。
- Deployment,確保 Pod 正在執行,其中包含 Operator 的控制器部分。
- Operator 程式碼的容器映像。
- 控制器程式碼,查詢控制平面以找出已配置哪些 SampleDB 資源。
- Operator 的核心是程式碼,告訴 API 伺服器如何使現實符合已配置的資源。
- 如果您新增一個新的 SampleDB,Operator 會設定 PersistentVolumeClaims 以提供持久的資料庫儲存空間、StatefulSet 以執行 SampleDB,以及 Job 以處理初始配置。
- 如果您刪除它,Operator 會建立快照,然後確保也移除 StatefulSet 和 Volume。
- Operator 也管理定期資料庫備份。對於每個 SampleDB 資源,Operator 會判斷何時建立可以連線到資料庫並進行備份的 Pod。這些 Pod 將依賴 ConfigMap 和/或 Secret,其中包含資料庫連線詳細資訊和憑證。
- 由於 Operator 的目標是為其管理的資源提供強大的自動化,因此會有額外的支援程式碼。在此範例中,程式碼會檢查資料庫是否正在執行舊版本,如果是,則建立 Job 物件來為您升級它。
部署 Operator
部署 Operator 最常見的方式是將自訂資源定義及其相關的控制器新增到您的叢集。控制器通常會在控制平面之外執行,就像您執行任何容器化應用程式一樣。例如,您可以在叢集中以 Deployment 形式執行控制器。
使用 Operator
一旦您部署了 Operator,您就可以透過新增、修改或刪除 Operator 使用的資源種類來使用它。依照上面的範例,您將為 Operator 本身設定 Deployment,然後
kubectl get SampleDB # find configured databases
kubectl edit SampleDB/example-database # manually change some settings
…就是這樣!Operator 將負責套用變更以及保持現有服務的良好狀態。
編寫您自己的 Operator
如果生態系統中沒有實作您想要行為的 Operator,您可以編寫自己的 Operator。
您也可以使用任何可以作為 Kubernetes API 用戶端的語言/執行階段來實作 Operator(也就是控制器)。
以下是一些您可以使用的程式庫和工具,用於編寫您自己的雲原生 Operator。
- Charmed Operator Framework
- Java Operator SDK
- Kopf (Kubernetes Operator Pythonic Framework)
- kube-rs (Rust)
- kubebuilder
- KubeOps (.NET operator SDK)
- Mast
- Metacontroller 以及您自行實作的 WebHooks
- Operator Framework
- shell-operator
下一步
- 閱讀 CNCF Operator 白皮書。
- 深入瞭解自訂資源
- 在 OperatorHub.io 上尋找現成的 Operator,以符合您的使用案例
- 發布您的 Operator,供其他人使用
- 閱讀 CoreOS 的原始文章,其中介紹了 Operator 模式(這是原始文章的封存版本)。
- 閱讀 Google Cloud 關於建構 Operator 最佳實務的文章
此頁面上的項目參考了第三方產品或專案,這些產品或專案提供 Kubernetes 所需的功能。Kubernetes 專案作者不對這些第三方產品或專案負責。請參閱 CNCF 網站指南以取得更多詳細資訊。
您應該在提出新增額外第三方連結的變更之前,閱讀內容指南。