Как проверить, успешно ли выполнено задание kubernetes или нет, с помощью клиентской библиотеки go
В библиотеке много полей, но в основном речь идет о выполненной работе или нет, но как проверить, завершена ли работа и выполнена ли она или нет
if con.Type == v1.JobComplete && con.Status == corev1.ConditionTrue && job.Status.Succeeded > 0 {
fmt.Printf("Job: %v Completed Successfully: %v\n", name, con)
break
} else if con.Type == v1.JobFailed && con.Status == corev1.ConditionTrue {
if job.Status.Active == 0 && job.Status.Succeeded == 0 {
fmt.Printf("Job: %v Failed: %v\n", name, con)
break
}
}
Вот как я сейчас проверяю, я не совсем уверен, что это правильно
2 ответа
Похожий на
Bharath
s, за исключением того, что он обрабатывает состояние гонки, когда эта функция вызывается после создания задания, но до того, как модуль заданий станет активным.
func getJobStatus(jobName string) error {
// k8sClient := initialize k8s client
job, err := k8sClient.BatchV1().Jobs(h.namespace).Get(jobName, metav1.GetOptions{})
if err != nil {
return err
}
if job.Status.Active == 0 && job.Status.Succeeded == 0 && job.Status.Failed == 0 {
return fmt.Errorf("%s hasn't started yet", job.Name)
}
if job.Status.Active > 0 {
return fmt.Errorf("%s is still running", job.Name)
}
if job.Status.Succeeded > 0 {
return nil // Job ran successfully
}
return fmt.Errorf("%s has failed with error", job.Name)
}
Вы можете использовать только переменные Active, Succeeded и Failed, чтобы узнать состояние задания.
Пример:
batchClient := kubernetesapi.BatchV1()
jobClient := batchClient.Jobs(NameSpace)
job, _ := jobClient.Get(jobName, metav1.GetOptions{})
if job.Status.Active > 0 {
return "Job is still running"
} else {
if job.Status.Succeeded > 0 {
return "Job Successful"
}
return "Job failed"
}
Это должно заботиться о любом количестве повторных попыток выполнения задания, если вы используете backOffLimit больше 1.