如何通过client-go和golang检索kubernetes指标
我想通过golang访问kubernetes的指标.类似于每个节点的cpu和内存,以及pod和/或命名空间的相同内容.
我有点迷失在这里,因为文档不是那么清晰. 我了解到有heapster(根据github repo不推荐使用).还有度量服务器和休息api. 我在哪里可以找到一些开始的例子?我不想在kubernetes中安装其他应用,包或服务.我想尽可能地获取本地信息. 解决方法
正如问题中所解释的那样,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 注意:您可能需要在json.Unmarshal之前更改类型.您可以仅为您感兴趣的字段定义类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |