我想使用golang从kubernetes访问指标。每个节点的cpu和内存之类的内容,以及pod和/或名称空间的内容。
我有点迷失在这里,因为文档不够清晰。
我了解到有heapster
(根据github存储库已弃用)。还有metric server
和一个REST API。
在哪里可以找到一些入门示例?我不想在kubernetes中安装其他应用程序,程序包或服务。我想获得尽可能本地化的信息。 使用client-go和golang访问这些信息的首选方式是什么?
答案 0 :(得分:1)
如问题中所述,the documentations对于初学者来说并不明确。即使是go-client示例检索数据,我也想获得Type支持。
如above answer所述,您可以JSON格式获取[] byte数据。这就是我做的。
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
apis/metrics.k8s.io/v1beta1/pods
default
名称空间的窗格:apis/metrics.k8s.io/v1beta1/namespaces/default/pods
/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/<POD-NAME>
注意:您可能需要在json.Unmarshal
之前更改类型。您只能为感兴趣的字段定义类型。
答案 1 :(得分:1)
有一个更好的API:https://github.com/kubernetes/metrics。使用此功能,您不必创建数据结构或处理行字节切片。
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
metricsv "k8s.io/metrics/pkg/client/clientset/versioned"
...
)
...
clientset, err := metricsv.NewForConfig(config)
podMetricsList, err := clientset.MetricsV1beta1().PodMetricses("").List(metav1.ListOptions{})
答案 2 :(得分:0)
下面是使用REST API查询节点指标并返回JSON格式的[] byte的示例。将“节点”替换为“荚”,以获取荚/容器指标。
data, err := clientset.RESTClient().Get().AbsPath("apis/metrics.k8s.io/v1beta1/nodes").DoRaw()