Bootstrap

k8s源码分析 pdf_k8s源码阅读 replication controller的Informer机制 原创

094d13b2643c7f6b0d9769da349004af.png

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初始化过程:

400671cd56a951bd462f58e37a0f30b7.png

startReplicationController

cmd/kube-controller-manager/app/core.go 
startReplicationController方法
  1. 协程调用replicationcontroller.NewReplicationManager,构建ReplicationManager;
    1. 调用ctx.InformerFactory.Core().V1().Pods(),这里调用sharedInformerFactory(client-go/informers/factory.go)的Core().V1().Pods()方法,将会构建PodInformer对象;
    2. 以此方式,创建rcInformer;
  2. 运行ReplicationManager;

67e6bb4d297ae375fa775e2642bcdc46.png

NewReplicationManager

pkg/controller/replication/replication_controller.go
NewReplicationManager方法
  1. 在NewReplicationManager中,
    1. 首先,调用record.NewBroadcaster,创建eventBroadcaster对象,调用eventBroadcaster.StartLogging,接
;