云原生學習路線導航頁(持續更新中)
- 本文是 Kubernetes operator學習 系列的前置知識篇,幫助大家對 Operator 進行初步了解
- Kubernetes operator學習系列 快捷鏈接
- Kubernetes operator 前置知識篇
- Kubernetes operator(一)client-go篇
- Kubernetes operator(二)CRD篇
- Kubernetes operator(三)code-generator 篇
- Kubernetes operator(四)controller-tools 篇
- Kubernetes operator(五)api 和 apimachinery 篇
- Kubernetes operator(六)CRD控制器 開發實戰篇
- Kubernetes operator(七) kubebuilder 的安裝及簡單使用 篇
- Kubernetes operator(八) controller-runtime 篇
1.Operator模式學習
1.1.Operator是什么
- Operator 是 遵循 Kubernetes 的設計理念的一種擴展模式,它強調利用 定制 CR資源 去管理應用及其組件。
- Operator 通過 將 應用程序的運維知識 轉化為 可編程的代碼,使我們能夠定義和管理應用程序的整個生命周期,包括安裝、配置、擴展、監控和升級等方面,進而以自動化的方式管理和運維復雜的應用程序。
- 一個Operator,主要包括兩部分:自定義資源(Custom Resource) 和 控制器(Controller)
- Operator核心原理是 聲明式配置 和 狀態驅動。您可以定義自定義資源的規范(Spec)和狀態(Status),Operator會根據這些定義來自動化地管理應用程序。它可以監測資源的變化,識別和處理故障,以及根據配置和策略自動擴展應用程序。
1.2.開發一個Kubernetes Operator的步驟
- 定義自定義資源
- 使用Kubernetes的自定義資源定義語言(CRD),定義一個自定義資源來描述您的應用程序。
- 除了必備的TypeMeta、ObjectMeta,CRD中還應包含 資源規范Spec 和 資源狀態Status 字段。
- 創建Operator
- 編寫一個自定義的控制器(Controller),用于監控和處理您定義的CR。
- 當用戶創建或修改CR時,Controller 能夠 獲取到用戶修改后的CR,并根據CR中Metadata、Spec等字段的變化,執行必要的操作,處理完后還要將CR的狀態信息寫入Status字段中,供用戶查看。
- 部署Operator
- 部署Operator包括兩部分:安裝CRD,部署Controller
- 安裝CRD:將CRD應用到集群中,使kubernetes集群能夠識別到該資源
- 部署Controller:Controller 通常會在control plane之外運行,就像運行任何容器化的應用程序一樣。例如,將controller打包成鏡像,以 Deployment 運行。
- 創建和管理自定義資源實例
- 使用 kubectl 或 編寫yaml 創建CR的實例
- 使用 kubectl 或 其他kubernetes客戶端工具 管理CR
1.3.Operator開發 與語言無關
- 你可以使用任何語言、任何運行時,開發Operator,只要能夠作為kubernetes的客戶端就行
- 下面列舉一些 庫/框架,可以用于開發Operator
- Charmed Operator Framework
- Java Operator SDK
- Kopf (Kubernetes Operator Pythonic Framework)
- kube-rs (Rust)
- kubebuilder
- KubeOps (.NET operator SDK)
- KUDO (Kubernetes Universal Declarative Operator)
- Mast
- Metacontroller along with WebHooks that you implement yourself
- Operator Framework
- shell-operator
1.4.Operator的后續學習路線
- 閱讀 CNCF Operator White Paper(Operator 白皮書).
- 深入學習 Custom Resources
- 在 OperatorHub.io 上查找已有的 Operator 練習
- 發布你的Operator 給其他人使用
- 閱讀 CoreOS 介紹 Operator 模式的 原始文章 (這是原始文章的存檔版本)
- 閱讀 Google Cloud 上關于 構建 Operator 的 最佳實踐的文章