rest - 理解 Go 中 Kubernetes API 框架的逻辑

标签 rest api go kubernetes

我目前正在努力学习 Go,我之前没有使用过的 kubernetes API 的一些细节以及 Go 的 kubernetes api 框架,希望您能帮助理解 Go 的语法该框架以及人们为什么要使用它。

老实说,如果框架包含与 REST 端点相同的信息,我不知道为什么要首先使用它。直接通过 http 库调用 API 不是更有意义吗?

这里有一个例子(取自 some real code):

pod, err := kubecli.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})

我觉得麻烦的是我必须look up everything in the API docs然后我还需要弄清楚 /v1/ 转换为 CoreV1()。而且我什至不确定在哪里可以找到它。整个 block metav1.GetOptions{} 似乎完全没有必要,或者它代表了 HTTP 请求的哪一部分?

我希望我能弄清楚什么是困惑,并希望您能帮助解决它。

编辑:

这也是一个示例,由新的操作符框架生成,遗憾的是它并没有让它变得更好:

 return &v1.Pod{
    TypeMeta: metav1.TypeMeta{
            Kind:       "Pod",
            APIVersion: "v1",
    },
    ObjectMeta: metav1.ObjectMeta{
            Name:      "busy-box",
            Namespace: cr.Namespace,
            OwnerReferences: []metav1.OwnerReference{
                    *metav1.NewControllerRef(cr, schema.GroupVersionKind{
                            Group:   v1alpha1.SchemeGroupVersion.Group,
                            Version: v1alpha1.SchemeGroupVersion.Version,
                            Kind:    "Memcached",
                    }),
            },
            Labels: labels,
    },
    Spec: v1.PodSpec{
            Containers: []v1.Container{
                    {
                            Name:    "busybox",
                            Image:   "busybox",
                            Command: []string{"sleep", "3600"},
                    },
            },
    },
 }

API docs对这个 TypeMeta 对象一无所知。第二个元素被称为 ObjectMeta: 而不是 metadata。我的意思是,我不是魔术师。我怎么会知道。

最佳答案

我有点晚了,但这是我的 2 美分。

为什么要使用 client-go 而不是 http

client-go 有很多专业人士。

  1. Kubernetes 资源被定义为强类型类,意味着更少的拼写错误调试和易于重构。

  2. 当我们操作一些资源时,它自动通过集群进行身份验证(doc),它只需要一个有效的配置。而且我们不需要知道身份验证是如何完成的。

  3. 它有多个版本兼容与不同的 Kubernetes 版本。它使我们的代码更容易与指定的 kubernetes 版本保持一致,而无需了解 API 更改的每一个细节。

我怎么知道应该调用哪个类和方法

API Reference ,每个资源都有最新的 Group 和 Version 标签。 例如,Pod是组 core,版本 v1,种类 Pod 在 v1.10 中。

GoDoc列出了每个类的所有属性和详细说明的链接,例如 Pod .

所以调用 CoreV1() 可以找到 pod 列表,然后 Pods(namespace string) ,然后 List(opts meta_v1.ListOptions) .

关于rest - 理解 Go 中 Kubernetes API 框架的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50281984/

相关文章:

go - 依赖注入(inject)和测试

javascript - SharePoint 2013 客户端上下文 : How to DELETE specific list items by MULTIPLE CONDITION filter?

api - Java标准库: Which methods are with biggest number of arguments in the library?

go - 在 Go 中设置函数参数类型

android - 我是否需要在 Flickr 上进行身份验证才能检索我自己的照片集?

php - 如何从 pinterest 获取所有图钉?仅获得 50 个引脚

go - 反射(reflect)值(value)问题

node.js - MongoServerError:聚合期间的 PlanExecutor 错误::由::'newRoot' 表达式引起,表达式必须计算为对象

node.js - 将照片从手机上传到 Node 服务器的最佳方式是什么

java - 调用 Jenkins API 时获取 "SocketException Connection Reset"