Operator 模式

Operator 是 Kubernetes 的軟體擴充套件,它利用自定義資源來管理應用程式及其元件。Operator 遵循 Kubernetes 原則,特別是控制迴圈

動機

“Operator 模式”旨在捕捉人類操作員管理服務或一組服務時的關鍵目標。負責特定應用程式和服務的人類操作員對系統應如何執行、如何部署以及出現問題時如何響應都有深入的瞭解。

在 Kubernetes 上執行工作負載的人通常喜歡使用自動化來處理重複性任務。Operator 模式捕捉瞭如何編寫程式碼來自動化超出 Kubernetes 本身提供的任務。

Kubernetes 中的 Operator

Kubernetes 旨在實現自動化。開箱即用,你可以從 Kubernetes 的核心獲得大量內建自動化。你可以使用 Kubernetes 自動化部署和執行工作負載,並且可以自動化 Kubernetes 如何做到這一點。

Kubernetes 的Operator 模式概念允許你透過將控制器連結到一個或多個自定義資源來擴充套件叢集的行為,而無需修改 Kubernetes 本身的程式碼。Operator 是 Kubernetes API 的客戶端,它們充當自定義資源的控制器。

Operator 示例

你可以使用 Operator 自動化的事情包括:

  • 按需部署應用程式
  • 備份和恢復應用程式狀態
  • 處理應用程式程式碼升級以及相關更改,例如資料庫模式或額外配置設定
  • 向不支援 Kubernetes API 的應用程式釋出服務以發現它們
  • 模擬叢集全部或部分故障以測試其彈性
  • 為沒有內部成員選舉過程的分散式應用程式選擇領導者

更詳細的 Operator 示例是什麼樣的?這是一個示例:

  1. 一個名為 SampleDB 的自定義資源,你可以將其配置到叢集中。
  2. 一個 Deployment,它確保正在執行的 Pod 包含 Operator 的控制器部分。
  3. Operator 程式碼的容器映象。
  4. 控制器程式碼,它查詢控制平面以找出配置了哪些 SampleDB 資源。
  5. Operator 的核心是程式碼,用於告訴 API 伺服器如何使現實與配置的資源匹配。
    • 如果你添加了一個新的 SampleDB,Operator 會設定 PersistentVolumeClaim 以提供持久資料庫儲存,一個 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 網站指南

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

最後修改時間:2025 年 7 月 16 日下午 4:16 PST:docs(operators): 更新 KubeOps 的 URI (0582e5805a)