k8s aggregated api的编写思路

参考k8s官方的sample-apiserver进行编写(项目地址:GitHub - kubernetes/sample-apiserver: Reference implementation of an apiserver for a custom Kubernetes API.)

说明:网上对于aggregated api的实战性文章非常少,有关这类的文章是在推荐使用apiserver-builder这个工具,但是在学习aggregated api编写的过程中,我觉得这个工具对于代码开发人员不太友好(起码对我这个初学k8s又要进行aggregated api开发的同学),封装的太好了,以至于很难明白其中的实现流程,代码所展现的也不是平时我所理解的web服务的代码结构(很难找到url注册以及handler注册的地方)

场景:

1)编写k8s风格的web服务 & 复用k8s的认证和鉴权;

2)想要实现类似CRD的功能,但是又不想以etcd作为后端存储

通过学习sample-apiserver,可以比较快速的通过运行sample-apiserver来了解aggregated api的运行流程并进行编码

1)编写storage,存储到map[${apiVersion}]map[${resource}]${xxx_storage}中,并注册到genericAPIServer中

1.1)storage的作用:${resource}用于注册url的subPath,${xxx_storage}表示对应url的处理逻辑,storage实现了什么接口,就会支持对应的http method,比如:实现了Getter接口,就支持GET方法

1.2)sample-apiserver中aggregated-apiserver运行时附带运行了一个etcd,这是因为代码中的storage底层是依附于etcd实现的,如果你的storage不用依赖etcd进行逻辑的处理,可以不用添加etcd这个容器

k8s aggregated api的编写思路_第1张图片

2)编写CustomResource定义(这个需要自己定义结构体),编写aggregated api时,一定需要新增CustomResource

2.1)结构体定义目录结构

k8s aggregated api的编写思路_第2张图片

2.2)结构体定义注意事项

k8s aggregated api的编写思路_第3张图片

2.3)register.go理解

k8s aggregated api的编写思路_第4张图片

2.3.1)SchemeBuilder中用于存储需要给Scheme中注册添加对资源类型描述的相关信息、Register用于给SchemeBuilder中添加函数、AddToScheme用于将SchemeBuilder登记的函数实施到Scheme中(会有一个地方统一调用所有的AddToScheme)

2.4)生成代码:

直接复制hack目录下的东西,并修改update-codegen.sh中部分东西

2.4.1)修改generate-groups.sh和generate-internal-groups.sh,具体参数的含义,这两个脚本内有样例介绍 

你可能感兴趣的:(kubernetes(k8s),k8s)