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这个容器

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

2.1)结构体定义目录结构

2.2)结构体定义注意事项

2.3)register.go理解

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,具体参数的含义,这两个脚本内有样例介绍 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
"In aggregated query without GROUP BY"是一个错误信息,表示在一个聚合查询中没有使用GROUP BY子句。在SQL中,当使用聚合函数(如SUM、COUNT、AVG等)时,如果SELECT列表中还包含其他非聚合的列,则需要使用GROUP BY子句来指定按照哪些列进行分组。 这个错误信息的意思是,SELECT列表中的表达式1包含了非聚合的列'base_table.user_id',而在当前的sql_mode设置中,只允许在聚合查询中使用GROUP BY来指定分组。因此,需要修改查询语句,将非聚合的列添加到GROUP BY子句中,或者使用聚合函数对该列进行处理。 请注意,具体的修复方法可能因查询语句的具体情况而有所不同,可以根据错误信息中提供的具体查询语句进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [In aggregated query without GROUP BY是什么错误](https://blog.csdn.net/weixin_44126489/article/details/124429951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MYSQL||报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains ...](https://blog.csdn.net/Inochigohan/article/details/122380585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值