Назад | Перейти на главную страницу

`kubectl get pods -l job-name` возвращает несколько модулей, если задание было недавно удалено

Я запускаю задание kubernetes, удаляю его, а затем запускаю снова в быстрой последовательности.

Я использую следующую команду, чтобы связать модуль с моей работой, чтобы я мог запустить kubectl logs $POD.

kubectl get pods -l job-name=myjob --output=jsonpath='{.items[*].metadata.name}'

Но сразу после удаления задания приведенная выше команда возвращает два модуля: тот, который еще не был удален, и новый.

kubectl describe jobs/myjob показывает правильное имя модуля, я мог бы извлечь его из текста оттуда, чтобы получить уникальное имя модуля для последней запущенной работы, но это кажется хакерским.

Есть ли лучший способ получить имя модуля для конкретной работы?

Предметы уведомления

Имена вакансий: Они для нас! Люди, kubernetes вместо этого отслеживают дочерние объекты по меткам или аннотациям. В этом случае controller-uid

Получение уникальных идентификаторов: Быстрый способ сделать это, jsonpath из kubectl. Тот же синтаксис, что и jq, просто заключите в {}. jsonpath={.metadata.labels.controller-uid}

Вы всегда можете попробовать использовать вывод jsonpath для задания, чтобы получить controller-uid. Это должно однозначно соответствовать одному модулю, поскольку он создается при создании задания, даже если задание имеет то же имя. Пример:

пример

kubectl get po -l controller-uid=`kubectl get job $JOBNAME -o "jsonpath={.metadata.labels.controller-uid}"`



### Or for an unembedded way
JOBUUID=$(kubectl get job $JOBNAME -o "jsonpath={.metadata.labels.controller-uid}")
PODNAME=$(kubectl get po -l controller-uid=$JOBUUID -o name)

kubectl logs $PODNAME

Надеюсь, это поможет, удачи!