Список всех ресурсов в пространстве имен

Я хотел бы видеть все ресурсы в пространстве имен.

Выполнение kubectl get all волю, несмотря на имя, а не перечисляет такие вещи, как услуги и kubectl get all.

Если я знаю тип, я могу явно запросить этот конкретный тип, но, похоже, также нет команды для перечисления всех возможных типов. (Особенно kubectl get делает, например, не список пользовательских типов).

Любая идея, как показать все ресурсы, прежде чем удалять это пространство имен?

Ответы

Ответ 1

Основываясь на этом комментарии, поддерживаемый способ перечисления всех ресурсов состоит в том, чтобы перебрать все версии API, перечисленные в kubectl api-resources:

API-ресурсы kubectl перечисляют типы ресурсов, доступные в вашем кластере.

это означает, что вы можете объединить его с kubectl get, чтобы фактически перечислить каждый экземпляр каждого типа ресурса в пространстве имен:

kubectl api-resources --verbs=list --namespaced -o name \
  | xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>

Ответ 2

Все объекты кубернетов хранятся в etcd.

Все объекты хранятся в ETCD v3 следующим образом:

/registry/<object_type>/<namespace>/<name>

Я предлагаю просто взять список всех ресурсов некоторого пространства имен из etcd v3 напрямую:

ETCDCTL_API=3 etcdctl --endpoints=<etcd_ip>:2379 get / --prefix --keys-only | grep -E "^/\w+/\w+/<namespace>/+"

Ответ 3

В итоге мне понадобилась та же функциональность из-за неудачных развертываний Helm, которые оставили остатки в определенном пространстве имен. Вот функция, которую вы можете добавить в свой профиль bash:

function kubectlgetall {
  for i in $(kubectl api-resources --verbs=list --namespaced -o name | grep -v "events.events.k8s.io" | grep -v "events" | sort | uniq); do
    echo "Resource:" $i
    kubectl -n ${1} get --ignore-not-found ${i}
  done
}

Использование: kubectlgetall <namespace>

Пример: получить все ресурсы из пространства имен kafka:

kubectlgetall kafka

Ответ 4

Реализация ответа rcorre на Powershell будет выглядеть так:

kubectl api-resources --verbs=list --namespaced -o name | '
%{ kubectl get $_ --show-kind --ignore-not-found -l <label>=<value> -n <namespace> }

Ответ 5

kubectl get all --namespace <namespace>
или же
kubectl get all -n <namespace> оба перечислят все ресурсы всех типов в этом пространстве имен.