![](/img/trans.png)
[英]Would psutil.cpu_percentage depict a true CPU usage of a docker container running in Kubernetes?
[英]Kubernetes Rest API node CPU and RAM usage in percentage
我想開發一個簡單的 web 服務,它返回 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 請求。 您可以通過向kubectl
添加--v=9
標志來查看確切的端點。
例如,就我而言
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'
[...]
(還有很多,這兩個對於回答您的問題很重要)
第一次請求返回
{
"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 和內存。
第二個請求返回(截斷,響應巨大)
{
"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 和內存給正在運行的 pod。
如您所見,沒有以百分比形式返回使用率的端點,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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.