文章目录

  • 一、工作流程
    • 1、code-generator
    • 2、流程
      • (1)为什么放到队列里的不是对象的完整数据
      • (2)控制器协同工作原理
      • (3)Garbage Collector(级联删除)
      • (4)deployment controller中的命名规则
  • 二、informer工作机制
  • 三、各种Controller
    • 1、Cloud Controller Manager
    • 2、确保 scheduler 和 controller 的高可用

前文介绍的kube-scheduler,要watch pod nodeName变化,若没有nodeName的pod,则需要调度,然后获取node list,根据predicate plugin、priority plugin的筛选得到最后的候选node列表,然后选择list index为0的分数最高的node,reserve这个node相关资源,然后 pod bind node(写nodeName字段),最后把pod yaml回写到apiserver中。这是一个controller loop, kube-scheduler其实也是一个特殊的kube-controller-manager

apiserver是一个声明式的系统,就是你给我一个应用的期望状态,我根据这个期望去做一些配置,让这个应用最终达到你的期望状态,这个就是kube-controller-manager实现的。是k8s的大脑。

一、工作流程

控制器=控制器定义 + 被控制对象的模版(podTemplate)
控制器定义: 是为了reconcil loop实现达到期望状态(控制器核心原理)

1、code-generator

针对任何的api对象,都可以通过code-generator来生成。它可以生成Deepcopy,Conversion,Clientset等。Clientset用来定义我如何访问这个api对象,比如create,delete,get,list,watch等。
code-generate官方文档

2、流程

流程图:

针对kube-controller-manager,code-generator生成了Informer和Lister。这两个统称为Controller Interface
去apiserver获取任何一个对象的时候,有两种方式,一种是get,一种是watch。针对这两种方式,Controller Interface就分为了: