值不值得学:先看它解决什么问题
日常用 client-go 操作 Kubernetes 集群,写法基本是 List 加上各种 FieldSelector、LabelSelector,再手工做反序列化。查简单资源尚可,一旦遇到多条件过滤、字段裁剪或分页,代码就会写得又长又碎。这门短课要解决的场景很具体:把 SQL 语句和 client-go 查询打通,让你用类似 select name, status from pods where namespace='prod' 的写法,直接拿到反序列化后的对象列表。它不是教你背 Kubernetes API,而是帮你把集群查询做成一层薄薄的 SQL 抽象,后续做运维平台、内部诊断工具或自定义报表时,查询逻辑能收敛在一条 SQL 里,不再每次都改底层代码。
适合什么基础,建议先看哪几块
资料默认你已经写过 client-go 的 List/Watch,知道 Informer、GVR 这些概念,不再从零讲 Kubernetes 基础。若你连 go mod 引入 client-go 都没做过,建议先补基础再看,否则中段会卡住。建议先看 SQL 解析库与 AST 入门那节,理解一条 select 如何被拆成字段、表名、where 三段;接着直接跳到“表名自动推测 GVR”和“SQL 与 client-go 初步融合”这两块,把从 SQL 到集群查询的整条链路打通;最后看 FieldSelector、LabelSelector 与 where 条件结合的演示,确认它如何映射到 Kubernetes 原生过滤能力。这样安排比按顺序看更省时间,也更容易判断这层抽象是否契合你的项目。
学完能独立做什么,资料怎么配合练习
学完后,你应该能独立写一个小工具:接收一条 SQL,解析出表名并推测出对应 GVR,把 where 中的命名空间、标签等条件分别转成 FieldSelector 和 LabelSelector,再调用 client-go 拿到原始对象,按 select 字段裁剪后反序列化返回。它不会让你立刻造出完整的数据库,但足够支撑一个面向运维或研发的轻量查询入口。配合资料练习时,建议这样用:先在本机起一个测试集群,准备几个带不同标签的 Pod 和 Deployment;每看完一节,就用资料里的片段对着同一批资源写一条 SQL,观察返回结果是否和 kubectl 查出来的一致;重点自己构造 where 条件去测边界,比如标签不存在、字段名拼写错误、limit 为零,看你的封装能否给出合理报错。把这些边界跑通,这层 SQL 抽象才算真正落到你自己的代码库里,而不是照抄完就忘。
本课程是短课程(10课时左右)、思维开拓课。我们在前面课程常用的是client-go 等方式来获取k8s资源。那么我们能否用类似sql的方式来查询呢?今天课程就
课程目录
* 第1讲:SQL解析第三方库的使用、ast入门
* 第2讲:初步封装、把sql解析为k8s资源映射(select)
* 第3讲:区分select 字段和where 条件字段
* 第4讲:初步完成where条件的收集
* 第5讲:设定gvr 等关键字段的where条件
* 第6讲:通过“表名”自动推测出gvr
* 第7讲:把SQL初步和client-go融合完成初步查询
* 第8讲:SQL和client-go融合(2):支持limit 条件
* 第9讲:SQL和client-go融合(3):反序列化为对象列表
* 第10讲:FieldSelector和 sql where条件的结合 (演示课)
* 第11讲:LabelSelector和 sql where条件的结合






