k8s client-go快速入门教程及源代码阅读之RESTClient
💡
原文中文,约9100字,阅读约需22分钟。
📝
内容提要
本文分析了k8s的RESTClient的构造和请求过程,包括静态和动态客户端的使用。构造请求时需要设置路径前缀、超时和http请求头。发送请求时进行限流和重试,然后将响应转换成指定类型。动态客户端的结果封装在unstructured.UnstructuredList或unstructured.Unstructured中。解码过程中使用gojson.RawMessage对象可以反序列化任何对象。
🎯
关键要点
- 本文分析了k8s的RESTClient的构造和请求过程,包括静态和动态客户端的使用。
- k8s的API遵循RESTFul规范,客户端以对应的约定形式构造RESTClient。
- 请求过程中重要的两件事是通过GVR/GVK构造请求和将响应内容转换成特定类型。
- 静态客户端在调用时能确定目标对象,而动态客户端无法确定,通常返回unstructured.UnstructuredList或unstructured.Unstructured。
- 类型转换过程复杂,本文将其视为黑盒子进行描述。
- 通过静态客户端的例子回顾client-go的请求过程。
- 构造请求时需要设置路径前缀、超时和HTTP请求头。
- 发送请求的核心是通过Request对象发送请求并获得响应。
- 请求限流和重试机制是发送请求的重要部分。
- 类型转换通过transformResponse函数实现,使用decoder进行解码。
- 动态客户端的结果封装在unstructured.UnstructuredList或unstructured.Unstructured中,无法直接返回特定类型对象。
- 动态客户端的解码过程不需要判断目标类型,统一解码到UnstructuredList或Unstructured。
- gojson.RawMessage对象可以反序列化任何对象,适用于不确定的数据结构。
➡️