[深入理解]k8s client-go 系列(1): DeltaFIFO
写在前面刚毕业我就觉得crud是一件很无聊的事情。作为sre可以摆脱crdu, 可是平时的工作无非是监控,告警,迁移,部署,排查问题。三年了,这些东西都搞腻味了,从技术品味上说,什么是有趣的?我感觉k8s开发算是少有的有点技术含量,且可以玩的深一点的东西了。通过operator的开发我们可以将部署从playbook,手工部署解放出来。其中积累的能力在自动化告警处理,运维操作自动化上更是大有可为。个人感觉是未来的大势所趋。
我已经完全独立开发一个zookeeper operator系统,参与和研究过至少三个类似系统的开发。但是对于operator机制,我总是有种模模糊糊的感觉,网上的资料都被我翻遍了,要不太理论看不懂,要不太小白就一个入门。更有的是直接上源码,属于大牛懒得看,我这种菜鸡看了也白看的类型。基于此,我想还是要demo先行,通过构建demo慢慢攻破一个个小堡垒, 不能好高骛远。
简介
client-go 架构图
github client-go项目:
https://github.com/kubernetes/client-go
DeltaFIFO架构上在Reflector和informer之间的位置,和所有队列一样,作用的官方说法:
DeltaFIFO solves this use case:
You want to process every object change (delta) at most once.
您希望至多处理每个对象变更(delta)一次。 When you process an object, you want to see everything, that’s happened to it since you last processed it.
在处理对象时,您希望看到自上次处理以来发生的一切。 You want to process the deletion of some of the objects.
您希望处理一些对象的删除。 You might want to periodically reprocess objects.
您可能希望定期重新处理对象。 顾名思义的来看可以分为FIFO部分和Delta部分: