В настоящее время я пытаюсь сосредоточиться на изучении Go, некоторых подробностях API-интерфейса kubernetes, который я не использовал ранее, и API-интерфейса kubernetes для Go одновременно, и буду признателен за помощь в понимании грамматики эта структура и почему люди все равно ее используют.
Честно говоря, я не уверен, зачем вообще использовать фреймворк, если он содержит ту же информацию, что и конечная точка REST. Разве не имеет смысла просто вызывать API напрямую через библиотеку http
?
И вот один пример (взят из некоторого реального кода ):
pod, err := kubecli.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})
Что меня беспокоит, так это то, что мне нужно посмотреть все в документации API , а затем мне необходимо выяснить, что /v1/
переводится в CoreV1()
. И я даже не уверен, где я мог бы это посмотреть. Также весь блок metav1.GetOptions{}
кажется совершенно ненужным, или какая часть HTTP-запроса представлена им?
Я надеюсь, что смогу прояснить, в чем путаница, и надеюсь на вашу помощь в ее устранении.
Edit:
Вот также пример, сгенерированный из новой структуры оператора, которая, к сожалению, не делает ее намного лучше:
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 ничего не знают об этом TypeMeta
объекте. И второй элемент называется ObjectMeta:
вместо metadata
. Я имею в виду, я не волшебник. Откуда мне это знать.