Controller Manager由kube-controller-manager和cloud-controller-manager組成,是Kubernetes的大腦,它通過apiserver監控整個集群的狀態,並確保集群處於預期的工作狀態。
一、kube-controller-manager的功能
1、高可用
在啟動時設置--leader-elect=true 後,controller manager會使用多節點選主的方式選擇主節點。只有主節點才會調用 StartControllers() 啟動所有控制器,而其他從節點則僅執行選主算法。
多節點選主的實現方法見leaderelection.go。它實現了兩種資源鎖(Endpoint 或 ConfigMap,kube-controller-manager和cloud-controller-manager都使用 Endpoint鎖),通過更新資源的Annotation(control-plane.alpha.kubernetes.io/leader)來確定主從關係。
2、高性能
從Kubernetes 1.7開始,所有需要監控資源變化情況的調用均推薦使用Informer。Informer提供了基於事件通知的只讀緩存機制,可以註冊資源變化的回調函數,並可以極大減少 API 的調用。
3、Node驅逐
Node控制器在節點異常後,會按照默認的速率(--node-eviction-rate=0.1,即每10秒一個節點的速率)進行 Node 的驅逐。Node 控制器按照 Zone 將節點劃分為不同的組,再跟進Zone的狀態進行速率調整:
Normal:所有節點都 Ready,默認速率驅逐。
PartialDisruption:即超過33% 的節點NotReady的狀態。當異常節點比例大於--unhealthy-zone-threshold=0.55 時開始減慢速率:
小集群(即節點數量小於--large-cluster-size-threshold=50):停止驅逐
大集群,減慢速率為--secondary-node-eviction-rate=0.01
FullDisruption:所有節點都NotReady,返回使用默認速率驅逐。但當所有 Zone都處在FullDisruption時,停止驅逐。
二、kube-controller-manage的組成
kube-controller-manager由一系列的控制器組成:
如下是必須啟動的控制器:
EndpointController
ReplicationController
PodGCController
ResourceQuotaController
NamespaceController
ServiceAccountController
GarbageCollectorController
DaemonSetController
JobController
DeploymentController
ReplicaSetController
HPAController
DisruptionController
StatefulSetController
CronJobController
CSRSigningController
CSRApprovingController
TTLController
如下是默認啟動的可選控制器,可通過選項設置是否開啟:
TokenController
NodeController
ServiceController
RouteController
PVBinderController
AttachDetachController
如下是默認禁止的可選控制器,可通過選項設置是否開啟:
BootstrapSignerController
TokenCleanerController
三、cloud-controller-manager的組成
cloud-controller-manager在Kubernetes啟用Cloud Provider的時候才需要,用來配合雲服務提供商的控制,也包括一系列的控制器,如
Node Controller
Route Controller
Service Controller
從v1.6開始,cloud provider已經經歷了幾次重大重構,以便在不修改Kubernetes核心代碼的同時構建自定義的雲服務商支持
閱讀更多 DoDo在線 的文章