1、基本概念
- CRD (Custom Resource Definition): 允許用戶自定義 Kubernetes 資源,是一個類型;包括可指定的名稱和模式,無需任何編程。Kubernetes API提供和處理自定義資源的存儲
- CR (Custom Resourse): CRD 的一個具體實例;
- 自定義資源:擴展Kubernetes API或允許將自定義API引入kubernetes集群的對象
- 自定義控制器:以新的方式處理內置的Kubernetes對象,如Deployment、Service等,或管理自定義資源,如同管理本機Kubernetes組件
- Operator模式(適用於CRD和自定義控制器):Operator基於Kubernetes資源和控制器增加了允許Operator執行常見應用程序任務的配置。
2、Operator的工作流程
operator在后端執行一下操作以管理自定義資源
a、CRD創建: CRD定義規范和元數據,基於該規范和元數據應創建自定義資源,當創建CRD的請求時,使用kubernetes內部模式類型(OpenAPI v3模式)驗證元數據,然后創建自定義資源(CRD)對象
b、自定義資源創建根據元數據和CRD規范驗證對象,並相應地創建自定義對象創建
c、Operator(自定義控制器)開始監控event以及status狀態變更,並基於CRD管理自定義資源,它可以提供event或status狀態在自定義資源上執行CRUD操作,因此每當變更自定義資源的狀態時,都能觸發相應的event
3、自定義控制器的工作原理
Reflector:負責通過List、Watch函數監控APIserver中指定類型的資源對象;收到APIServer的資源變動通知時,Reflector基於Listing API獲取資源變動信息,並放置在由watchHandler函數定義的DeIta FIFO隊列中
Informer:基於ProcessLoop 從Delta FIFO隊列中取出(POP)對象緩存至本地,同時調用控制器以便將對象傳遞給它
Indexer: 索引器,負責索引哪些緩存在本地的資源對象。Indexer使用線程安全的數據存儲來存儲對象及其鍵。在Store中定義了一個名為MetaNamespaceKeyFunc的默認函數,該函數生成對象的鍵的格式是/<name>的組合。
Resource Event Handlers:需要傳遞對象給自定義控制器時調用的回調函數,負責從Informer接收待處理資源對象的key,並存入Workqueue中
Workqueue:用戶在自定義控制器中自行實現消息隊列,它從Resource Event Handlers接收和緩沖待處理的資源對象,並交由Process Item進行處理,從而將對象接收和處理的過程解耦
Process Item:執行資源對象管理操作的業務代碼,通常由一到多個函數組成,負責從Workqueue中取出對象並完成真正的處理過程,必要時,這些函數還會調用Indexer以檢索和獲取資源的詳細狀態數據。