Почему kubectl возвращает модули со статусом «Завершено», когда я запрашиваю только запущенные модули?

введите описание изображения здесь

У меня есть кластер k3s с некоторыми запущенными модулями. Я хочу получить все модули со статусом Выполняется, содержащие grafana в своем имени.

Судя по документации, я могу использовать селектор полей для этого (был представлен в версии v1.9 ). Но когда я попробовал, ничего не вышло.

Я знаю, что могу принудительно удалить модуль со статусом Завершение, чтобы получить то, что хочу. Я хочу знать, почему моя команда не сработала так, как ожидалось? Я что-то пропустил?

Кстати, модуль Terminating существовал некоторое время. Я считаю, что он застрял. Но опять же, вопрос не в этом.


person Zulhilmi Zainudin    schedule 17.11.2020    source источник


Ответы (1)


Если вы посмотрите документацию k8s по жизненному циклу pod вы можете видеть, что status.phase может иметь только 5 различных значений, и ни одно из них не является Terminating. Это означает, что состояние завершения не отражается в этом поле, и поэтому фильтрация по фазовому полю бесполезна.

Статус завершения отображается в .status.containerStatuses.state (состояния контейнера в документах), хотя эта метка поля, похоже, не поддерживается фильтром.


Так что ты можешь сделать?

Самое простое, что вы можете сделать, - это дважды использовать команду grep:

kubectl get pods | grep grafana | grep Running
person Matt    schedule 17.11.2020