Kubernetes Controller Manager解析

Controller Manager是Kubernetes中各种操作系统的管理者, 是集群内部的管理控制中心, 也是Kubernetes自动化功能的核心

Controller Manager内部包含Replication Controller、Node Controller、 ResourceQuota Controller、Namespace Controller、ServiceAccount Controller、 Token Controller、 Service Controller及Endpoint Controller这8种Controller, 每种Controller都负责一种特定资源的控制流程, 而Controller Manager正是这些Controller的核心管理者。

Replication Controller

这里的Replication Controller(副本控制器)与资源对象Replication Controller并不相同,资源对象在下文被简称为RC。

Replication Controller的核心作用是确保在任何时候集群中某个RC关联的Pod副本数量都保持预设值。需要注意: 只有当Pod的重启策略是Always时(RestartPolicy=Always),Replication Controller才会管理该Pod的操作( 例如创建、 销毁、 重启等)。

最好不要越过RC直接创建Pod, 因为Replication Controller会通过RC管理Pod副本, 实现自动创建、 补足、 替换、 删除Pod副本, 这样能提高系统的容灾能力, 减少由于节点崩溃等意外状况造成的损失。 即使你的应用程序只用到一个Pod副本, 我们也强烈建议你使用RC来定义Pod。

Replication Controller(副本控制器)主要用作:调度管理、弹性伸缩、滚动更新。

Node Controller

kubelet进程在启动时通过API Server注册自身的节点信息, 并定时向API Server汇报状态信息, API Server在接收到这些信息后, 会将这些信息更新到etcd中。 在etcd中存储的节点信息包括节点健康状况、 节点资源、 节点名称、 节点地址信息、 操作系统版本、 Docker版本、 kubelet版本等。 节点健康状况包含“就绪”(True) “未就绪”(False) 和“未知”(Unknown) 三种。

Node Controller(节点控制器)通过API Server实时获取Node的相关信息, 实现管理和监控集群中的各个Node的相关控制功能

ResourceQuota Controller

ResourceQuota Controller(资源配额管理)确保了指定的资源对象在任何时候都不会超量占用系统物理资源, 避免了由于某些业务进程的设计或实现的缺陷导致整个系统运行紊乱甚至意外宕机, 对整个集群的平稳运行和稳定性有非常重要的作用。

目前Kubernetes支持如下三个层次的资源配额管理 :

  • 容器级别:可以对CPU和Memory进行限制 。
  • Pod级别, 可以对一个Pod内所有容器的可用资源进行限制。
  • Namespace级别, 为Namespace( 多租户) 级别的资源限制,包括:Pod数量、Replication Controller数量、Service数量、ResourceQuota数量 、Secret数量、可持有的PV数量

Kubernetes的配额管理是通过Admission Control( 准入控制) 来控制的, Admission Control当前提供了两种方式的配额约束, 分别是LimitRanger与ResourceQuota。 其中LimitRanger作用于Pod和Container,ResourceQuota则作用于Namespace, 限定一个Namespace里的各类资源的使用总额。

Namespace Controller

用户通过API Server可以创建新的Namespace并将其保存在etcd中,Namespace Controller定时通过API Server读取这些Namespace的信息。 如果Namespace被API标识为优雅删除(通过设置删除期限实现, 即设置DeletionTimestamp属性) , 则将该NameSpace的状态设置成Terminating并保存到etcd中。 同时Namespace Controller删除该Namespace下的ServiceAccount、 RC、 Pod、 Secret、 PersistentVolume、 ListRange、
ResourceQuota和Event等资源对象。

Endpoints Controller

img

Endpoints表示一个Service对应的所有Pod副本的访问地址, Endpoints Controller就是负责生成和维护所有Endpoints对象的控制器 。

Endpoints Controller负责监听Service和对应的Pod副本的变化, 如果监测到Service被删除, 则删除和该Service同名的Endpoints对象。 如果监测到新的Service被创建或者修改, 则根据该Service信息获得相关的Pod列表, 然后创建或者更新Service对应的Endpoints对象。 如果监测到Pod的事件, 则更新它所对应的Service的Endpoints对象(增加、 删除或者修改对应的Endpoint条目)。

kube-proxy进程获取每个Service的Endpoints, 实现了Service的负载均衡功能。

Service Controller

Service Controller的作用, 它其实是属于Kubernetes集群与外部的云平台之间的一个接口控制器。 Service Controller监听Service的变化, 如果该Service是一个LoadBalancer类型的Service(externalLoadBalancers=true) , 则Service Controller确保在外部的云平台上该Service对应的LoadBalancer实例被相应地创建、 删除及更新路由转发表(根据Endpoints的条目) 。

ServiceAccount Controller

安全相关ServiceAccount的控制器

Token Controller

安全相关的Token的控制器