Есть ли способ перечислить все ресурсы, созданные конкретным оператором, и их статус?
Я использую коннектор конфигурации https://cloud.google.com/config-connector/docs/overview
Я создаю ресурсы gcp с CRD, которые предоставляет соединитель конфигурации:
kind: IAMServiceAccount
kind: StorageBucket
etc
Теперь мне бы очень хотелось иметь возможность получить простой список каждого ресурса и его статуса (был ли он создан успешно или нет). Где каждый ресурс - это одна строка, которая выглядит примерно так:
kind, name, status, etc
Есть ли способ с помощью kubectl получить список всех ресурсов, созданных таким оператором? Полагаю, я мог бы вручную пометить все эти ресурсы и попытаться выбрать с помощью ярлыка, но я действительно не хочу этого делать
редактировать
Согласно комментарию, я мог бы это сделать, но любопытно, есть ли менее громоздкая команда
kubectl get crds --selector cnrm.cloud.google.com/managed-by-kcc=true \
-o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -n 1 \
kubectl get -Ao jsonpath='{range .items[*]}{" Kind: "}{@.kind}{"Name: "}{@.metadata.name}{" Status: "}{@.status.conditions[].status}{" Reason: "}{@.status.conditions[].reason}{"\n"}{end}' --ignore-not-found
2 ответа
Существует также способ, предложенный в документах GCP config-connector:
kubectl get gcp
Я провел небольшое исследование по этой теме и нашел 2 возможных решения для получения всех ресурсов, созданных
config-connector
:
- путь
- / путь с
labels
(пожалуйста, смотрите объяснение, так как он не установлен по умолчанию)
Обсуждение, касающееся аналогичной проблемы, можно найти здесь:
$ kubectl api-resources
Как указано в комментарии, который я сделал, вы можете использовать следующее выражение:
kubectl get crds --selector cnrm.cloud.google.com/managed-by-kcc=true -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -n 1 kubectl get --ignore-not-found
Анализ этого решения:
-
kubectl get crds --selector cnrm.cloud.google.com/managed-by-kcc=true
- получить
Customer Resource Definitions
которые имеют соответствующий селектор
- получить
-
-o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
- использовать
jsonpath
чтобы получить только значение, хранящееся в.metadata.name
ключ (получить имя crd)
- использовать
-
| xargs -n 1 kubectl get
- передать вывод в xargs и использовать каждый
CRD
получено из предыдущей команды для запуска$ kubectl get <RESOURCE>
- передать вывод в xargs и использовать каждый
-
--ignore-not-found
- не отображать сообщение об отсутствующем ресурсе
Эту команду также можно изменить в соответствии с конкретными потребностями, как показано в вопросе.
Дополнительное замечание!
Аналогичная команда упоминается в ссылке github, которую я вставил выше:
$ kubectl get-all
/
ketall
Приведенные выше команды можно использовать для получения всех ресурсов в кластере. Они недоступны по умолчанию
kubectl
и они нуждаются в дополнительной настройке.
Дополнительные сведения об установке можно найти на этой странице github:
Используя подход, описанный в официальной документации Kubernetes:
Метки предназначены для указания идентифицирующих атрибутов объектов.
Kubernetes.io: Документы: Основные понятия: Обзор: Работа с объектами: Метки
Вы можете пометить эти ресурсы, созданные коннектором конфигурации (я знаю, что вы хотели бы этого избежать) и искать эти ресурсы, например:
-
$ kubectl get-all -l look=here
NAME NAMESPACE AGE
storagebucket.storage.cnrm.cloud.google.com/config-connector-bucket config-connector 135m
storagebucket.storage.cnrm.cloud.google.com/config-connector-bucket-test config-connector 13s
Эти ресурсы имеют
.metadata.labels.look=here
добавлены к его определениям.
Дополнительные ресурсы: