天天看點

Kubernetes必備知識: Kubernetes API程式設計利器 Operator Framework

所屬技術領域:

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

繼續閱讀