1.1 什么是Controller Manager
Controller Manager是集群内部的管理控制中心,负责统一管理与运行不同的controller,实现对集群内的Node、Pod等所有资源的管理。例如:通过Deployment创建的Pod异常退出时,ReplicaSet controller便会接受并处理该退出事件,并创建新的Pod来维持预期副本数。 Controller Manager由kube-controller-manager和cloud-controller-manager(云控制管理器)组成,是Kubernetes的大脑,它通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态。
Cloud-Controller-Manager在Kubernetes启用Cloud Provider的时候才需要,用来配合云服务提供商的控制,也包括一系列的控制器
1.2 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时,停止驱逐。
Controller manager的作用
Kubernetes内部几乎每种特定资源都有特定的Controller来进行维护和管理,而Controller Manager的职责是把所有的Controller聚合起来: 提供基础设施降低Controller的实现复杂度; 启动和维持Controller的正常运行,Watch kube-apiserver对不同的Controller分发事件通知;
常用的Controller
Kubernetes中有几十种Controller,这里仅列举一些常用、重要的:
部署控制器
(Deployment Controller):负责Pod的滚动更新、回滚以及支持副本的水平扩缩容等;节点控制器
(Node Controller):负责节点出现故障时进行通知和响应;副本控制器
(Replication Controller):负责为系统中的每个副本控制器对象维护正确的Pod数量;端点控制器
(Endpoints Controller):填充端点(Endpoints)对象,即加入Service和Pod;服务账户控制器
(Service Account):为新的命名空间创建默认账户;令牌控制器
(Token Controllers):为新的命名空间创建API访问令牌;
Controller Manager的工作流程
Controller Manager主要提供了一个分发事件的能力,不同的Controller只需要注册对应的Handler来等待接收和处理事件。 在Controller Manager的帮助下,Controller的逻辑可以做的非常纯粹,只需要实现对应的EventHandler即可