Kubernetes编程——client-go基础—— 深入 API Machinery —— REST 映射

发布时间 2023-06-30 10:10:00作者: 左扬

深入 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 对象包含以下属性:

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
    }