04 控制器调和循环
控制器调和循环
控制器反复比较期望与实际状态,按对象 key 入队再执行幂等调和;事件会合并,可靠性来自重新观察。
版本:Kubernetes v1.37.2;核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。
specification {
element actor { style { shape person; color amber } }
element system { style { color muted } }
element component { style { color primary } }
element storage { style { shape storage; color green } }
}
model {
api = component 'API server'
cache = component 'Informer / 缓存'
q = storage '工作队列'
ctrl = component 'ReplicaSet controller'
pod = component 'Pod 对象'
}
views {
dynamic view index {
title '核心链路'
variant sequence
api -> cache 'list/watch 对象变化'
cache -> q '按所属 ReplicaSet key 入队'
q -> ctrl '工作线程取 key'
ctrl -> cache '读取期望副本与已有 Pod'
ctrl -> ctrl '计算差额并处理删除中对象等状态'
ctrl -> api '创建 / 删除需要调整的 Pod'
api -> pod '保存对象变化'
ctrl -> api '更新 ReplicaSet 状态'
api -> cache '后续变化再次驱动观察'
}
}
关键判断
- 以 ReplicaSet 为例:spec.replicas 是期望数量,控制器根据受其管理的 Pod 判断是否补建或缩减。
- Deployment 控制器管理 ReplicaSet,ReplicaSet 控制器管理 Pod;不能把整条链的职责全归给一个控制器。
- 控制器只提交对象变更,容器运行仍由 scheduler 与 kubelet 接力;缓存可能短暂落后,失败需重试。
边界
调和不承诺每个事件只执行一次,也不承诺立即收敛;按状态设计幂等动作,并处理 resourceVersion 冲突。