controller-manager

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+----------------------------------------------------------+          
| Master |
| +-------------------------+ |
| +------->| API Server |<--------+ |
| | | | | |
| v +-------------------------+ v |
| +----------------+ ^ +--------------------+ |
| | | | | | |
| | Scheduler | | | Controller Manager | |
| | | | | | |
| +----------------+ v +--------------------+ |
| +------------------------------------------------------+ |
| | | |
| | Cluster state store | |
| | | |
| +------------------------------------------------------+ |
+----------------------------------------------------------+

Controller Manager

Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 两部分组成,cloud-controller-manager 则是为各家云厂商提供了一个抽象的封装,便于让各厂商使用各自的 provide。

kube-controller-manager

kube-controller-manager 是一个嵌入了 K8S 核心控制循环的守护进程
控制循环这里拆解为两部分: 控制 和 循环 ,它所控制的是集群的状态;至于循环它当然是会有个循环间隔的,这里有个参数可以进行控制
kube-controller-manager 以及它在 K8S 中主要是将集群调节至预期的状态,并提供出了 /metrics 的接口可供监控
kube-controller-manager 中有很多的 controller 大多数是默认开启的,当然也有默认关闭的,比如 bootstrapsigner 和 tokencleaner,在我们启动 kube-controller-manager 的时候,可通过 --controllers 的参数进行控制,就比如上面例子中 --controllers=*,bootstrapsigner,tokencleaner 表示开启所有默认开启的以及 bootstrapsigner 和 tokencleane

查看 kube-controller-manager 的日志:

1
kubectl -n kube-system describe pods -l component=kube-controller-manager

查看 pod:

1
kubectl -n kube-system get pod -l component=kube-controller-manager

进入 pod 查看具体信息:

1
2
3
// kube-controller-manager 在 10252 端口上不仅暴露出来了一个 /healthz 接口,还暴露出了一个 /metrics 的接口,可用于进行监控之类的
kubectl -n kube-system exec -it kube-controller-manager-kind-control-plane sh
wget -qO- http://127.0.0.1:10252/metrics|grep gc_controller

参考资料:

https://github.com/kubernetes/client-go/tree/master/informers