• 简短
    • 精细

    kube-controller-manager 组件

    https://github.com/kubernetes/kubernetes/tree/master/pkg/controller
    该目录下每一个控制器都负责某种编排功能,包括 Deployment。

    它们遵循 Kubernetes 项目中一个通用编排模式:控制循环(control loop)。

    比如,一个带编排对象X,有一个对应控制器,用 Go 为代码描述这个控制循环:

    1. for{
    2. 实际期望 := 获取集群中对象X的实际状态(Actual State)
    3. 期望状态 := 获取集群中对象X的期望状态(Desired State)
    4. if 实际状态 == 期望状态 {
    5. 什么都不做
    6. } else {
    7. 执行编排动作,将实际状态调整为期望状态
    8. }
    9. }

    具体实现中,实际状态往往来自于 Kubernetes 集群本身。
    如:kubectl 通过心跳汇报的容器状态和节点状态,或监控系统中保存的应用监控数据,或控制器主动收集感兴趣的信息等…
    期望状态,一般来自于用户提交的 YAML文件。

    Kubernetes 对象的主要编排逻辑,是在获取实际状态和期望状态后的“比较”阶段完成。
    这个操作,叫做 调谐(Reconcile)。调谐的过程叫做 调谐循环(Reconcile Loop) 或 同步循环(Sync Loop)。

    调谐,控制循环,的最终结果都是对被控制对象的某种写操作,增加、删除、更新Pod,这是 Kubernetes 项目“面向 API 对象编程”的直观体现。

    Deployment 定义的 template 字段,在 Kubernetes 项目中有个专有名字,PodTemplate(Pod模版)。