英文:
How can I use Kubernetes API to get the metrics of a cluster like memory in golang?
问题
我正在尝试在Go程序中获取集群利用率的值(CPU利用率、内存、文件系统、网络传输、Pod数量)。我们是否有API可以直接从Kubernetes或OpenShift获取集群数据,并可以从Go程序中调用?或者我们可以获取单个节点的数据并将其相加以获取总的集群利用率值?
在程序中使用os/exec执行kubectl命令无法获取这些值。
英文:
I am trying to get the cluster utilization values (CPU Utilization, Memory, File System, Network transfer, pod count) in a go program. Do we have api's to get the cluster data directly from k8s or openshift which can be called from a go program ? Or can we get the individual node data and add it up to get the total cluster utilization values ?
Executing kubectl commands using os/exec in the program is not able to fetch the values.
答案1
得分: 2
Kubernetes 度量服务器通过Summary API提供所有这些信息。
使用命令行调用此API非常简单。
kubectl get --raw "/api/v1/nodes/${NODE_NAME}/proxy/stats/summary"
如果您使用client-go,则可以使用以下代码调用此API:
request := clientset.CoreV1().RESTClient().Get().Resource("nodes").Name(node.Name).SubResource("proxy").Suffix("stats/summary")
responseRawArrayOfBytes, err := request.DoRaw(context.Background())
if err != nil {
return nil, errors.Wrap(err, "failed to get stats from node")
}
请注意,根据官方度量服务器文档,端点将在metrics-server 0.6.x中更改为/metrics/resource
。
英文:
The Kubernetes metrics server offers all of this information via the Summary API.
Invoking this API is straight-forward using the command line.
kubectl get --raw "/api/v1/nodes/${NODE_NAME}/proxy/stats/summary"
And from go, if you are using client-go, this API can be invoked with:
request := clientset.CoreV1().RESTClient().Get().Resource("nodes").Name(node.Name).SubResource("proxy").Suffix("stats/summary")
responseRawArrayOfBytes, err := request.DoRaw(context.Background())
if err != nil {
return nil, errors.Wrap(err, "failed to get stats from node")
}
Note that, according to the official metrics server documentation, the endpoint will be changing to /metrics/resource
in metrics-server 0.6.x.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论