#kubernetes
#kubernetes
Вопрос:
У меня есть несколько пространств имен в моем кластере, и мне нужен журнал, подобный:
NAMESPACE NAME PODS
MY_NAMESPACE my_ns6446f67599-25g7f 10
Ответ №1:
Вы можете использовать --all-namespaces
флаг для получения модулей.
kubectl get pods --all-namespaces
Из вашего вывода похоже, что вы пытаетесь напечатать replicaset
s, поскольку в выходных данных есть столбец подсчета модулей.
kubectl get replicaset --all-namespaces
Если вы хотите ограничить результирующие столбцы, мы можем использовать --0 custom-columns=
параметр, как показано ниже.
$ kubectl get replicaset --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,PODS:.status.replicas
NAMESPACE NAME PODS
MY_NAMESPACE my_ns6446f67599-25g7f 10
Комментарии:
1. @RamonMedeiros — Вы упоминаете, что
--all-namespaces
это не работает в вашей среде? Можете ли вы поделиться двумя командами, которые вы используете сейчас, включая их выходные данные.
Ответ №2:
Вы также можете попробовать этот вариант:
kubectl get pods --all-namespaces | awk '{print $1}' | sort | uniq -c | sort -k1 -n -r
Что даст:
136 some-ns
133 kube-system
119 other-ns
Немного объясняя:
kubectl get pods --all-namespaces
в первом столбце будут перечислены все модули с пространством имен.awk { print $1 }
будет «отфильтровывать» первый столбец, который является пространством именsort
сортирует имена пространств имен в алфавитном порядкеuniq -c
подсчитает, сколько раз появлялось каждое пространство имен, и агрегирует с количеством в качестве первого столбца (например136 some-ns
, означает, чтоsome-ns
оно появилось 136 раз).sort -k1 -n -r
этот модуль будет отсортирован от пространства имен, которое появилось больше всего (т. Е. Имело Больше Всего модулей), к тому, которое появилось меньше всего.-k1
означает, что я использую первый столбец для сортировки,-n
я использую числовое сравнение-r
и выполняю обратный порядок.
Комментарии:
1. Небольшое улучшение: добавление
--no-headers
в команду kubectl предотвратитNAMESPACE
отображение в списке в качестве пространства имен. Последняя команда будет выглядеть так:kubectl get pods --no-headers --all-namespaces | awk '{print $1}' | sort | uniq -c | sort -k1 -n -r
к сожалению, этот подход не вернет пустые пространства имен.
Ответ №3:
Это решение объединяет вывод json kubectl get pods
и kubectl get namespaces
для того, чтобы также отображать пространства имен, в которых не развернуты модули.
kubectl get pods -o json --all-namespaces | jq --argjson ns "$(kubectl get namespaces -o json)" '.items | group_by(.metadata.namespace) | map({namespace: .[].metadata.namespace, count: . | length}) | . = ($ns.items | map({namespace: .metadata.name, count: 0})) | unique_by(.namespace) | sort_by(.count)'
Решение предоставляет массив объектов json, отсортированных по количеству модулей в порядке возрастания, и может быть легко расширено для получения желаемого результата.
«Волшебство» происходит, когда мы добавляем содержимое $ns
переменной, которая содержит пространства имен, в конец массива с count=0 . Эти записи будут отброшены, unique_by
если пространство имен уже было найдено ранее, что означает, что оно содержит модули.
Примечание: решение основано на unique_by
функции jq для отмены второго появления объекта с тем же значением ключа, которое, как и в документации, не предоставляется, но оно реализовано таким образом.