本文介绍了k8s源码中基于Scheme的编解码机制,包括注册GVK、类型转换和默认值设置。通过示例代码展示了通过Scheme获取对象GVK以及通过GVK获取对象实例的过程。还介绍了静态客户端编解码器的构造过程,有助于解析k8s的数据结果。
本文分析了k8s的RESTClient的构造和请求过程,包括静态和动态客户端的使用。构造请求时需要设置路径前缀、超时和http请求头。发送请求时进行限流和重试,然后将响应转换成指定类型。动态客户端的结果封装在unstructured.UnstructuredList或unstructured.Unstructured中。解码过程中使用gojson.RawMessage对象可以反序列化任何对象。
动态客户端的价值在于灵活,不用重新生成客户端代码就能访问k8s集群中的所有资源。动态客户端的代码解析主要分为四个部分:将对象序列化成[]byte对象,获取子资源的名字,构造请求,将结果解码并返回。静态客户端的接口调用比较机械化,不够灵活,所以存在动态客户端。两者各有优缺点。
client-go的客户端分为静态客户端和动态客户端,静态客户端接口固定,无法访问非k8s内置资源,动态客户端灵活但需要了解GVK/GVR等前置知识,两者底层都使用rest.RESTClient对象,静态客户端构造简单通过GVR定位资源客户端,常用接口包括获取、新增、更新、删除,静态客户端代码通过代码生成,阅读起来简单。
完成下面两步后,将自动完成登录并继续当前操作。