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