轉自本人空間 http://user.qzone.qq.com/29185807/blog/1459325937 一、controller manager建立endpointController 代碼在k8s.io\kubernetes\cmd\kube-controller-manager\controller-manager.go main函數路口 代碼k8s.io\kubernetes\cmd\kube-controller-manager\app\controllermanager.go Run函數 構建endpointcontroller 二、endpointcontroller初始化 EndpointController結構體 代碼k8s.io\kubernetes\pkg\controller\endpoint\endpoints_controller.go 1、client 就是kubeClient,與apiserver串連的介面部分。用於service的list和watch的擷取,pod的list和watch的擷取 2、serviceStore與serviceController serviceStore,service資訊的儲存 serviceController,service資訊的生產者 3、podStore與podController podStore,pod資訊的儲存 podController,pod資訊的生產者 4、queue 處理隊列 初始化 代碼k8s.io\kubernetes\pkg\controller\endpoint\endpoints_controller.go 從上面的代碼可以到,結構體裡的各個成員進行了初始化。 1、client 就是kubeClient,與apiserver串連的介面部分。用於service的list和watch的擷取,pod的list和watch的擷取 2、serviceStore與serviceController 初始化為framework.NewInformer 並將service的list和watch擷取介面傳入 3、podStore與podController 初始化為framework.NewInformer 並將pod的list和watch擷取介面傳入 4、queue 就是一個隊列(簡單,所以不做分析) 繼續看Run函數 三、serviceController與podController工作流程 初始化流程 代碼在k8s.io\kubernetes\pkg\controller\framework\ controller.go 上面的初始化幾個地方比較重要 1、clientState也就是Store(serviceStore,podStore) 其傳入的keyfunc為代碼在k8s.io\kubernetes\pkg\controller\framework\ controller.go 代碼在k8s.io\kubernetes\pkg\client\cache\delta.go 2、cfg是後續很重要的配置資訊 3、NewDeltaFIFO中傳入的keyfunc 代碼在k8s.io\kubernetes\pkg\client\cache\store.go 我們回到工作流程中 代碼k8s.io\kubernetes\pkg\controller\framework\ controller.go, 從上面的代碼來看,listerwatcher真正啟動並執行還在下層的reflector 下層reflector工作流程 代碼在k8s.io\kubernetes\pkg\client\cache\reflector.go 入口ListAndWatch 我們看看list返回的是什麼 我們以service的list為例 代碼在k8s.io\kubernetes\pkg\client\unversioned\ services.go 代碼在k8s.io\kubernetes\pkg\api\typess.go 在此處插入一下對於list結果的處理 再插入下fifo的處理 代碼在k8s.io\kubernetes\pkg\client\cache\fifo.go |