k8s 自定义 controller 三部曲之一: 创建 CRD(Custom Resource Definition)
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
k8s 系统中 controller 扮演着重要角色,开发自定义 controller 是深入学习和理解 controller 的有效途径,《k8s 自定义 controller 三部曲》系列会逐步完成一次完整的自定义 controller 实战;
实战概要
整个三部曲的目标如下:
创建自定义 API 对象(Custom Resource Definition),名为 Student;
用代码生成工具生成 informer 和 client 相关代码;
创建并运行自定义控制器,k8s 环境中所有 Student 相关的"增、删、改"操作都会被此控制器监听到,可以根据实际需求在控制器中编写业务代码;
环境信息
实战环境的版本信息如下,请确保以下软件都已运行正常(Etcd 只是用来查看数据的,可以选择不装),并且 kubectl 工具可以在 k8s 环境正常操作:
操作系统 :CentOS Linux release 7.6.1810
Kubernetes:1.13
Go 版本:1.12
Etcd:3.3.1(查看数据时用到,也可以不安装)
本篇概要
本篇是三部曲的第一篇,我们先自定义一个 API 对象 Student,然后让 k8s 接收 Student 的定义,这样我们在 k8s 创建 Student 对象时,k8s 就能接收并保存了,就像先有了 pod 定义,才能创建 pod 一样;
源码下载
接下来详细讲述应用的编码过程,如果您不想自己写代码,也可以在 GitHub 下载完整的应用源码,地址和链接信息如下表所示:
这个 git 项目中有多个文件夹,本章源码在 k8s_customize_controller 这个文件夹下,如下图红框所示:
创建 CRD
创建 CRD 的第一步是通过官方文档做初步了解,地址:https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#create-a-customresourcedefinition
登录可以执行 kubectl 命令的机器,创建 student.yaml 文件,内容如下:
在 student.yaml 所在目录执行命令 kubectl apply -f student.yaml ,即可在 k8s 环境创建 Student 的定义,今后如果发起对类型为 Student 的对象的处理,k8s 的 api server 就能识别到该对象类型了,如下所示,可以用 kubectl get crd 和 kubectl describe crd stu 命令查看更多细节, stu 是在 student.yaml 中定义的简称:
如果您已配置好 etcdctl,可以访问 k8s 的 etcd 上存储的数据,那么执行以下命令,就可以看到新的 CRD 已经保存在 etcd 中了:
上述命令用来查看路径**/registry/apiextensions.k8s.io/customresourcedefinitions/**之下的所有键值对,可以见到刚才创建的 CRD 信息,如下:
创建 Student 对象
前面的步骤使得 k8s 能识别 Student 类型了,接下来创建个 Student 对象试试;
创建 object-student.yaml 文件,内容如下:
在 object-student.yaml 文件所在目录执行命令 kubectl apply -f object-student.yaml ,会看到提示创建成功:
执行命令 kubectl get stu 可见已创建成功的 Student 对象:
创建成功的 Stutend 对象存储在 etcd 中是什么样的呢,如果您的 etcdctl 已经配置好,执行以下命令即可:
控制台输出的就是该 Student 对象存储在 etcd 中的内容,如下:
至此,自定义 API 对象(也就是 CRD)就创建成功了,此刻我们只是让 k8s 能识别到 Student 这个对象的身份,但是当我们创建 Student 对象的时候,还没有触发任何业务(相对于创建 Pod 对象的时候,会触发 kubelet 在 node 节点创建 docker 容器),这也是后面的章节要完成的任务,点击链接进入下一段实战: 《k8s 自定义 controller 三部曲之二:自动生成代码》
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/8c1081369eb49ec9cb4e2ba15】。文章转载请联系作者。
评论