Как получить имя запущенного модуля, когда заканчиваются другие модули? - PullRequest
0 голосов
/ 21 ноября 2018

Я использую кластер kubernetes для запуска сред разработки для себя и других разработчиков.Я написал несколько функций оболочки, чтобы помочь каждому разобраться со своими модулями, не вводя длинные команды kubectl вручную.Например, чтобы получить подсказку на одном из модулей, мои функции используют следующее

kubectl exec -it $(kubectl get pods --selector=run=${service} --field-selector=status.phase=Running -o jsonpath="{.items[*].metadata.name}") -- bash;

, где $ service - это метка службы, к которой я хочу получить доступ, например postgres, redis или uwsgi.

Поскольку это среды разработки, всегда есть один из каждого типа модулей.Проблема, с которой я столкнулся, заключается в том, что если я удаляю модуль, чтобы он вытягивал свежий образ (все модули управляются развертыванием, поэтому, если я удаляю модуль, он создает новый), на некоторое время появляются два модуля, одинотображается как завершающий, а другой как работающий на kubectl get pods выходе.Я хочу убедиться, что команда выше выбирает модуль, который работает, а не тот, который завершается.Я думал, что флаг --field-selector=status.phase=Running сделает это, но это не так.Очевидно, что даже если модуль находится в процессе завершения, он все еще сообщает о статусе выполнения в поле status.phase.Что я могу использовать для фильтрации оконечных модулей?

1 Ответ

0 голосов
/ 21 ноября 2018

Используйте это

$ kubectl exec -it $(kubectl get pods --selector=run=${service} | grep "running" | awk '{print $1}') -- bash;

или

$ kubectl exec -it $(kubectl get pods --selector=run=${service} -o=jsonpath='{.items[?(@.status.phase==“Running”)].metadata.name}') -- bash;

Ссылка: https://kubernetes.io/docs/reference/kubectl/jsonpath/

...