Kubernetes Operator可以做什么?
Kubernetes可以自動創(chuàng)建復(fù)雜的云基礎(chǔ)架構(gòu),以簡化管理云上部署的過程。
盡管Kubernetes提供了許多工具,但仍在努力使云基礎(chǔ)架構(gòu)管理更具可伸縮性和自動化。Kubernetes Operator是一種封裝、部署和管理 Kubernetes 應(yīng)用的方法, 可擴(kuò)展 Kubernetes API 的功能,為Kubernetes 用戶自動化創(chuàng)建、配置和管理復(fù)雜應(yīng)用的實(shí)例 ,而不必每次都依賴手動輸入。
了解Kubernetes Operators
Operator 是 Kubernetes 的擴(kuò)展軟件,它利用 定制資源 管理應(yīng)用及其組件。Operator 遵循 Kubernetes 的理念,特別是在控制器 方面。
Kubernetes Operators是業(yè)務(wù)流程框架。它是一種工具,使你幾乎不需要人工就可以編排和維護(hù)云基礎(chǔ)架構(gòu)。Kubernetes將 Operators定義為軟件擴(kuò)展,旨在利用自定義資源來管理應(yīng)用程序及其組件。
Kubernetes Operators一點(diǎn)也不復(fù)雜。Operators使用控制器和Kubernetes API來處理應(yīng)用程序及其所需的自定義資源的打包,部署,管理和維護(hù)。整個過程是完全自動化的,而且你仍然可以使用kubectl 工具進(jìn)行命令和操作。
換句話說,Operators基本上是一個定制的Kubernetes控制器,該控制器集成了定制資源。你可以直接在自定義資源中定義參數(shù)和配置,然后讓Operators轉(zhuǎn)換這些參數(shù)并自動運(yùn)行。Kubernetes Operators的連續(xù)性是其決定性因素。
Operators不僅僅是部署
Kubernetes Operators可以做的不僅僅是自動化應(yīng)用程序的部署。實(shí)際上,只要邏輯和參數(shù)定義正確,Operators就能處理任何事情。是的,這包括擴(kuò)展應(yīng)用程序及其使用的云基礎(chǔ)架構(gòu),進(jìn)行升級和檢查故障,以及長期保持應(yīng)用程序平穩(wěn)運(yùn)行。
整個應(yīng)用程序生命周期可以自動化。Kubernetes 可管理和擴(kuò)展無狀態(tài)應(yīng)用,如 Web 應(yīng)用、移動后端和 API 服務(wù),無需掌握關(guān)于這些應(yīng)用的工作原理的任何其他知識。Kubernetes 的內(nèi)置功能輕松處理這些任務(wù)。
但是,數(shù)據(jù)庫和監(jiān)控系統(tǒng)等無狀態(tài)應(yīng)用需要 Kubernetes 以外的其他域特定知識。有了這些知識,才能夠擴(kuò)展、升級和重新配置這些應(yīng)用。
Kubernetes Operator 將這些特定域知識編碼了到 Kubernetes 擴(kuò)展中,從而能夠?qū)崿F(xiàn)應(yīng)用生命周期的管理和自動化。
例如,你可以將站點(diǎn)可靠性工程(SRE)規(guī)則和參數(shù)寫入Kubernetes Operators,并讓 Operators為你處理操作。這使SRE實(shí)踐得以標(biāo)準(zhǔn)化,并在多個集群之間的操作可重復(fù)。無需在每次部署和升級時手動調(diào)整參數(shù)。
模仿運(yùn)維人員的行為
Kubernetes Operators的真正實(shí)力在于他們能夠了解應(yīng)用程序或服務(wù)應(yīng)如何工作的方式。
Kubernetes Operators可以使用嵌入在 Operators本身中的相同知識來執(zhí)行必要的任務(wù)。例如,在更新期間未為應(yīng)用程序配置云資源時,Kubernetes Operators可以自動更正問題,而無需發(fā)出警報。
運(yùn)維團(tuán)隊(duì)通常編寫軟件來管理應(yīng)用,但Operator 模式能夠捕捉運(yùn)維人員如何管理服務(wù)的規(guī)律 ,可以獲取人類運(yùn)維知識并將其編碼到軟件中,用于管理和部署 Kubernetes 工作負(fù)載,同時消除手動任務(wù)。
Operators可以做什么?
為了更好地了解Operators可以做什么,我們需要研究一些使用Operators的場景。使用 Operator 可以自動化的事情包括:
- 按需部署應(yīng)用;
- 獲取/還原應(yīng)用狀態(tài)的備份;
- 處理應(yīng)用代碼的升級以及相關(guān)改動。例如,數(shù)據(jù)庫 schema 或額外的配置設(shè)置;
- 發(fā)布一個 service,要求不支持 Kubernetes API 的應(yīng)用也能發(fā)現(xiàn)它;
- 模擬整個或部分集群中的故障以測試其穩(wěn)定性;
- 在沒有內(nèi)部成員選舉程序的情況下,為分布式應(yīng)用選擇首領(lǐng)角色。
這些任務(wù)通常需要大量的人工投入。模擬故障時,Operators需要手動觸發(fā)應(yīng)用程序某些部分的錯誤,然后監(jiān)視輸出以標(biāo)記故障點(diǎn)。Operators使過程自動化可以節(jié)省大量時間和資源,無疑使開發(fā)或運(yùn)維成員可以專注于其他更重要的任務(wù)。
最重要的是,Operators可以處理特定和復(fù)雜的情況。例如,你可以使用Operators來部署資源并將其配置為可被少數(shù)服務(wù)或Pod發(fā)現(xiàn)。Operators可以檢查該資源的控制平面,然后根據(jù)需要進(jìn)行調(diào)整。使用Kubernetes API,它還可以抓取快照信息或執(zhí)行更新。
還可以將更多參數(shù)編碼到過程中。例如,你可以通過部署新的資源,告訴集群使用該新資源,然后刪除StatefulSet和持久卷,來進(jìn)行無縫更新,以防止整個應(yīng)用程序宕機(jī)。
使用Operators
部署 Operators比你想象的要容易。你只需要為集群定義一個“自定義資源”及其控制器即可,一切就緒。真正的挑戰(zhàn)是要找到適合你特定需求的Operators。開始使用 Operators時,kubectl命令可用于執(zhí)行某些操作。
你可以使用kubectl get resourceName 查找已配置的resourceName。然后,你可以運(yùn)行kubectl edit resourceName/example-resource 來更改資源。可以使用Operators對集群進(jìn)行任何類型的更改,包括根據(jù)需要進(jìn)行的高級配置更改。你甚至可以從某些存儲庫中提取現(xiàn)成的Operators。
當(dāng)然,如果你希望自己的Operators處理特定功能,則始終可以對其進(jìn)行編碼。通過創(chuàng)建一個Operators作為Kubernetes API的客戶端,你可以訪問更多功能并自動執(zhí)行每個部署,管理和維護(hù)任務(wù)。你也可以使用kubebuilder和Operator Framework之類的工具來使用。