replication controller是kube-controller-manager中一个重要的控制器,主要是通过rs进行控制,确保pods的数量恰好和rs的规定一致。因此replication controller主要对这两类进行watch,一类是replicationset,另一类是pods。本文是replication controller的源码阅读笔记,会包括client-go的Informer机制,希望帮助开始阅读kubernetes源码的小伙伴们,更希望与对kubernetes源码阅读感兴趣的小伙伴儿们交流,有错误的地方也希望能指出,共同进步。
更新日志:
1. 源码分析从kubernetes tag v1.9.0更新到kubernetes tag v1.10.1;(改动很小)
2. 增加了相关的流程示意图;
更新时间:2018年4月14日
replicationController初始化过程:
startReplicationController
cmd/kube-controller-manager/app/core.go
startReplicationController方法
- 协程调用replicationcontroller.NewReplicationManager,构建ReplicationManager;
- 调用ctx.InformerFactory.Core().V1().Pods(),这里调用sharedInformerFactory(client-go/informers/factory.go)的Core().V1().Pods()方法,将会构建PodInformer对象;
- 以此方式,创建rcInformer;
- 运行ReplicationManager;
NewReplicationManager
pkg/controller/replication/replication_controller.go
NewReplicationManager方法
- 在NewReplicationManager中,
- 首先,调用record.NewBroadcaster,创建eventBroadcaster对象,调用eventBroadcaster.StartLogging,接