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 的更詳細外觀為何?這是一個範例

  1. 名為 SampleDB 的自訂資源,您可以將其配置到叢集中。
  2. Deployment,確保 Pod 正在執行,其中包含 Operator 的控制器部分。
  3. Operator 程式碼的容器映像。
  4. 控制器程式碼,查詢控制平面以找出已配置哪些 SampleDB 資源。
  5. Operator 的核心是程式碼,告訴 API 伺服器如何使現實符合已配置的資源。
    • 如果您新增一個新的 SampleDB,Operator 會設定 PersistentVolumeClaims 以提供持久的資料庫儲存空間、StatefulSet 以執行 SampleDB,以及 Job 以處理初始配置。
    • 如果您刪除它,Operator 會建立快照,然後確保也移除 StatefulSet 和 Volume。
  6. Operator 也管理定期資料庫備份。對於每個 SampleDB 資源,Operator 會判斷何時建立可以連線到資料庫並進行備份的 Pod。這些 Pod 將依賴 ConfigMap 和/或 Secret,其中包含資料庫連線詳細資訊和憑證。
  7. 由於 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。

下一步

此頁面上的項目參考了第三方產品或專案,這些產品或專案提供 Kubernetes 所需的功能。Kubernetes 專案作者不對這些第三方產品或專案負責。請參閱 CNCF 網站指南以取得更多詳細資訊。

您應該在提出新增額外第三方連結的變更之前,閱讀內容指南

上次修改時間:2024 年 7 月 16 日下午 2:32 PST:更新 Java Operator SDK 的 GitHub 儲存庫 URL (3c7af1e126)