我想通过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-NAME\u0026gt;
注意:您可能需要在json.Unmarshal之前更改类型.您可以仅为您感兴趣的字段定义类型.