Ответ 1
Начиная с версии 1.11, вы можете делать:
kubectl wait --for=condition=complete job/myjob
и вы также можете установить время ожидания:
kubectl wait --for=condition=complete --timeout=30s job/myjob
Я ищу способ узнать (изнутри script), когда завершено задание Кубернетов. Я хочу, чтобы затем вытащить журналы из контейнеров и выполнить очистку.
Что было бы хорошим способом сделать это? Лучше ли будет запускать kubectl describe job <job_name>
и grep для 1 Succeeded
или что-то вроде этого?
Начиная с версии 1.11, вы можете делать:
kubectl wait --for=condition=complete job/myjob
и вы также можете установить время ожидания:
kubectl wait --for=condition=complete --timeout=30s job/myjob
Вы можете визуально просматривать статус задания с помощью этой команды:
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
Вы можете использовать официальный 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>'
Я бы использовал -w
или --watch
:
$ kubectl get jobs.batch --watch
NAME COMPLETIONS DURATION AGE
python 0/1 3m4s 3m4s