列出在一个worker节点上运行的所有kubernetes pod,按磁盘空间使用情况排序

8mmmxcuj  于 2023-05-16  发布在  Kubernetes
关注(0)|答案(2)|浏览(134)

有人知道如何根据磁盘空间消耗获得给定节点上的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" } }'\'''
cyvaqqii

cyvaqqii1#

找到了我的需求的答案-列出给定节点中运行的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'
rdlzhqv9

rdlzhqv92#

不幸的是,您将无法使用kubectl实现这一点,因为它没有这种功能。一种方法是登录到节点并使用docker ps -s
我能想到的另一种方法是公开kubelet/cadvisor指标,并将其与Prometheus等指标scraper一起使用。
kubelet在/metrics端点上以Prometheus展示格式公开了它的所有运行时指标和所有cAdvisor指标。请注意,kubelet还公开了/metrics/cadvisor/metrics/resource/metrics/probes端点中的指标。磁盘指标通常在/stats/summary端点上可用。
附加信息:

相关问题