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资源。
posted on 2018-06-09 12:04 sichenzhao 阅读(636) 评论(0) 编辑 收藏 举报