Kubernetes裡的Operator

T1YSL發表於2022-05-20

Kubernetes是容器叢集管理系統,是一個開源的平臺,可以實現容器叢集的自動化部署、自動擴縮容、維護等功能。在對一些複雜應用進行Kubernetes容器化的時候,經常能看到xxx operator,如ETCD Operator、Prometheus Operator、Postgres Operator、openGauss Operator、MySQL Operator等等。
Operator 可以看作是一種解決資料庫等複雜應用容器化問題的模式。Operator遵循Kubernetes宣告式API和Controller的設計理念,被用來擴充套件Kubernetes API,利用定製資源管理應用及其元件,對複雜的有狀態應用,如資料庫、快取和監控系統等,進行建立、配置和管理。Operator 基於Kubernetes的資源和控制器概念之上構建,但同時又包含了應用程式特定的領域知識。


Kubernetes作為一個“容器編排”平臺,其核心是對資源物件進行”編排“,而 控制器(controller)則負責此工作。Kubernetes的核心元件 controller-manager管理controllers,不同的controllers各自和APIServer通訊,獲取新的狀態,對系統進行"修正"。

image.png

Kubernetes中內建了Deployment,StatefulSet,Job、Cronjob等豐富的編排物件,但在實際使用中,面對紛繁複雜的應用場景,尤其是針對etcd、Redis、ES、PG、openGauss等複雜的有狀態應用,現有的編排物件在面對這些應用的如主從配置、叢集擴縮容等需求時顯得力不從心。Kubernetes在v1.7版本引入了 CRD(Custom Resource Definition),允許使用者將應用的複雜需求抽象成自定義資源物件並且做到像原生物件一樣操作它們。

Kubernetes Controller開發框架註冊CRD,可使得自定義資源被Apiserver識別並儲存在etcd中,而為了對資源進行操縱以滿足實際需求則需要開發針對自定義資源的controller。在Kubernetes客戶端,如client-go,包含了可便捷開發controller的現成框架。


Operator本質為CRD(CR)+ Controller。無論是外部廠商的Operator還是自研的Operator均遵循該模式。要設計一個統一的容器資料庫模型,可以放在叢集外部做模型轉化適配,也可以放在叢集內部做模型轉化適配。自研的Operator可以直接複用這一套容器資料庫模型。最終選擇使用CRD承載結構體定義,在靠近資料庫Operator側進行模型轉化適配。

Operator透過擴充套件Kubernetes定義Custom Controller,觀察應用並根據實際狀態執行自定義任務。應用被定義為Kubernetes物件:Custom Resource (CR),它包含yaml spec和被API服務接受物件型別(K8s kind)。這樣,您可以在自定義規範中定義要觀察的任何特定條件,並在例項與規範不匹配時協調例項。雖然Operator controller主要使用自定義元件,但它與原生Kubernetes controller協調方式非常類似。
Operator透過Custom Controller協調應用spec。雖然API服務知道Custom Controller,但Operator可以獨立執行在叢集內部或外部。

image.png


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2895866/,如需轉載,請註明出處,否則將追究法律責任。

相關文章