登录
首页 >  Golang >  Go问答

使用Go客户端库检查Kubernetes作业的执行状态

来源:stackoverflow

时间:2024-03-18 16:18:22 311浏览 收藏

在使用 Go 客户端库检查 Kubernetes 作业的执行状态时,需要明确作业是否已完成以及是否成功完成。现有解决方案包括: * 根据作业条件的类型和状态(完成/失败)以及成功 pod 数量判断作业是否成功完成。 * 定期轮询作业状态,检查其活动 pod 数、成功 pod 数和失败 pod 数,以确定作业是否正在运行、已成功完成或已失败。 这些解决方案考虑了竞争条件,例如在作业 pod 处于活动状态之前调用检查函数的情况。通过这些方法,可以有效监控作业的执行状态,并在作业完成后采取相应操作。

问题内容

图书馆中有很多字段,但它基本上讨论的是作业是否完成,但如何检查作业是否完成并成功或作业是否完成但失败

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

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


解决方案


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

理论要掌握,实操不能落!以上关于《使用Go客户端库检查Kubernetes作业的执行状态》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>