Controller Manager

controller manager是一个守护进程,嵌入了 Kubernetes 附带的核心控制循环。在 Kubernetes 中,控制器是一个control loop,它通过 apiserver 监视集群的共享状态,并进行更改,尝试将当前状态移至所需状态。目前 Kubernetes 附带的控制器示例包括replication controller, endpoints controller, namespace controller, serviceaccounts controller

Controller Manager可以认为是个状态机。它不断扫描系统的当前状态目标状态进行对比,如果检测到有差异,则采取相应的措施,保证达到目标状态。

之前说过kubernetes核心功能是desired state management,这是功能就是通过Controller Manager来实现的。


例如Node-Controller会不断扫描Node状态(每5秒钟一次)。如果某一时刻某个Node挂了,而且在5分钟内没有恢复,则这个node会被evict。


image-20200317110908117

不同的controller

image-20200317110924813

从逻辑上讲,每个controller都是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件并在单个进程中运行。

这些控制器包括:

  • Node Controller:负责在节点出现故障时进行通知和响应。
  • Replication Controller:负责为系统中的每个replicaSet对象维护正确的 Pod 数量。
  • Endpoints Controller:填充 Endpoints 对象(即加入 Services 和 Pod)。
  • Service Account & Token Controllers::为新命名空间创建默认帐户和 API 访问令牌。

这些Controller统一在Kube-Controller-Manager下运行:

image-20200317111632382