【问题标题】:How to check if kubernetes job is successful or failure using client go library如何使用客户端 go 库检查 kubernetes 作业是成功还是失败
【发布时间】:2018-10-11 21:05:53
【问题描述】:

图书馆里有很多字段,但基本上都是关于工作是否完成,但是如何检查工作是否完成并成功或工作是否完成和失败

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
    }
}

这就是我现在检查的方式,我不完全确定这是正确的

【问题讨论】:

  • 你尝试了什么?检查作业吊舱的状态到底有什么问题?
  • 你能贴一些代码吗?
  • 执行上述代码,检查(c.Type == batchv1.JobComplete || c.Type == batchv1.JobFailed) && c.Status == v1.ConditionTrue 是否足以说明作业是否已完成,成功执行jobComplete 检查,失败则执行jobFailed 检查,这就足够了

标签: go kubernetes client-go


【解决方案1】:

您可以只使用 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 次,这应该可以处理任意次数的作业重试。

【讨论】:

  • 这有一个竞争条件,如果作业正在配置一个 pod,它可能在获取状态之前不会进入活动状态。 IE:容器可能会在 containerCreating 中停留一小段时间,同时拉下图像或创建/附加卷
  • @iainlbc 你对这场比赛的建议是什么?
【解决方案2】:

类似于Bharaths 的答案,除了它处理在创建作业之后但在作业 pod 处于活动状态之前调用此函数的竞争条件。

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)
}

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多