Кто-нибудь знает, как получить отсортированный список модулей на заданном узле в зависимости от их потребления дискового пространства?
Приведенная ниже команда помогает мне составить список модулей на основе заданного узла, но мое требование состоит в том, чтобы перечислить те модули, которые вызывают высокое использование дискового пространства, как часть расследования и решения состояния вытеснения DiskPressure
.
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<NODE_NAME>
Мне удалось найти команды для вывода списка использования ЦП и памяти узлами (ссылка: 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" } }'\'''
Инструменты файловой системы лучше подходят для решения вашей проблемы. Проверьте этот ответ для примера. serverfault.com/a/994413/405997 Также может помочь распространенное du
.
К сожалению, вы не сможете добиться этого с помощью kubectl
, так как он не имеет такой функциональности. Один из способов — войти в узел и использовать docker ps -s
.
Еще один способ, который я могу придумать, — это предоставить метрики kubelet/cadvisor и использовать их с парсером метрик, таким как Prometheus.
Kubelet предоставляет все свои метрики времени выполнения и все метрики cAdvisor на конечной точке /metrics
в формате представления Prometheus. Обратите внимание, что kubelet также предоставляет метрики в конечных точках /metrics/cadvisor
, /metrics/resource
и /metrics/probes
. Метрики диска обычно доступны на конечной точке /stats/summary
.
Дополнительная информация:
нашел ответ на мое требование - список использования дисковых модулей, работающих на данном узле
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'
получить использование node 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'
Использование Rootfs + журналы + тома: kubectl get --raw /api/v1/nodes/k8s-w1/proxy/stats/summary | jq '.pods[] | "PodName: ", .podRef.name, "usedBytes:", .containers[].rootfs.usedBytes, "Logs:", .containers[].logs.usedBytes, "Volume:", .volume[].usedBytes'
Я не думаю, что вы можете получить использование диска с помощью kubectl. Вы можете найти использование диска только с помощью exec в модуле и использовать команду linux
du
.