Kubernetes裡的Operator
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通訊,獲取新的狀態,對系統進行"修正"。
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可以獨立執行在叢集內部或外部。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2895866/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談 Kubernetes Operator
- Kubernetes Operator 開發入門
- Kubernetes Operator基礎入門
- 12 . Kubernetes之Statefulset 和 Operator
- Spark in action on Kubernetes - Spark Operator的原理解析Spark
- Angular rxjs裡自定義operator的使用AngularJS
- 從 Helm 到 Operator:Kubernetes應用管理的進化
- Kubernetes裡的ConfigMap的用途
- 從零開始入門 K8s | Kubernetes API 程式設計利器:Operator 和 Operator FrameworkK8SAPI程式設計Framework
- Kubernetes裡的secret最基本的用法
- GPU 環境搭建指南:使用 GPU Operator 加速 Kubernetes GPU 環境搭建GPU
- 擁抱雲原生,EMQ X Kubernetes Operator v1.0 正式釋出MQ
- 當我們聊kubernetes operator時,我們在聊些什麼
- 在 Kubernetes 上彈性深度學習訓練利器 -- Elastic Training Operator深度學習ASTAI
- 自動化測試在 Kubernetes Operator 開發中的應用:以 OpenTelemetry 為例
- Kubernetes決勝Swarm的優勢在這裡?Swarm
- 如何在 Kubernetes 裡部署 JMX ExporterExport
- Operator介紹
- 在kubernetes裡使用seccomp限制容器的系統呼叫
- 如何在Kubernetes 裡新增自定義的 API 物件(一)API物件
- 如何在Kubernetes裡給PostgreSQL建立secretSQL
- Python中operator 模組的用法Python
- kubebuilder operator的執行邏輯UI
- 通過一個例子學習Kubernetes裡的PersistentVolumeClaim的用法AI
- Kubernetes pod裡一個特殊的容器:pause-amd64
- 使用Kubernetes裡的job計算圓周率後2000位
- compact (): Undefined variable: operatorUndefined
- RuntimeError: No such operator torchvision::nmsError
- EMQX Newsletter 2022-08|企業版5.0開發中、EMQX Kubernetes Operator 2.0即將釋出MQ
- 如何在Kubernetes裡建立一個Nginx serviceNginx
- gpt給出的operator簡單示例GPT
- 你要知道的 - Spread Operator for objects 技巧Object
- 你要知道的 – Spread Operator for objects 技巧Object
- 在kubernetes裡使用AppArmor限制容器對資源的訪問APP
- Zalando Postgres Operator 快速上手
- 精讀《pipe operator for JavaScript》JavaScript
- TypeScript 之 Keyof Type OperatorTypeScript
- TypeScript 之 Typeof Type OperatorTypeScript