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对象可以反序列化任何对象,适用于不确定的数据结构。
➡️

继续阅读