Kubernetes Rest API 节点 CPU 和 RAM 使用百分比
Kubernetes Rest API node CPU and RAM usage in percentage
我想开发一个简单的网络服务,returns kubernetes 指标,如节点/pod CPU 和 RAM 使用百分比。
在 CLI 中,有像 kubectl top node
或 kubectl describe node
这样的命令,其中包含我需要的所有指标。但是我无法在 kubernetes REST api 端点中找到此类指标。我得到的最接近的是 /apis/metrics.k8s.io/v1beta1/nodes
端点,它显示 CPU 和 RAM 使用情况但没有百分比。
是否有这样的端点显示与 top
或 describe
命令中相同的信息,或者,也许有比 metrics.k8s.io
插件更好的方法。
当您发出 kubectl top node
时,kubectl 向多个端点发出多个 HTTP 请求。您可以通过将 --v=9
标志添加到 kubectl
.
来查看确切的端点
例如,就我而言
kubectl top node gke-cluster-1-default-pool-99238d56-bv6z --v=9
[...]
I0726 10:41:18.347144 1986 round_trippers.go:435] curl -k -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.21.0 (linux/amd64) kubernetes/cb303e6" 'https://<ip-address>/apis/metrics.k8s.io/v1beta1/nodes/gke-cluster-1-default-pool-99238d56-bv6z'
I0726 10:41:18.489068 1986 round_trippers.go:435] curl -k -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.21.0 (linux/amd64) kubernetes/cb303e6" 'https://<ip-address>/api/v1/nodes/gke-cluster-1-default-pool-99238d56-bv6z'
[...]
(还有很多,这两个对回答你的问题很重要)
第一个请求return
{
"kind":"NodeMetrics",
"apiVersion":"metrics.k8s.io/v1beta1",
"metadata":{
"name":"gke-cluster-1-default-pool-99238d56-bv6z",
"selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/gke-cluster-1-default-pool-99238d56-bv6z",
"creationTimestamp":"2021-07-26T08:41:19Z"
},
"timestamp":"2021-07-26T08:41:07Z",
"window":"30s",
"usage":{
"cpu":"86855567n",
"memory":"950228Ki"
}
}
.usage.cpu
和 .usage.memory
分别显示使用的 CPU 和内存。
第二个请求return(截断,响应很大)
{
"status":{
"capacity":{
"attachable-volumes-gce-pd":"15",
"cpu":"2",
"ephemeral-storage":"98868448Ki",
"hugepages-1Gi":"0",
"hugepages-2Mi":"0",
"memory":"4031624Ki",
"pods":"110"
},
"allocatable":{
"attachable-volumes-gce-pd":"15",
"cpu":"940m",
"ephemeral-storage":"47093746742",
"hugepages-1Gi":"0",
"hugepages-2Mi":"0",
"memory":"2885768Ki",
"pods":"110"
}
}
}
.status.allocatable.cpu
和 .status.allocatable.memory
显示可以分配多少 CPU 和内存给 运行 pods.
如您所见,没有端点 return 使用百分比,kubectl 即时计算,以人类友好的格式输出结果
$ kubectl top node gke-cluster-1-default-pool-99238d56-bv6z
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
gke-cluster-1-default-pool-99238d56-bv6z 108m 11% 928Mi 32%
我建议您使用官方 Kubernetes 客户端库。在那里你可以实现 kubectl 上可用的所有功能。
您可以使用以下代码片段实现 kubectl top 命令
[https://github.com/kubernetes-client/javascript/blob/master/examples/top.js][1]
我想开发一个简单的网络服务,returns kubernetes 指标,如节点/pod CPU 和 RAM 使用百分比。
在 CLI 中,有像 kubectl top node
或 kubectl describe node
这样的命令,其中包含我需要的所有指标。但是我无法在 kubernetes REST api 端点中找到此类指标。我得到的最接近的是 /apis/metrics.k8s.io/v1beta1/nodes
端点,它显示 CPU 和 RAM 使用情况但没有百分比。
是否有这样的端点显示与 top
或 describe
命令中相同的信息,或者,也许有比 metrics.k8s.io
插件更好的方法。
当您发出 kubectl top node
时,kubectl 向多个端点发出多个 HTTP 请求。您可以通过将 --v=9
标志添加到 kubectl
.
例如,就我而言
kubectl top node gke-cluster-1-default-pool-99238d56-bv6z --v=9
[...]
I0726 10:41:18.347144 1986 round_trippers.go:435] curl -k -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.21.0 (linux/amd64) kubernetes/cb303e6" 'https://<ip-address>/apis/metrics.k8s.io/v1beta1/nodes/gke-cluster-1-default-pool-99238d56-bv6z'
I0726 10:41:18.489068 1986 round_trippers.go:435] curl -k -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.21.0 (linux/amd64) kubernetes/cb303e6" 'https://<ip-address>/api/v1/nodes/gke-cluster-1-default-pool-99238d56-bv6z'
[...]
(还有很多,这两个对回答你的问题很重要)
第一个请求return
{
"kind":"NodeMetrics",
"apiVersion":"metrics.k8s.io/v1beta1",
"metadata":{
"name":"gke-cluster-1-default-pool-99238d56-bv6z",
"selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/gke-cluster-1-default-pool-99238d56-bv6z",
"creationTimestamp":"2021-07-26T08:41:19Z"
},
"timestamp":"2021-07-26T08:41:07Z",
"window":"30s",
"usage":{
"cpu":"86855567n",
"memory":"950228Ki"
}
}
.usage.cpu
和 .usage.memory
分别显示使用的 CPU 和内存。
第二个请求return(截断,响应很大)
{
"status":{
"capacity":{
"attachable-volumes-gce-pd":"15",
"cpu":"2",
"ephemeral-storage":"98868448Ki",
"hugepages-1Gi":"0",
"hugepages-2Mi":"0",
"memory":"4031624Ki",
"pods":"110"
},
"allocatable":{
"attachable-volumes-gce-pd":"15",
"cpu":"940m",
"ephemeral-storage":"47093746742",
"hugepages-1Gi":"0",
"hugepages-2Mi":"0",
"memory":"2885768Ki",
"pods":"110"
}
}
}
.status.allocatable.cpu
和 .status.allocatable.memory
显示可以分配多少 CPU 和内存给 运行 pods.
如您所见,没有端点 return 使用百分比,kubectl 即时计算,以人类友好的格式输出结果
$ kubectl top node gke-cluster-1-default-pool-99238d56-bv6z
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
gke-cluster-1-default-pool-99238d56-bv6z 108m 11% 928Mi 32%
我建议您使用官方 Kubernetes 客户端库。在那里你可以实现 kubectl 上可用的所有功能。 您可以使用以下代码片段实现 kubectl top 命令
[https://github.com/kubernetes-client/javascript/blob/master/examples/top.js][1]