Kubernetes Controller Manager原理浅析

controller manager是什么?

Controller Manager 是集群内部的管理控制中心,负责统一管理与运行不同的 Controller ,实现对集群内的 Node、Pod 等所有资源的管理。

比如当通过 Deployment 创建的某个 Pod 发生异常退出时,RS Controller 便会接受并处理该退出事件,并创建新的 Pod 来维持预期副本数。

controller manager起什么作用?

k8s内部几乎每种特定资源都有特定的 Controller 维护管理,而 Controller Manager 的职责便是把所有的 Controller 聚合起来:

  1. 提供基础设施降低 Controller 的实现复杂度
  2. 启动和维持 Controller 的正常运行,watch api-server,然后对不同的 Controller 分发事件通知。

k8s中有几十种 Controller,这里列举一些相对重要的Controller:

  1. 部署控制器(Deployment Controller):负责pod的滚动更新、回滚以及支持副本的水平扩容等。
  2. 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
  3. 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
  4. 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
  5. 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
  6. ……

controller manager的工作流程是什么?

大体流程:

从比较高维度的视角看,Controller Manager 主要提供了一个分发事件的能力,而不同的 Controller 只需要注册对应的 Handler 来等待接收和处理事件。

  1. List & Watch:
    1. Controller manager与api-server的通信主要通过两种方式:List 和 Watch。
    2. List是短连接实现,用于获取该资源的所有object;

    3. Watch是长连接实现,用于监听在List中获取的资源的变换。

    4. api-server检测到资源产生变更时,会主动通知到Controller manager(利用分块传输编码)。
    5. 也可以说,List获取的是全量数据,Watch获取的是增量数据。

  2. client-go:
    1. client-go实现统一管理每种 Controller 的List和Watch。
    2. 将收到的event事件放到缓存中,异步分发给每个 Controller 的注册的eventHandler。
  3. Controller自己的eventHandler如何注册?
    1. 以 Deployment Controller 举例来看源码。
    2. pkg/controller/deployment/deployment_controller.goNewDeploymentController 方法中,便包括了 Event Handler 的注册,对于 Deployment Controller 来说,只需要根据不同的事件实现不同的处理逻辑,便可以实现对相应资源的管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值