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?