kubebuilder
GV & GVK & GVR
GV: Api Group & Version
API Group 是相关 API 功能的集合
每个 Group 拥有一或多个 Versions
GVK: Group Version Kind
每个 GV 都包含 N 个 api 类型,称之为 Kinds,不同 Version 同一个 Kinds 可能不同
GVR: Group Version Resource
Resource 是 Kind 的对象标识,一般来 Kind 和 Resource 是 1:1 的,但是有时候存在 1:n 的关系,不过对于 Operator 来说都是 1:1 的关系
举个🌰,我们在 k8s 中的 yaml 文件都有下面这么几行
apiVersion: apps/v1 # 这个是 GV,G 是 apps,V 是 v1
kind: Deployment # 这个就是 Kind
sepc: # 加上下放的 spec 就是 Resource了
...根据 GVK K8s 就能找到我们到底要创建什么类型的资源,根据定义的 Spec 创建好资源之后就成为了 Resource,也就是 GVR。GVK/GVR 就是 K8s 资源的坐标,是我们创建/删除/修改/读取资源的基础。
使用kubebuilder
安装
我用的Mac:
初始化项目
功能编写
修改customtype_types.go文件:
kubebuilder 已经自动生成了 Operator 所需的大部分逻辑,只需要在customtype_controller.go文件的Reconcile函数中实现业务逻辑即可,完整代码:
本地功能验证
修改crd实例cr的config/samples/zhhnzw_v1_custompod.yaml:
部署
上一步只是把 controller 在集群外跑起来的,可以把它部署到集群内
可选操作
搭建 Docker Registry
相当于本地的 dockerhub
修改Docker服务的配置,配置一个本地域名:"insecure-registries": ["mock.com:5000"]
修改 /etc/host,添加一行记录:127.0.0.1 mock.com
查看 registry 服务当中存储的镜像:http://mock.com:5000/v2/_catalog
在部署推送镜像的时候就可以推送到本地镜像仓库了。
环境准备
使用 Operator SDK
Operator 是一个感知应用状态的控制器
CoreOS 推出此 SDK 旨在简化复杂的,有状态应用的管理控制
安装
我用的Mac
初始化项目
功能编写
生成的代码和 kubebuilder 都一样,省略。
部署
大部分操作与 kubebuilder 都一样,只有细节不同,如下:
Last updated
Was this helpful?