我使用具有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
查询以列出所有作业时,我看到了完成的作业。 我的问题是,作业完成后如何更新状态或通知用户?。
答案 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结果,您以后可以使用它来养活客户端。