eri*_*ork 10 api rest go kubernetes
我目前正试图围绕学习Go,我之前没有使用的kubernetes API的一些细节和Go的kubernetes api框架,并且非常感谢你帮助理解该框架的语法和为什么人们仍然使用它.
老实说,如果它包含与REST端点相同的信息,我不确定为什么首先使用框架.仅通过http
库直接调用API会不会更有意义?
这是一个例子(取自一些真实的代码):
pod, err := kubecli.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})
Run Code Online (Sandbox Code Playgroud)
我觉得麻烦的是,我必须在API文档中查找所有内容,然后我还需要弄清楚/v1/
转换为CoreV1()
.而且我甚至不确定我能在哪里看到它.整个块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"},
},
},
},
}
Run Code Online (Sandbox Code Playgroud)
该API文档不知道这事TypeMeta
的对象.并且第二个元素被调用ObjectMeta:
而不是metadata
.我的意思是,我不是魔术师.我怎么知道这个.
我有点晚了,但这是我的 2 美分。
client-go
而不是http
库有很多专业人士client-go
。
Kubernetes资源被定义为强类型类,意味着更少的拼写错误调试并且易于重构。
当我们操作一些资源时,它会自动向集群进行身份验证(doc),它只需要一个有效的配置。而且我们不需要知道身份验证到底是如何完成的。
它有多个版本兼容不同的 Kubernetes 版本。它使我们的代码更容易与指定的 kubernetes 版本保持一致,而无需了解 API 更改的每个细节。
在API 参考中,每个资源都有最新的 Group 和 Version 标签。例如,Pod在 v1.10 中是 group core
、 version v1
、 kind Pod
。
GoDoc列出了每个类(如Pod)的所有属性和详细解释链接。
CoreV1()
所以可以通过调用, then Pods(namespace string)
, then找到 pod 列表List(opts meta_v1.ListOptions)
。
归档时间: |
|
查看次数: |
448 次 |
最近记录: |