在Kubernetes下调度任务失败

时间:2019-10-25 20:46:16

标签: kubernetes spring-cloud dataflow

我们正在Kubernetes中部署Spring Cloud Data Flow v2.2.1.RELEASE。一切似乎都可行,但调度却不可行。实际上,即使使用UI(或API)手动启动运行任务时,我们也会看到错误日志。尝试计划时会生成相同的日志,但这一次使计划创建失败。 这是堆栈跟踪摘录:

java.lang.IllegalArgumentException: taskDefinitionName must not be null or empty
    at org.springframework.util.Assert.hasText(Assert.java:284)
    at org.springframework.cloud.dataflow.rest.resource.ScheduleInfoResource.<init>(ScheduleInfoResource.java:58)
    at org.springframework.cloud.dataflow.server.controller.TaskSchedulerController$Assembler.instantiateResource(TaskSchedulerController.java:174)
    at org.springframework.cloud.dataflow.server.controller.TaskSchedulerController$Assembler.instantiateResource(TaskSchedulerController.java:160)
    at org.springframework.hateoas.mvc.ResourceAssemblerSupport.createResourceWithId(ResourceAssemblerSupport.java:89)
    at org.springframework.hateoas.mvc.ResourceAssemblerSupport.createResourceWithId(ResourceAssemblerSupport.java:81)
    at org.springframework.cloud.dataflow.server.controller.TaskSchedulerController$Assembler.toResource(TaskSchedulerController.java:168)
    at org.springframework.cloud.dataflow.server.controller.TaskSchedulerController$Assembler.toResource(TaskSchedulerController.java:160)
    at org.springframework.data.web.PagedResourcesAssembler.createResource(PagedResourcesAssembler.java:208)
    at org.springframework.data.web.PagedResourcesAssembler.toResource(PagedResourcesAssembler.java:120)
    at org.springframework.cloud.dataflow.server.controller.TaskSchedulerController.list(TaskSchedulerController.java:85)
    at sun.reflect.GeneratedMethodAccessor180.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

...,

我们已经查看了表的内容,该任务确实有一个名称。

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

我终于通过调试实时数据流找到了错误的根源。当不是由Data Flow创建的CronJob存在于命名空间中时,就会出现问题,据我评估,这是一个问题。调度程序将启动一个在Kubernetes CronJob资源上循环的进程,并尝试对其进行处理。

Data Flow当然应该像使用所有Kubernetes本地工具一样,对使用标签的对象进行处理,以仅选择与之相关的元素。任何进程都可以使用CronJob。

所以Pivotal-Data Flow的人,增强那部分可能是一个好主意,这样可以防止这种“看不见的”问题。我之所以说不可见,是因为我们得到的唯一错误是对Schedule项目的验证,抱怨名称为空这一事实,这是因为CronJob没有以任何方式链接到SCDF任务。

希望能对以后的人有所帮助。

错误报告:https://github.com/spring-cloud/spring-cloud-deployer-kubernetes/issues/347

发布的PR:https://github.com/spring-cloud/spring-cloud-deployer-kubernetes/pull/348