Используя следующий код:
func GetPods(clientset *kubernetes.Clientset, name, namespace string) ([]corev1.Pod, error) {
list, err := clientset.CoreV1().Pods(namespace).List(metav1.ListOptions{
LabelSelector: fmt.Sprintf("app=%s", name),
})
if err != nil {
return nil, err
}
return list.Items, nil
}
И затем выведите результаты в yaml, используя gopkg.in/yaml.v2
, и вот предложение yaml, описывающее ресурс контейнера:
resources:
limits:
cpu:
format: DecimalSI
memory:
format: BinarySI
requests:
cpu:
format: DecimalSI
memory:
format: BinarySI
, которое включаетни один из фактического количества ресурса, который меня на самом деле интересует, который должен выглядеть следующим образом, используя kubectl get pod xxx -o yaml
:
resources:
limits:
cpu: "4"
memory: 8Gi
requests:
cpu: 200m
memory: 100Mi
Так, как я могу правильно получить yaml спецификации pod, который включает в себя всю информацию о ресурсе, используя библиотеку Голанга?Что я сделал не так в вышеописанном процессе?
Обновление
Я заметил Pod.String
и Pod.Marshal
методы.
Вывод pod.String()
выглядит как отформатированная строка экземпляра core.v1.Pod
, мне это не очень полезно, поскольку он не сериализован.
Pod.Marshal()
дает байтовый массив, содержит многотарабарщины при печати.Сам метод является одним из тех недокументированных методов внутри k8s.io/api/core/v1/generated.pb.go
, я действительно не знаю, что делать с его выводом:
func (p *PodResolver) SpecYaml() (string, error) {
bs, err := p.pod.Marshal()
fmt.Println(string(bs))
return string(bs), err
}
// prints a whole lot of gibberish like cpu\x12\x03\n\x014\n\x0f\n\x06memory\x12\x05\n\x038Gi\x12\r\n\x03cpu\x12\x06\n\x04200m\x12\x11\n\x06memory\x12\a\n\x05100MiJ-\n\n