Kubernetes下调度任务失败
Scheduling a task under Kubernetes fails
我们正在 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)
...,
我们查看了 table 内容,任务确实有名称。
有什么想法吗?
通过调试实时数据流,我终于找到了错误的根源。当命名空间中存在不是由 Data Flow 创建的 CronJob 时,问题就出现了,根据我的评估,这是一个问题。调度程序启动一个进程,该进程在 Kubernetes CronJob 资源上循环并尝试处理它们。
Data Flow 当然应该像所有 Kubernetes 本机工具一样对那些使用标签的人进行处理,以 select 仅处理与其相关的元素。任何进程都可以使用 CronJob。
所以 Pivotal - 数据流的人,加强那部分可能是个好主意,这样可以防止那种 "invisible" 问题。我说不可见是因为我们得到的唯一错误是计划项目的验证,抱怨名称为空的事实,那是因为 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
我们正在 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)
...,
我们查看了 table 内容,任务确实有名称。
有什么想法吗?
通过调试实时数据流,我终于找到了错误的根源。当命名空间中存在不是由 Data Flow 创建的 CronJob 时,问题就出现了,根据我的评估,这是一个问题。调度程序启动一个进程,该进程在 Kubernetes CronJob 资源上循环并尝试处理它们。
Data Flow 当然应该像所有 Kubernetes 本机工具一样对那些使用标签的人进行处理,以 select 仅处理与其相关的元素。任何进程都可以使用 CronJob。
所以 Pivotal - 数据流的人,加强那部分可能是个好主意,这样可以防止那种 "invisible" 问题。我说不可见是因为我们得到的唯一错误是计划项目的验证,抱怨名称为空的事实,那是因为 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