加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何通过client-go和golang检索kubernetes指标

发布时间:2020-12-16 09:23:42 所属栏目:大数据 来源:网络整理
导读:我想通过golang访问kubernetes的指标.类似于每个节点的cpu和内存,以及pod和/或命名空间的相同内容. 我有点迷失在这里,因为文档不是那么清晰. 我了解到有heapster(根据github repo不推荐使用).还有度量服务器和休息api. 我在哪里可以找到一些开始的例子?我不
我想通过golang访问kubernetes的指标.类似于每个节点的cpu和内存,以及pod和/或命名空间的相同内容.

我有点迷失在这里,因为文档不是那么清晰.

我了解到有heapster(根据github repo不推荐使用).还有度量服务器和休息api.

我在哪里可以找到一些开始的例子?我不想在kubernetes中安装其他应用,包或服务.我想尽可能地获取本地信息.
使用client-go和golang访问这些信息的首选方法是什么?

解决方法

正如问题中所解释的那样,the documentations对初学者来说并不清楚.即使是go-client示例也会检索数据,我想获得Type支持.

正如above answer所解释的那样,您可以用JSON格式的[]字节获取数据.这就是我做到的.

package main

import (
    "encoding/json"
    "fmt"
    "time"

    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
)

// PodMetricsList : PodMetricsList
type PodMetricsList struct {
    Kind       string `json:"kind"`
    APIVersion string `json:"apiVersion"`
    Metadata   struct {
        SelfLink string `json:"selfLink"`
    } `json:"metadata"`
    Items []struct {
        Metadata struct {
            Name              string    `json:"name"`
            Namespace         string    `json:"namespace"`
            SelfLink          string    `json:"selfLink"`
            CreationTimestamp time.Time `json:"creationTimestamp"`
        } `json:"metadata"`
        Timestamp  time.Time `json:"timestamp"`
        Window     string    `json:"window"`
        Containers []struct {
            Name  string `json:"name"`
            Usage struct {
                CPU    string `json:"cpu"`
                Memory string `json:"memory"`
            } `json:"usage"`
        } `json:"containers"`
    } `json:"items"`
}

func getMetrics(clientset *kubernetes.Clientset,pods *PodMetricsList) error {
    data,err := clientset.RESTClient().Get().AbsPath("apis/metrics.k8s.io/v1beta1/pods").DoRaw()
    if err != nil {
        return err
    }
    err = json.Unmarshal(data,&pods)
    return err
}

func main() {
    // creates the in-cluster config
    // https://github.com/kubernetes/client-go/tree/master/examples#configuration
    config,err := rest.InClusterConfig()
    if err != nil {
        panic(err.Error())
    }
    // creates the clientset
    clientset,err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
    var pods PodMetricsList
    err = getMetrics(clientset,&pods)
    if err != nil {
        panic(err.Error())
    }
    for _,m := range pods.Items {
        fmt.Println(m.Metadata.Name,m.Metadata.Namespace,m.Timestamp.String())
    }
}

安装以下Go包:go get -u k8s.io/client-go/kubernetes k8s.io/client-go/rest

您可以使用以下端点来根据需要检索数据;

>节点:apis / metrics.k8s.io / v1beta1 / nodes
> Pods:apis / metrics.k8s.io / v1beta1 / pods
>默认命名空间的Pod:apis / metrics.k8s.io / v1beta1 / namespaces / default / pods
>特定Pod:/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/u0026lt;POD-NAMEu0026gt;

注意:您可能需要在json.Unmarshal之前更改类型.您可以仅为您感兴趣的字段定义类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读