k8s中 CRD(Custom Resource Definition)? 和 ?Controller(控制器)的關(guān)系
在 Kubernetes 中,?CRD(Custom Resource Definition)? 和 ?Controller(控制器)? 是擴(kuò)展集群功能的兩個(gè)核心組件,其關(guān)系可理解為 ?定義資源? 與 ?管理資源狀態(tài)? 的協(xié)作機(jī)制:
一、CRD:定義自定義資源
-
?功能定位?
CRD 用于聲明一種新的資源類型(Custom Resource),本質(zhì)是擴(kuò)展 Kubernetes API 的核心機(jī)制68。用戶通過(guò) YAML 定義資源的字段(如spec、status)、校驗(yàn)規(guī)則(Schema)及 API 路徑(Group/Version/Kind。- 例如:定義一個(gè)
Network資源,描述集群網(wǎng)絡(luò)配置需求。
- 例如:定義一個(gè)
-
?工作原理?
CRD 提交后,Kubernetes API Server 會(huì)動(dòng)態(tài)注冊(cè)該資源,使其支持kubectl create/get等操作68。此時(shí)資源僅為靜態(tài)聲明,尚無(wú)實(shí)際邏輯。
二、Controller:實(shí)現(xiàn)資源狀態(tài)管理
-
?功能定位?
Controller 是持續(xù)運(yùn)行的守護(hù)進(jìn)程,監(jiān)聽 CRD 定義的資源對(duì)象(CR),并根據(jù)其spec驅(qū)動(dòng)集群狀態(tài)向期望狀態(tài)收斂。- 核心邏輯:?對(duì)比資源的
spec(期望狀態(tài))與status(實(shí)際狀態(tài)),執(zhí)行調(diào)諧(Reconcile)操作?。
- 核心邏輯:?對(duì)比資源的
-
?工作流程?
- 監(jiān)聽 CR 的創(chuàng)建/更新事件;
- 解析 CR 的
spec字段(如副本數(shù)、鏡像版本); - 調(diào)用 Kubernetes API 創(chuàng)建關(guān)聯(lián)資源(如 Deployment、Service);
- 更新 CR 的
status字段反饋當(dāng)前狀態(tài)。
用戶創(chuàng)建 CR → Controller 檢測(cè)變更 → 生成關(guān)聯(lián)資源 → 更新 CR 狀態(tài)
三、協(xié)作關(guān)系:CRD + Controller = 完整擴(kuò)展能力
-
?分工協(xié)作模型?
- ?CRD 負(fù)責(zé)“是什么”?:定義資源的形態(tài)和規(guī)范;
- ?Controller 負(fù)責(zé)“怎么做”?:實(shí)現(xiàn)資源聲明到實(shí)際組件的轉(zhuǎn)換邏輯。
-
?Operator 模式?
二者結(jié)合形成 ?Operator?,將運(yùn)維經(jīng)驗(yàn)編碼為自動(dòng)化操作(如數(shù)據(jù)庫(kù)備份、中間件配置)。例如:定義一個(gè)
MySQLClusterCRD,配套 Controller 自動(dòng)創(chuàng)建 Pod/Secret/Volume 等資源。
總結(jié)關(guān)系圖譜
graph LR
CRD[CRD:定義資源結(jié)構(gòu)] -->|聲明| CR[Custom Resource]
Controller -->|監(jiān)聽/調(diào)諧| CR
Controller -->|創(chuàng)建| K8s_Resources[Pod, Service等]
CR -->|status 反饋| Controller
- ?CRD 是資源藍(lán)圖?,Controller 是資源引擎;
- 二者分離設(shè)計(jì),支持靈活擴(kuò)展復(fù)雜業(yè)務(wù)場(chǎng)景。

浙公網(wǎng)安備 33010602011771號(hào)