通过昂首阔步运行容器部署执行后如何更新作业的kubernetes作业状态?

时间:2019-08-29 10:41:33

标签: docker kubernetes swagger-ui minikube kubernetes-jobs

我使用具有deployment.yaml的minikube通过swagger-ui文件部署了前端应用程序。该应用程序仅接受json查询并在minikube上启动作业,该作业可运行并终止相关容器。 目前,我在minikube集群上构建了1个docker映像,该映像在作业开始后开始下载卫星映像。 现在,每当我向swagger-ui传递json查询时,它都会给我以下响应,其中作业状态为PENDING

{
  "workflowId": "2a94d0e3-7245-47e4-a9ce-821efce42eb8",
  "workflowName": "monitoring1",
  "status": "PENDING",
  "submittedAt": "2019-08-29T08:22:59.599469Z",
  "completedAt": null,
  "jobs": [

求职者

var jobStatus = JobStatus.PENDING
        when (action) {
            Watcher.Action.ADDED -> {
                if (job.status.startTime != null && job.status.active >= 0) {
                    jobStatus = JobStatus.RUNNING
                }
            }
            Watcher.Action.MODIFIED -> {
                if (job.status.completionTime != null && job.status.succeeded >= 0) {
                    jobStatus = JobStatus.COMPLETED
                } else if (job.status.failed != null) {
                    jobStatus = JobStatus.ERROR
                }
            }
            Watcher.Action.DELETED -> {
                log.info("DELETED")
            }
            Watcher.Action.ERROR -> {
                jobStatus = JobStatus.ERROR
            }
        }

在minikuber一侧,作业在一段时间后开始和终止,但是在摇摇欲坠的一侧,作业的状态永远不会改变。但是,当我尝试运行GET查询以列出所有作业时,我看到了完成的作业。 我的问题是,作业完成后如何更新状态或通知用户?

1 个答案:

答案 0 :(得分:0)

问题的措辞可能是这样,但是开始工作后,由于工作尚未完成,因此有望获得PENDING状态作为立即响应。此外,看起来您之后正在使用GET查询作业的状态,这也会导致预期的行为。

现在,Swagger支持long polling via callbacks,而Kubernetes API已读取support for the verb WATCH

  

手表将在更新对象时流式传输对象的结果。类似于回调,watch用于响应资源更改。

此功能还扩展到您的specific object Job

启用回调并通过watch监听API将获得与运行相同的结果:

$ kubectl get job example-job --watch -o json

因此,对对象的任何更改都会在发生时反映出来,并返回一个JSON结果,您以后可以使用它来养活客户端。