k8s-controller manager原理分析

controller manager作为集群内部的管理控制中心,负责集群内的Node,Pod副本,服务端点(endpoint),命名空间(namespace)等的管理,当某个Node意外宕机,CM会及时发现此故障并执行自动化修复流程,确保集群始终处于预期的工作状态。

如下图所示:


CM内部包含了RC,node controller,namespace controller等多个控制器,每种控制器都负责一种具体的控制流程,而CM正是这些controller的核心管理者。

在k8s集群中与controller manager并重的另一个组件是k8s scheduler,它的作用是将待调度的pod通过一些复杂的调度流程计算出最佳目标节点,然后绑定到该节点上。


Replication Controller

RC的作用是确保在任何时候集群中一个RC所关联的Pod副本数量保持预设值。

最好不用越过RC而直接创建Pod,因为通过RC管理Pod副本,实现自动创建,补足,替换,删除Pod副本,提供系统的容灾能力。

总结一下RC的职责:

1.确保当前集群中有且仅有N个Pod实例

2.通过调整RC中yaml文件的spec.replicas属性值来实现系统扩容或缩容

3.通过改变RC中的Pod模板来实现系统的滚动升级。

再总结一下RC的典型使用场景,如下

1.重新调度

2.弹性伸缩

3.滚动更新


Node controller

kubelet进程在启动时通过API server注册自身节点信息,并定时向API server汇报状态信息,API  server更新这些信息到etcd中。

Node controller通过API server定时获取Node的相关信息,实现管理和监控Node。工作流程如下图:





endpoint controller 和service controller

首先看看service,endpoint与pod的关系:


endpoint表示了一个service对应的所有pod副本的访问地址,而endpoint controller就是负责生成和维护所有endpoint对象的控制器。负责监听service和对应的Pod副本的变化,若service被删除,则删除与该service同名的endpoint对象,若检测到新的service创建或修改,则先根据该service获取相应的pod列表,然后创建或更新service对应的endpoint对象。

那么endpoint对象如何使用呢。答案是在每个node上的kube-proxy进程,该进程获得每个service的endpoint,实现service的负载均衡功能。


Namespace controller

用户通过API server可以创建新的Namespace并保存在etcd中,namespace controller定时通过API server读取这些namespace信息,若namespace被删除,则NC删除该namespace下的RC,Pod等资源对象。

如果namespace controller观察到namespace设置了删除期限,同时namespace的spec.finalizers域值为空,则NC将通过API server删除该namespace资源。

猜你喜欢

转载自blog.csdn.net/hahachenchen789/article/details/80631178
今日推荐