对于kubernetes中不存在的资源类型,我们可以通过自定义资源的方式进行扩展,首先创建customresourcedefinition对象定义资源及其schema,然后就可以创建自定义的资源了,但是此时定义的资源是不具备生命周期的,无法在创建或销毁的过程中自动执行一些操作,例如replicaSet可以自动根据pod的数量来进行failover,如果我们也要实现这种自动控制此时就需要编写对应的controller, controller需要一个infromer来监听创建删除等事件,并执行预先定义的回调函数,代码使用自定义的资源需要通过codegen自动生成其client-go api, 如果资源的变化需要反应在k8s event对象上(这样我们通过kubectl describe 就可以看到发生了什么)还需要利用eventRecorder来产生event.

下面是一些具体的参考资料,我就不重复造轮子了.

CustomResourceDefinition(CRD)

Extend the Kubernetes API with CustomResourceDefinitions    

Advanced topic:

  • Finalizers: 用于controller删除过程,防止hard delete,可以在删除的过程中执行一些必要的操作
  • Validation: 相当于filed的schema
  • Subresources: v1.10中处于alpha版本,定义了status,scale status subresource
  • Categories: 定义group,例如kubectl get all时是否显示

从kubernetes1.8中开始,在创建资源的时候如果指定了ower reference对象,则删除父对象的时候其子对象也会自动删除,所以对于有relationship的资源需要设置这个字段

informer

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 成功。

controller

sample-controller 完整的官方demo,注释很详细

使用 client-go 控制原生及拓展的 Kubernetes API 从client-go使用到Controller的编写,全覆盖,由google大佬所写

Writing Controllers写controller的注意事项,在上面的sample-controller中会有一些工程实践

A Deep Dive Into Kubernetes Controllers 很详细的controller的实现步骤,推荐

controller中的event recorder相关

Kubernetes Events介绍 上中下

event有个过期时间,默认时间是1h, 所以如果需要一直显示给用户的话要不断用recorder来记录,event是独立存在的一种资源,当describe 其他资源的时候会从其中获取对应的event,

codegen生成client-go api

Kubernetes Deep Dive: Code Generation for CustomResources codegen的使用方式

Extend Kubernetes 1.7 with Custom Resources 这是一个不用code-gen实现的controller

最后发现一篇相似的博文开发operator扩展kubernetes 调研整理,内容有些重复,哈哈

最新文章

  1. AEAI ESB培训大纲
  2. 鼠标/手指相对于元素的坐标(px转百分比)
  3. ADT Ubuntu X64 下ia32-libs替换等【待编辑】
  4. lnmp配置Yii2规则
  5. daterangepicker 日期范围插件自定义 可选 年份
  6. 利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)
  7. SpreadJS 中应用 KnockoutJS 技术
  8. shopping cart<代码>
  9. hiho_1066_并查集
  10. IPC_共享内存
  11. 反汇编一个简单的C程序
  12. 利用反射把DataTable自动赋值到Model实体(自动识别数据类型)
  13. ubuntu14.04(64位置) ADB Not Responding
  14. 软工+C(2017第5期) 工具和结构化
  15. 02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维
  16. ELK系列~nxlog实现多位置文件的收集
  17. 痞子衡嵌入式:PCM编码与Waveform音频文件(.wav)格式详解
  18. Visual Studio 2017 集成Crystal Report为ASP.NET MVC呈现报表
  19. Git 删除提交记录
  20. .NET 黑魔法 - asp.net core 自定义格式的响应

热门文章

  1. MIP (百度移动网页加速器)
  2. 教你怎么样在大陆直接使用google搜索
  3. springMVC框架+POI组件导出Excel
  4. 2017年PHP程序员未来路在何方——韩天峰
  5. 移动端H5地图矢量SHP网格切分打包方案
  6. JavaWeb学习笔记八 监听器
  7. VC++开发AutoCAD 2018/objectARX 用向导新建项目无法新建的问题
  8. string和c_str()使用时的坑
  9. python 面向对象的程序设计
  10. 第二次作业-Steam软件分析