2

我想开发一个简单的 web 服务,它返回 kubernetes 指标,如节点/pod CPU 和 RAM 使用百分比。在 CLI 中有类似kubectl top nodekubectl describe node带有我需要的所有指标的命令。但是我在 kubernetes REST api 端点中找不到这样的指标。我得到的最接近的是/apis/metrics.k8s.io/v1beta1/nodes端点,它显示 CPU 和 RAM 使用情况,但没有百分比。

top是否有这样的端点显示与或命令相同的信息,或者describe也许有比metrics.k8s.io插件更好的方法。

4

2 回答 2

3

当您发出时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'
[...]

(还有很多,这两个对于回答您的问题很重要)

第一次请求返回

{
    "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显示可以为正在运行的 pod 分配多少 CPU 和内存。


如您所见,没有以百分比返回使用情况的端点,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%
于 2021-07-26T08:59:48.767 回答
0

我建议你使用官方的 Kubernetes 客户端库。在那里,您可以实现 kubectl 上可用的所有功能。 您可以使用以下代码片段实现 kubectl top 命令

[https://github.com/kubernetes-client/javascript/blob/master/examples/top.js][1]

于 2021-07-26T11:49:20.883 回答