controller manager 译为“控制器管理器”,k8s内部有很多资源控制器,比如:Node Controller、Replication Controller、Deployment Controller、Job Controller、Endpoints Controller等等,为了降低复杂度,将这些控制器都编译成了一个可执行文件,并且在同一个进程中运行。
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。
cloud-controller-manager 是基于特定云平台的控制器,通过云厂商的api完成节点、路由、loadbalance service的变更,个人学习环境和自建集群不需要。
控制器的工作大致逻辑是,通过apiserver监听关注的资源事件,一旦出现出现关注的事件,比如创建资源,那么会从apiserver接口获取相关资源对象,处理完毕后再将资源对象状态通过apiserver更新到etcd。
controller-manager 虽然允许同时运行多个实例,但是只有一个能成为leader,并处理控制器的请求。controller-manager 锁对象存储在 kube-system 名称空间下的 kube-controller-manager endpoints对象中。
[root@maxiaoke ~]# kubectl get endpoints -n kube-system kube-controller-manager -o yaml
apiVersion: v1
kind: Endpoints
metadata:
annotations:
control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"centos-7-52_4cb2dc1b-56f7-414f-9102-ecfbb3818651","leaseDurationSeconds":15,"acquireTime":"2021-03-27T02:06:28Z","renewTime":"2021-03-27T02:30:23Z","leaderTransitions":35}'
creationTimestamp: "2020-12-04T13:49:43Z"
name: kube-controller-manager
namespace: kube-system
resourceVersion: "1488518"
selfLink: /api/v1/namespaces/kube-system/endpoints/kube-controller-manager
uid: ada772c5-29d6-4cd3-ada3-1a83187b181b