有谁知道如何根据磁盘空间消耗在给定节点上获得排序的 pod 列表?
下面的命令帮助我列出基于给定节点的 pod,但我的要求是列出那些导致高磁盘空间使用率的 pod,作为调查和解决
DiskPressure
驱逐状态的一部分。
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<NODE_NAME>
我能够找到列出节点 CPU 和内存使用情况的命令(参考:https://github.com/kubernetes/kubernetes/issues/17512#issuecomment-317757388)但与节点磁盘使用情况无关。
alias util='kubectl get nodes --no-headers | awk '\''{print $1}'\'' | xargs -I {} sh -c '\''echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '\'''
# Get CPU request total (we x20 because because each m3.large has 2 vcpus (2000m) )
alias cpualloc='util | grep % | awk '\''{print $1}'\'' | awk '\''{ sum += $1 } END { if (NR > 0) { print sum/(NR*20), "%\n" } }'\'''
# Get mem request total (we multiply by 75 because because each m3.large has 7.5G ram )
alias memalloc='util | grep % | awk '\''{print $5}'\'' | awk '\''{ sum += $1 } END { if (NR > 0) { print sum/(NR*75), "%\n" } }'\'''
找到了我的要求的答案 - 列出在给定节点中运行的 pod 磁盘使用情况
kubectl get --raw /api/v1/nodes/<NODE_NAME>/proxy/stats/summary | jq '.pods[0] | "PodName: ", .podRef.name, "usedBytes: ", .containers[].rootfs.usedBytes'
获取节点文件系统使用情况
kubectl get --raw /api/v1/nodes/<NODE_NAME>/proxy/stats/summary | jq '.node.fs.usedBytes'
获取节点imageFs使用情况
kubectl get --raw /api/v1/nodes/<NODE_NAME>/proxy/stats/summary | jq '.node.runtime.imageFs.usedBytes'
获取节点 iNodes 统计信息
kubectl get --raw /api/v1/nodes/<NODE_NAME>/proxy/stats/summary | jq '.node.fs.inodesFree'
kubectl get --raw /api/v1/nodes/<NODE_NAME>/proxy/stats/summary | jq '.node.runtime.imageFs.inodesFree'
不幸的是,您将无法使用
kubectl
实现此目的,因为它没有这种功能。一种方法是登录节点并使用docker ps -s
.
我能想到的另一种方法是公开 kubelet/cadvisor 指标并将其与 Prometheus 这样的指标抓取工具一起使用。
kubelet 以 Prometheus 展示格式在
/metrics
端点上公开其所有运行时指标和所有 cAdvisor 指标。请注意,kubelet 还公开了 /metrics/cadvisor
、/metrics/resource
和 /metrics/probes
端点中的指标。 /stats/summary
端点通常提供磁盘指标。
补充资料: