Thinking_Out_Loud

K8s中的Level Based设计

2019-03-14

概念

K8s为了从故障中快速恢复用了一种Level-based的模式实现API和Controller,相对地,还有另一种概念Edge-based。这两种概念都来自硬件中断。例如,电路由低电平跳变到高电平触发事件的方式就称作边沿触发,是由电平变化触发的,而相对的电平触发则是电路到达额定电平才触发事件。

K8s怎么做的

具体来说,K8s将集群的所有内部状态都托管到外部高可用的存储服务,如Etcd,再加上集群状态更新时是将新状态先保存到Etcd,Controller异步地去更新集群的状态。所以K8s很自然地就做到了Level based,而不是实时响应每一个请求。在集群状态频繁更新的场景中,不会有过时的请求在排队,Controller在Reconcile过程中只根据Namespace和Name从Etcd中读取数据,可以保证读到的永远是实时的新鲜的数据。

优点

上面已经提到了,再总结一下:

  1. 可以跳过临时的或过时的状态,直接处理当前最新的系统状态;
  2. 可以很自然地将频繁的或重复请求合并,避免每个请求都需要系统单独响应;

参考资料

  1. https://book.kubebuilder.io/basics/what_is_a_controller.html#
Tags: K8s