所屬技術領域:
K8s
|名詞定義|
Operator Framework給使用者提供了webhook和controller架構,包括消息通知、失敗重新入隊等等,開發人員僅需關心被管理應用的運維邏輯實作
主流的Operator Framework項目
-kubebuilder:
https:github.com/kubernetes-sigs/kubebuilder-operator-sdk:
https:github.com/operator-framework/operator-sdk-兩者沒有本質上的差別,都是使用的controller-tools和controller-runtime。細節上kubebuilder相應的測試、部署、代碼生成腳手架更完善,如Makefile和Kustomize等工具的內建;operator sdk則支援與ansible operator 、operator Lifecycle Manager的內建
|技術特點|
Operator Framework
Operator Framework 同樣也是 CoreOS 開源的一個用于快速開發 Operator 的工具包,該架構包含兩個主要的部分:
--Operator SDK:內建controller-runtime,提供了:編寫運維邏輯的高階API,快速建構Operator項目及代碼生成的腳手架工具,覆寫常見Operator用例的擴充。Operator SDK是Operator Framework中最核心的工程。
--Operator Lifecycle Manager : K8S叢集内所有Operator(及其關聯服務)的生命周期管理( installation, updates, and management )
SDK提供了用于建構,測試和打包操作員的工具。最初,SDK促進了應用程式的業務邏輯(例如,如何擴充,更新或備份)與Kubernetes API的結合,以執行那些操作。随着時間的推移,SDK可以使工程師使應用程式更智能,并擁有雲服務的使用者體驗。SDK中包含在操作員之間共享的領先實踐和代碼模式,以幫助防止重新發明輪子。
Workflow
Operator SDK 提供以下工作流來開發一個新的 Operator:
-使用 SDK 建立一個新的 Operator 項目
-通過添加自定義資源(CRD)定義新的資源 API
-指定使用 SDK API 來 watch 的資源
-定義 Operator 的協調(reconcile)邏輯
-使用 Operator SDK 建構并生成 Operator 部署清單檔案
Demo
我們平時在部署一個簡單的 Webserver 到 Kubernetes 叢集中的時候,都需要先編寫一個 Deployment 的控制器,然後建立一個 Service 對象,通過 Pod 的 label 标簽進行關聯,最後通過 Ingress 或者 type=NodePort 類型的 Service 來暴露服務,每次都需要這樣操作,是不是略顯麻煩,我們就可以建立一個自定義的資源對象,通過我們的 CRD 來描述我們要部署的應用資訊,比如鏡像、服務端口、環境變量等等,然後建立我們的自定義類型的資源對象的時候,通過控制器去建立對應的 Deployment 和 Service,是不是就友善很多了,相當于我們用一個資源清單去描述了 Deployment 和 Service 要做的兩件事情。
這裡我們将建立一個名為 AppService 的 CRD 資源對象,然後定義如下的資源清單進行應用部署:
apiVersion: app.example.com/v1
kind: AppService
metadata:
name: nginx-app
spec:
size: 2
image: nginx:1.7.9
ports:
- port: 80
targetPort: 80
nodePort: 30002
通過這裡的自定義的 AppService 資源對象去建立副本數為2的 Pod,然後通過 nodePort=30002 的端口去暴露服務,接下來我們就來一步一步的實作我們這裡的這個簡單的 Operator 應用。
|資料來源|
名詞定義:
https://blog.csdn.net/bbwangj/article/details/82355337技術特點:
https://www.jianshu.com/p/628aac3e6758