一、什么是controller-manager

kubernetes中的各种资源,都是在一个个controller的管理下,来不断进行修正,以达到其期望的状态的。从逻辑上讲,每一个controller都是一个单独的进程,但是为了便于管理,便将他们都编译进了一个二进制文件contrller-manager,所以,controller manager是kubernetes中各种操作系统的管理者,也是kubernetes自动化功能的核心。

二、深入认识controller manager

controller manager 从功能上分类,包括有Node Controller、Job Controller、Endpoint Controller、Service Account & Token Account、Replication Controller、Deployment Controller等。

2.1、Node Controller

在node加入集群后,kubelet进程启动的同时,会同API Server交互,上报自身节点信息API Server完成节点的注册,而API Server则会在接收到信息后,将数据持久化到etcd中,并通过list-watch机制,动态更新节点的状态。

2.2、Job Controller

监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成。

2.3、Replication Controller

RC这一副本控制器的核心作用是用来确保和RC关联的pod的数量始终符合RC的预期值的。在RC的管理下,如果pod多余或少于RC的期望值时,RC会通过销毁多余的pod或新建pod来修正当前pod的数量,使pod数量符合RC的期望。这里需要注意的是,只有当pod的RestartPolicy=Always时,RC才会管理此pod。
在RC中可以定义pod模版,但是此模版之后影响到新创建的pod,对于已存在的pod并且label符合RC管控的pod,是无法产生影响的,哪怕修改一套模版,也不会影响到已经创建的pod。同时,也可以通过修改pod的label,使pod脱离RC的管控。

2.4、Deployment Controller

在kubernetes的不断演进中,RC无法满足用户的需求,所以有了Deployment这一副本控制器。Deployment Controller是RC的替代品。
在Deployment Controller工作时,每当我们创建一个Deployment时,Deployment Controller会创建一个与之对应的ReplicaSet,通过ReplicaSet来实现对于pod的管理,包括pod数量的管理,pod的调度等等。当我们进行更新时,会触发滚动更新,此时Deployment Controller会创建一个新的ReplicaSet来管理新版本的pod。

2.5、Namespace Controller

2.6、Service Controller

2.7、Endpoint Controller

2.8、Route Controller

2.9、ResourceQuota Controller

2.10、Volume Controller