对于kubernetes中不存在的资源类型,咱们能够经过自定义资源的方式进行扩展,首先建立customresourcedefinition对象定义资源及其schema,而后就能够建立自定义的资源了,可是此时定义的资源是不具有生命周期的,没法在建立或销毁的过程当中自动执行一些操做,例如replicaSet能够自动根据pod的数量来进行failover,若是咱们也要实现这种自动控制此时就须要编写对应的controller, controller须要一个infromer来监听建立删除等事件,并执行预先定义的回调函数,代码使用自定义的资源须要经过codegen自动生成其client-go api, 若是资源的变化须要反应在k8s event对象上(这样咱们经过kubectl describe 就能够看到发生了什么)还须要利用eventRecorder来产生event.
下面是一些具体的参考资料,我就不重复造轮子了.html
Extend the Kubernetes API with CustomResourceDefinitions git
Advanced topic:github
从kubernetes1.8中开始,在建立资源的时候若是指定了ower reference对象,则删除父对象的时候其子对象也会自动删除,因此对于有relationship的资源须要设置这个字段api
Kubernetes Informer 详解 基本用法和实现简单介绍
work queue example demo, work queue和index的基本使用方法函数
能够在informer中EventHandler中添加一个filter
update失败的时候,须要retry, k8s 有 OptimisticConcurrency 机制,若是有两个 client 都在 update 同一个,会 fail。因此写代码时通常会把 update 写到 loop 里,直到 api-server 返回 200,ok 时才肯定 update 成功。oop
sample-controller 完整的官方demo,注释很详细
使用 client-go 控制原生及拓展的 Kubernetes API 从client-go使用到Controller的编写,全覆盖,由google大佬所写
Writing Controllers写controller的注意事项,在上面的sample-controller中会有一些工程实践
A Deep Dive Into Kubernetes Controllers 很详细的controller的实现步骤,推荐google
Kubernetes Events介绍 上中下
event有个过时时间,默认时间是1h, 因此若是须要一直显示给用户的话要不断用recorder来记录,event是独立存在的一种资源,当describe 其余资源的时候会从其中获取对应的event,.net
Kubernetes Deep Dive: Code Generation for CustomResources codegen的使用方式
Extend Kubernetes 1.7 with Custom Resources 这是一个不用code-gen实现的controllercode
最后发现一篇类似的博文开发operator扩展kubernetes 调研整理,内容有些重复,哈哈orm