Подождите, пока задание kubernetes завершится в случае неудачи или успеха с помощью командной строки - PullRequest
5 голосов
/ 09 марта 2019

Как лучше всего дождаться завершения работы kubernetes? Я заметил много предложений по использованию:

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

но я думаю, что это работает, только если работа успешна. если это не удается, я должен сделать что-то вроде:

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

есть ли способ ожидания обоих условий с помощью wait? если нет, то как лучше всего дождаться, пока работа будет успешной или неудачной?

1 Ответ

1 голос
/ 09 марта 2019

kubectl wait --for=condition=<condition name ожидает определенного условия, поэтому в данный момент он не может указать несколько условий в данный момент.

Мой обходной путь использует oc get --wait, --wait закрывает команду, если целевой ресурс обновлен. Я буду контролировать status раздел задания, используя oc get --wait, пока status не будет обновлен. Обновление раздела status означает, что задание выполнено с некоторыми условиями состояния.

Если задание завершено успешно, status.conditions.type немедленно обновляется как Complete. Но если работа не удалась, модуль будет автоматически перезапущен независимо от restartPolicy, равного OnFailure или Never. Но мы можем считать, что задание имеет статус Failed, если не обновлено как Complete после первого обновления.

Посмотрите мои тестовые данные следующим образом.

  • Задание yaml для успешного завершения тестирования
    # vim job.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      parallelism: 1
      completions: 1
      template:
        metadata:
          name: pi
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-wle", "exit 0"]
          restartPolicy: Never
  • Он покажет вам Complete, если он успешно завершит работу.
    # oc create -f job.yml &&
      oc get job/pi -o=jsonpath='{.status}' -w &&
      oc get job/pi -o=jsonpath='{.status.conditions[*].type}' | grep -i -E 'failed|complete' || echo "Failed" 

    job.batch/pi created
    map[startTime:2019-03-09T12:30:16Z active:1]Complete
  • Не удалось выполнить задание yaml для тестирования
    # vim job.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      parallelism: 1
      completions: 1
      template:
        metadata:
          name: pi
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-wle", "exit 1"]
          restartPolicy: Never
  • Он покажет вам Failed, если первое обновление задания не будет Complete. Проверьте, если после удаления существующего ресурса задания.
    # oc delete job pi
    job.batch "pi" deleted

    # oc create -f job.yml &&
      oc get job/pi -o=jsonpath='{.status}' -w &&
      oc get job/pi -o=jsonpath='{.status.conditions[*].type}' | grep -i -E 'failed|complete' || echo "Failed" 

    job.batch/pi created
    map[active:1 startTime:2019-03-09T12:31:05Z]Failed

Надеюсь, это поможет вам. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...