Kubernetes Operator模式

2022-05-27 09:45 更新

Operator 模式

Operator 是 Kubernetes 的擴(kuò)展軟件,它利用 定制資源 管理應(yīng)用及其組件。 Operator 遵循 Kubernetes 的理念,特別是在控制器 方面。

初衷

Operator 模式旨在捕獲(正在管理一個(gè)或一組服務(wù)的)運(yùn)維人員的關(guān)鍵目標(biāo)。 負(fù)責(zé)特定應(yīng)用和 service 的運(yùn)維人員,在系統(tǒng)應(yīng)該如何運(yùn)行、如何部署以及出現(xiàn)問題時(shí)如何處理等方面有深入的了解。

在 Kubernetes 上運(yùn)行工作負(fù)載的人們都喜歡通過自動(dòng)化來處理重復(fù)的任務(wù)。 Operator 模式會(huì)封裝你編寫的(Kubernetes 本身提供功能以外的)任務(wù)自動(dòng)化代碼。

Kubernetes 上的 Operator

Kubernetes 為自動(dòng)化而生。無需任何修改,你即可以從 Kubernetes 核心中獲得許多內(nèi)置的自動(dòng)化功能。 你可以使用 Kubernetes 自動(dòng)化部署和運(yùn)行工作負(fù)載, 甚至 可以自動(dòng)化 Kubernetes 自身。

Kubernetes 的 Operator 模式概念允許你在不修改 Kubernetes 自身代碼的情況下,通過為一個(gè)或多個(gè)自定義資源關(guān)聯(lián)控制器 來擴(kuò)展集群的能力。 Operator 是 Kubernetes API 的客戶端,充當(dāng) 自定義資源 的控制器。

Operator 示例

使用 Operator 可以自動(dòng)化的事情包括:

  • 按需部署應(yīng)用
  • 獲取/還原應(yīng)用狀態(tài)的備份
  • 處理應(yīng)用代碼的升級(jí)以及相關(guān)改動(dòng)。例如,數(shù)據(jù)庫 schema 或額外的配置設(shè)置
  • 發(fā)布一個(gè) service,要求不支持 Kubernetes API 的應(yīng)用也能發(fā)現(xiàn)它
  • 模擬整個(gè)或部分集群中的故障以測試其穩(wěn)定性
  • 在沒有內(nèi)部成員選舉程序的情況下,為分布式應(yīng)用選擇首領(lǐng)角色

想要更詳細(xì)的了解 Operator?下面是一個(gè)示例:

  1. 有一個(gè)名為 SampleDB 的自定義資源,你可以將其配置到集群中。
  2. 一個(gè)包含 Operator 控制器部分的 Deployment,用來確保 Pod 處于運(yùn)行狀態(tài)。
  3. Operator 代碼的容器鏡像。
  4. 控制器代碼,負(fù)責(zé)查詢控制平面以找出已配置的 SampleDB 資源。
  5. Operator 的核心是告訴 API 服務(wù)器,如何使現(xiàn)實(shí)與代碼里配置的資源匹配。
    • 如果添加新的 SampleDB,Operator 將設(shè)置 PersistentVolumeClaims 以提供 持久化的數(shù)據(jù)庫存儲(chǔ),設(shè)置 StatefulSet 以運(yùn)行 SampleDB,并設(shè)置 Job 來處理初始配置。
    • 如果你刪除它,Operator 將建立快照,然后確保 StatefulSet 和 Volume 已被刪除。
  6. Operator 也可以管理常規(guī)數(shù)據(jù)庫的備份。對(duì)于每個(gè) SampleDB 資源,Operator 會(huì)確定何時(shí)創(chuàng)建(可以連接到數(shù)據(jù)庫并進(jìn)行備份的)Pod。這些 Pod 將依賴于 ConfigMap 和/或具有數(shù)據(jù)庫連接詳細(xì)信息和憑據(jù)的 Secret。
  7. 由于 Operator 旨在為其管理的資源提供強(qiáng)大的自動(dòng)化功能,因此它還需要一些 額外的支持性代碼。在這個(gè)示例中,代碼將檢查數(shù)據(jù)庫是否正運(yùn)行在舊版本上, 如果是,則創(chuàng)建 Job 對(duì)象為你升級(jí)數(shù)據(jù)庫。

部署 Operator 

部署 Operator 最常見的方法是將自定義資源及其關(guān)聯(lián)的控制器添加到你的集群中。 跟運(yùn)行容器化應(yīng)用一樣,控制器通常會(huì)運(yùn)行在 控制平面 之外。 例如,你可以在集群中將控制器作為 Deployment 運(yùn)行。

使用 Operator

部署 Operator 后,你可以對(duì) Operator 所使用的資源執(zhí)行添加、修改或刪除操作。 按照上面的示例,你將為 Operator 本身建立一個(gè) Deployment,然后:

kubectl get SampleDB                   # 查找所配置的數(shù)據(jù)庫

kubectl edit SampleDB/example-database # 手動(dòng)修改某些配置

可以了!Operator 會(huì)負(fù)責(zé)應(yīng)用所作的更改并保持現(xiàn)有服務(wù)處于良好的狀態(tài)。

編寫你自己的 Operator

如果生態(tài)系統(tǒng)中沒可以實(shí)現(xiàn)你目標(biāo)的 Operator,你可以自己編寫代碼。

你還可以使用任何支持 Kubernetes API 客戶端 的語言或運(yùn)行時(shí)來實(shí)現(xiàn) Operator(即控制器)。

以下是一些庫和工具,你可用于編寫自己的云原生 Operator。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)