一、基本概念
????????在k8s中,Controller(控制器)是核心組件之一,其負責維護集群狀態并確保集群內的實際狀態與期望狀態一致的一類組件。控制器通過觀察集群的當前狀態并將其與用戶定義的期望狀態進行對比,做出相應的調整來實現狀態的一致性。
控制器:負責管理工作負載資源(如 Pod、Deployment、StatefulSet 等),確保集群狀態符合用戶期望。
?二、Controller的核心作用?
- ?調和(Reconciliation)?:Controller不斷比較資源的實際狀態(如當前運行的Pod數量)與用戶定義的期望狀態(如Deployment中指定的副本數),并通過API Server調整資源,直到兩者一致。
- ?自動化管理?:處理Pod的創建、更新、擴縮容、故障恢復等任務,減少人工干預。
三、Controller 的工作原理
- Watch 機制:Controller 通過 API 服務器的 Watch 接口監聽資源變化事件(如 Pod 創建、刪除等)。
- 工作隊列:接收到事件后,Controller 將相關對象放入工作隊列(Work Queue)。
- 處理邏輯:Controller 從隊列中取出對象,根據業務邏輯(如擴容、修復故障)執行操作,使集群狀態趨近期望狀態。
- 循環執行:持續重復上述過程,確保集群狀態始終與期望狀態一致。
四、常見的內置 Controller
K8s 中有多種內置 Controller,負責不同類型的資源管理:
1、Deployment Controller
????????管理 Deployment 資源,確保 Pod 副本數與期望一致,支持滾動更新和回滾。
2、ReplicaSet Controller
????????維護 Pod 的副本數量,確保指定數量的 Pod 始終運行。
3、StatefulSet Controller
????????管理有狀態應用,確保 Pod 的順序性、穩定性和持久化存儲。
4、DaemonSet Controller
????????確保每個 Node 上運行一個特定的 Pod 副本(如監控代理、日志收集器)。
5、Job Controller
????????管理一次性任務(Job),確保任務成功完成后終止。
6、CronJob Controller
????????基于時間調度周期性任務(CronJob)。
7、Horizontal Pod Autoscaler(HPA)
????????據CPU利用率或自定義指標自動調整Pod的數量。
?五. 自定義Controller與Operator?
- ?CRD(Custom Resource Definition)?:允許用戶定義自定義資源(如
RedisCluster
)。- ?自定義Controller?:用于監聽CRD對象的變更,實現業務邏輯(如自動備份、故障恢復、自動化部署第三方服務、集成外部系統等)。
- ?Operator模式?:Operator是一種特殊的自定義 Controller,其結合CRD和自定義Controller,封裝領域知識,實現復雜應用全生命周期的自動化管理(如MySQL Operator)。