深入 API Machinery —— REST 映射
GVK 与 GVR 之间的映射关系被称为 REST 映射。
我理解意思是说: 在 Kubernetes 中,RESTMapping(REST 映射)用于将 GroupVersionKind(GVK)与 GroupVersionResource(GVR)之间建立映射关系。
-
- GVK 是 API 对象的唯一标识,包括 API 组、版本和资源类型。
- GVR 是 API 资源的标识,包括 API 组、版本和资源类型的名称。
REST 映射是 Kubernetes 提供的 API 功能之一,它负责处理客户端到服务器的 API 请求和响应,并确保请求发送到正确的 API 资源上。通过 REST 映射,客户端可以通过 GVK 来指定要操作的资源类型,然后 REST 映射会将其转换为服务器理解的 GVR 形式。
RESTMapping 对象包含以下属性:
-
- GroupVersionKind (GVK):指定要操作的资源类型的 API 组、版本和类型信息。
- GroupVersionResource (GVR):指定要操作的资源类型的 API 组、版本和资源名称信息。
- Scope:指定资源的作用范围,可以是 "Cluster" 或 "Namespaced",表示资源是集群范围的还是命名空间范围的。
- Kind:表示资源类型的字符串,例如 "Pod"、"Deployment" 等。
- APIVersion:表示资源类型的 API 版本,例如 "v1"、"apps/v1" 等。
- Resource:表示资源类型的字符串,例如 "pods"、"deployments" 等。
通过 RESTMapping,客户端可以根据 GVK 获取与其关联的 GVR,从而发送正确的 API 请求以操作相应的资源。这对于构建 Kubernetes 客户端或开发 Kubernetes 控制器等应用程序非常有用,因为它们需要与不同的 API 资源进行交互。
需要注意的是,RESTMapping 是根据已知的 Kubernetes API 服务器上的信息生成的,并且可能随着各个 Kubernetes 集群之间的配置和版本而有所不同。因此,要正确地进行 REST 映射,需要通过适当的方式与 Kubernetes API 服务器进行交互,获得有关 GVK 和 GVR 的准确信息。
RestMapper 是一个 Golang 接口,用于请求一个 GVK 所对应的 GVR,以下展示了如何根据给定的 GroupKind 和版本信息创建一个 RESTMapping 的实例:
import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest" "k8s.io/client-go/restmapper" ) func GetRestMapping(gk schema.GroupKind, versions ...string) (*restmapper.RESTMapping, error) { config := &rest.Config{ // 配置您的Kubernetes集群连接信息 // ... } mapper := restmapper.NewDeferredDiscoveryRESTMapper(memory.NewMemCacheClient(restmapper.ExtractAPIGroupVersionsOrDie(config)), dynamic.VersionInterfaces) groupResources, err := mapper.RESTMapping(gk, versions...) if err != nil { return nil, err } if len(groupResources) == 0 { return nil, fmt.Errorf("unable to find REST mapping for GroupKind: %v, versions: %v", gk, versions) } return &groupResources[0], nil }标签:资源类型,映射,Kubernetes,REST,API,GVR From: https://www.cnblogs.com/zuoyang/p/17515840.html