如何确定正在运行的Kubernetes pod的当前临时存储使用情况



如何使用kubectl判断一个pod当前使用了多少临时存储?

在Kubernetes pod规范中,我可以指定CPU、内存和临时存储的资源请求和限制:

resources:
requests:
memory: "60Mi"
cpu: "70m"
ephemeral-storage: "2Gi"
limits:
memory: "65Mi"
cpu: "75m"
ephemeral-storage: "4Gi"

然而,为了对临时存储设置好的请求和限制,我需要知道这个值对于一个正在运行的pod来说到底是什么,但我无法弄清楚。我可以使用kubectl top pod获取CPU和内存使用情况,但据我所知,只有在做出实际驱逐决定时,才会实际计算临时存储使用情况。

您可以通过raw命令执行此操作。

kubectl get --raw "/api/v1/nodes/(your-node-name)/proxy/stats/summary"

还有这个

kubectl get --raw "/api/v1/nodes/(your-node-name)/proxy/metrics/cadvisor""

编辑:

我现在已经为此创建了一个普罗米修斯出口商。

https://github.com/jmcgrath207/k8s-ephemeral-storage-metrics

这方面的纯原始方法是使用磁盘使用(du(Unix命令行。

外壳进入你的吊舱:

$ kubectl exec -it <pod-id> sh

将目录更改为临时存储的装载点(如果您使用的是卷装载(:

$ mount # check mount points if you'd like
$ cd /mnt/of/ephemeral
$ du .

如果您没有使用卷装载:

$ du .

还有其他工具可以用来获取指标:

  • cAdvisor也嵌入到kubelet代码中,在/stats/summary/metrics端点下公开。点击此处了解更多信息。示例输出:

    $ curl -k -H 'Authorization: Bearer <Redacted>' 
    https://node-hostname:10250/stats/summary
    {
    "node": {
    "nodeName": "node-hostname",
    "systemContainers": [
    {
    "name": "kubelet",
    ...
    "volume": [
    {
    "time": "2018-11-08T23:52:03Z",
    "availableBytes": 1969168384,
    "capacityBytes": 1969180672,
    "usedBytes": 12288,
    "inodesFree": 480748,
    "inodes": 480757,
    "inodesUsed": 9,
    "name": "kube-proxy-token-pprwb"
    }
    ],
    "ephemeral-storage": {
    "time": "2018-11-09T00:05:10Z",
    "availableBytes": 31057477632,
    "capacityBytes": 41567858688,
    "inodesFree": 4873887,
    "inodes": 5120000
    }
    ...
    }
    

    类似:

    $ curl -k -H 'Authorization: Bearer <Redacted>' 
    https://node-hostname:10250/stats/summary
    # HELP apiserver_audit_event_total Counter of audit events generated and sent to the audit backend.
    # TYPE apiserver_audit_event_total counter
    apiserver_audit_event_total 0
    # HELP apiserver_client_certificate_expiration_seconds Distribution of the remaining lifetime on the certificate used to authenticate a request.
    # TYPE apiserver_client_certificate_expiration_seconds histogram
    apiserver_client_certificate_expiration_seconds_bucket{le="0"} 0
    apiserver_client_certificate_expiration_seconds_bucket{le="21600"} 0
    apiserver_client_certificate_expiration_seconds_bucket{le="43200"} 0
    ...
    

    有关kubelet身份验证/授权的更多信息。

  • 普罗米修斯

有关K8s指标的更多信息,请点击此处。

假设您知道节点名称,只需运行:

$ kubectl describe $NODE_NAME

在最后,该命令的输出将包括关于Allocated resources的部分,包括ephemeral-storage:

Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource           Requests        Limits
--------           --------        ------
cpu                510m (12%)      300m (7%)
memory             334164096 (2%)  383500800 (2%)
ephemeral-storage  0 (0%)          0 (0%)
hugepages-1Gi      0 (0%)          0 (0%)
hugepages-2Mi      0 (0%)          0 (0%)

注意:这是整个节点的集体信息,而不是单个pod。

注意:节点名称可以通过例如:获得

NODE_NAME=$(kubectl get nodes -o name | head -1)

相关内容

  • 没有找到相关文章

最新更新