K8s Custom Resource Definition扩展

在前一篇文章 K8s 系统扩展 中我们介绍了K8s扩展的基本概念,本文我们将主要了解下CRD的具体扩展实现,行文思路: 开发CRD在做什么 通常开发CRD意味着我们希望将自定义概念(静态资源、可执行单元等)添加到K8s 集群中进行管理,下图我们抽象了前开发周期(也就是开发测试迭代)逻辑视图: 自定义资源(CR)创建的简单流程: 可用的工具 扩展CRD最原始的方法是使用K8s client-go库来实现与K8s集群的交互,主要是和apiserver交互,当然经过长时间的积累我们现在并不需要用这么基础的库来实现我们的CRD,比较常用的有 kubebuilder 和 operator-sdk,两者都是对使用官方的controller-tools和controller-runtime封装,只是侧重点不太一样,kubebuilder相对来说更简单易用,operator-sdk对上层operator的支持更好些 基于kubebuilder实现CRD 官网(https://book.kubebuilder.io/)的介绍已经很详细了,这里只简要介绍下几个重要的点和需要注意的问题,我们以创建一个自定义资源Steward作为我们的逻辑实体,oam(operations and maintenance)作为域下的一个管理分组,域为crd.fp.net 使用以下命令来初始化CRD开发代码 #初始化scaffoldkubebuilder init --domain crd.fp.net#初始化api controller代码kubebuilder create api --group oam --version v1 --kind Steward#初始化webhook 代码kubebuilder create webhook --group oam --version v1 --kind Steward --defaulting --programmatic-validation Makefile 说明 make manifests #自动构建manifest yamlmake install #安装资源文件,并不会创建namesapce启动程序make deploy IMG=${image:v} #启动controller Cert 初始化 下面代码可以添加到Makefile中或者自己的Makefile处理certificate,这里使用自定义处理更方便我们了解整个处理逻辑,当然你也可以使用推荐的certmanager进行certificate管理 具体测试步骤 开发注意事项 Read more