如何使用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)