【问题标题】:Kubernetes Rest API node CPU and RAM usage in percentageKubernetes Rest API 节点 CPU 和 RAM 使用百分比
【发布时间】:2021-09-30 11:49:00
【问题描述】:

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

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

【问题讨论】:

    标签: docker kubernetes kubernetes-metrics


    【解决方案1】:

    当您发出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%
    

    【讨论】:

      【解决方案2】:

      我会推荐你​​使用官方的 Kubernetes 客户端库。在那里,您可以实现 kubectl 上可用的所有功能。 您可以使用以下代码 sn-p 实现 kubectl top 命令

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

      【讨论】:

        猜你喜欢
        • 2020-04-25
        • 2018-11-27
        • 2021-12-29
        • 1970-01-01
        • 2020-11-19
        • 2019-12-10
        • 2023-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多