Скажите, когда работа завершена

Я ищу способ узнать (изнутри script), когда завершено задание Кубернетов. Я хочу, чтобы затем вытащить журналы из контейнеров и выполнить очистку.

Что было бы хорошим способом сделать это? Лучше ли будет запускать kubectl describe job <job_name> и grep для 1 Succeeded или что-то вроде этого?

Ответ 1

Начиная с версии 1.11, вы можете делать:

kubectl wait --for=condition=complete job/myjob

и вы также можете установить время ожидания:

kubectl wait --for=condition=complete --timeout=30s job/myjob

Ответ 2

Вы можете визуально просматривать статус задания с помощью этой команды:

kubectl get jobs myjob -w

Опция -w следит за изменениями. Вы ищете SUCCESSFUL столбец, чтобы показать 1.

Для ожидания в сценарии оболочки я бы использовал эту команду:

until kubectl get jobs myjob -o jsonpath='{.status.conditions[? 
    (@.type=="Complete")].status}' | grep True ; do sleep 1 ; done

Ответ 3

Вы можете использовать официальный Python kubernetes-client.

https://github.com/kubernetes-client/python

Создайте новый Python virtualenv:

virtualenv -p python3 kubernetes_venv активировать его

source kubernetes_venv/bin/activate

и установить клиент kubernetes с:

pip install kubernetes

Создайте новый скрипт Python и запустите:

from kubernetes import client, config

config.load_kube_config()

v1 = client.BatchV1Api()
ret = v1.list_namespaced_job(namespace='<YOUR-JOB-NAMESPACE>', watch=False)
for i in ret.items:
    print(i.status.succeeded)

Не забудьте настроить свой конкретный kubeconfig в ~/.kube/config и ~/.kube/config правильное значение для пространства имен вашей работы → '<YOUR-JOB-NAMESPACE>'

Ответ 4

Я бы использовал -w или --watch:

$ kubectl get jobs.batch --watch
NAME     COMPLETIONS   DURATION   AGE
python   0/1           3m4s       3m4s