《 Kubebuilder v2 使用指南 》-P1-总览篇

《 Kubebuilder v2 使用指南 》

Gitbook

《 Kubebuilder v2 使用指南 》专栏已整理打包为gitbook电子书,阅读更紧凑和连贯,推荐点击直达:
Gitbook-《 Kubebuilder v2 使用指南 》

前言

K8s内置的build-in 资源类型,可以组合使用以满足绝大部分场景的部署需求,更进一步地,对于追求更高自由度、有特殊需求的场景下,在kubernetes v1.7 后的版本开始支持CRD(CustomResourceDefinition),无需修改组件代码,即可通过CRD向APIServer注入自定义资源的方式,对内置资源进行上层封装,实现自定义环境部署和运行逻辑。APIServer会根据CRD的指定,自动生成CRD的restful路径,有关此路径的restful请求,转发给对应的CRD controller,以外部插件的形式实现了对k8s内置资源以及内置控制逻辑的扩展,很大程度地增加了管理和使用kubernetes的灵活性。

而作为kubernetes的进阶玩法,上手CRD需要一定的k8s使用经验和go开发基础。此前通过阅读controller部分的源码:Kubernetes Controller源码阅读 ,可清晰地认识到管理每种资源的设计核心是控制器。控制器通过informer机制,与apiserver交互,按照预先设计的逻辑,对watch资源进行不断地修正、收敛,使资源的状态 不断接近、最终达成指定的目标状态。显而易见的是,CRD的设计核心,同样也是控制器。

Why kubebuilder

如果参照内置controller的实现,用client-go来从头到尾自己撸一个CRD controller,比较繁琐。好在CRD功能从alpha到现在已经有一年有余了,市面上已有多款CRD脚手架工具。比较常用的有Kubernetes OperatorKubebuilder,两者大概对比了一下,其中Kubernetes Operator由CoreOS出品,包管理用的是go dep;而Kubebuilder由k8s-sig官方团队打造,包管理使用的是go mod。go mod比较友好的是不依赖GOPATH,大概率会成为今后的主流,且还是官方的团队出品。因此,选择了Kubebuilder

Kubebuilder 使用步骤

kubebuilder构建CRD一般分为如下几步:

  • 1.项目初始化
  • 2.设计CRD的结构,具体来说即CRD资源的Spec和Status结构设计
  • 3.设计和实现CRD Controller(Reconciler)的运行逻辑
  • 4.本地调试和测试
  • 5.正式发布到k8s中运行

专栏内的各篇文章,大致按照这几个步骤来进行编排。

专栏导航

Kubebuilder的官方文档友好度尚可,直接以CRD CronJob对build-in Job资源的管理举例,但个人感觉精细度略显不足,且目前全网kubebuilder v2版本的第三方文档都很缺乏,所以在使用过程中踩了不少坑。因此开一个专栏,从零开始,将我的CRD实例的设计的思路、代码实现、使用过程中遇到的问题 整理出来放在专栏中,希望给后面看到的朋友提供一些帮助,对于如何设计和实现自己所需要的CRD以及利用kubebuilder有更为清晰的认识。

专栏有以下几篇文章:

Github

专栏中基于kubebuilder构建的CRD实例完整的代码已经放入github中,仅供参考:

https://github.com/yinwenqin/CRD-Unit

Reference

https://book.kubebuilder.io/

https://book-v1.book.kubebuilder.io/basics/simple_controller.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章