推荐好文 介绍 kubuilder源码和原理的文章
https://www.cnblogs.com/alisystemsoftware/p/11580202.html
来自另一篇文章推荐 :
https://blog.csdn.net/dustzhu/article/details/112029190
近期推荐实战- 20230424
https://www.cnblogs.com/bolingcavalry/archive/2021/08/25/15183342.html
推荐阅读1
https://developer.aliyun.com/article/798703
我们将 CRD, Controller, Webhook 三者合起来叫 Operator。一个 Operator 工程一般必须包含 CRD 和 Controller,Admission 是可选的。如果说 Kubernetes 是 “操作系统” 的话,Operator 是 Kubernetes 的第一层应用,它部署在 Kubernetes 里,使用 Kubernetes “扩展资源” 接口的方式向更上层用户提供服务。
推荐2:通过创建一个 Welcome 类型的资源,后台自动创建 Deployment 和 Service
https://www.cnblogs.com/zuoyang/p/16477192.html
实践kubebuild
https://blog.csdn.net/weixin_45413603/article/details/108170720
官网https://book.kubebuilder.io/
中文文档https://cloudnative.to/kubebuilder/
学习链接operator实战
一 简介
原理
用户向 Kubernetes API 服务注册一个带特定 schema 的资源,并定义相关 API
将扩展资源的数据存储到 Kubernetes 的 etcd 集群借助 Kubernetes 提供的 controller 模式开发框架,实现新的 controller,并借助 APIServer 监听 etcd 集群关于该资源的状态并定义状态变化的处理逻辑
具体流程如下图:
知乎链接:https://zhuanlan.zhihu.com/p/114659529
官网链接:
https://kubernetes.io/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
创建 CustomResourceDefinition
当你创建新的 CustomResourceDefinition(CRD)时,Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的,也可以 是集群作用域的,取决于 CRD 的 scope 字段设置。和其他现有的内置对象一样,删除 一个名字空间时,该名字空间下的所有定制对象也会被删除。CustomResourceDefinition 本身是不受名字空间限制的,对所有名字空间可用。
例如,如果你将下面的 CustomResourceDefinition 保存到 resourcedefinition.yaml 文件:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'
name: crontabs.stable.example.com
spec:
# 组名称,用于 REST API: /apis/<组>/<版本>
group: stable.example.com
# 列举此 CustomResourceDefinition 所支持的版本
versions:
- name: v1
# 每个版本都可以通过 served 标志来独立启用或禁止
served: true
# 其中一个且只有一个版本必需被标记为存储版本
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
# 可以是 Namespaced 或 Cluster
scope: Namespaced
names:
# 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>
plural: crontabs
# 名称的单数形式,作为命令行使用时和显示时的别名
singular: crontab
# kind 通常是单数形式的帕斯卡编码(PascalCased)形式。你的资源清单会使用这一形式。
kind: CronTab
# shortNames 允许你在命令行使用较短的字符串来匹配资源
shortNames:
- ct
参考文章1 自定义资源:
https://blog.csdn.net/Jacson__/article/details/125305201
参考文章2 自定义controller:
https://www.jianshu.com/p/0b7f914f5060