Есть ли способ перечислить все ресурсы, созданные конкретным оператором, и их статус?

Я использую коннектор конфигурации 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

из https://cloud.google.com/config-connector/docs/how-to/monitoring-your-resources#listing_all_resources

Я провел небольшое исследование по этой теме и нашел 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>
  • --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добавлены к его определениям.


Дополнительные ресурсы: