go - core.v1.Pod.PodSpec 中未填充 cpu/内存量

标签 go kubernetes

使用以下代码:

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
}

然后使用gopkg.in/yaml.v2将结果转储到yaml中,这里是描述容器资源的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

那么如何使用 golang 库正确获取包含所有资源信息的 pod spec yaml?上面的过程我做错了什么?

更新

我注意到 Pod.StringPod.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

最佳答案

您可以简单地在数量字段上调用 ​​String() 方法,它会返回类似于“100m”的内容

Quantity 类型似乎没有任何 yaml 标签。

关于go - core.v1.Pod.PodSpec 中未填充 cpu/内存量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50734067/

相关文章:

go - Kadmelia K-Bucket 算法中的路由表,无需遍历节点 ID 中的每一位

go - 预加载在 *models.Catalog 中找不到字段 fieldName

go - 如何将 Go dep 与 GitLab 子组一起使用

kubernetes - 如何让 jupyter-hub 访问我的私有(private) Docker 镜像存储库?

tensorflow - 使用Nvidia GPU节点在Kubernetes上运行示例Pod

kubernetes - 如何让我的 kubernetes 获取最新的 docker 镜像?

go - 如何获取给定 k8s 资源的 json 的 schema.GroupVersionResource

http - 为什么以下代码中的最后一个错误处理程序出现无效的参数错误?

Kubernetes (K8s) - 你能检查 pod 的重启时间吗?

kubernetes - Helm 删除所有早于某个日期、在某个日期之前更新或应用程序版本低于