0

deployment.yaml我已经通过使用 minikube的文件部署了我的前端应用程序swagger-ui。该应用程序只接受 json 查询并在 minikube 上启动作业,该作业运行和终止相关容器。目前我已经在我的 minikube 集群上构建了 1 个 docker 镜像,该集群在作业开始后开始下载卫星图像。现在,每当我将 json 查询传递给 swagger-ui 时,它都会给我以下响应,其中作业状态为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 方面,作业会在一段时间后开始和终止,但在 swagger 方面,作业的状态永远不会改变。但是,当我尝试运行GET查询以列出所有作业时,我会看到已完成的作业。我的问题是我如何在工作完成后更新状态或通知用户?.

4

1 回答 1

0

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

现在,Swagger 支持通过回调进行长轮询,并且 Kubernetes API 已经读取了对动词的支持WATCH

Watch 将在对象更新时流式传输结果。与回调类似,watch 用于响应资源变化。

此功能还扩展到您的特定对象Job

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

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

因此,对对象的任何更改都会在它们发生时得到反映,返回一个 JSON 结果,您可以稍后使用它来为您的客户提供信息。

于 2019-08-30T11:24:19.817 回答