kubernetes - 在 Kubernetes 下调度任务失败

标签 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)

...,

我们查看了表格内容,任务确实有名称。

任何的想法?

最佳答案

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

数据流当然应该对那些使用标签的人进行处理,就像所有 Kubernetes 原生工具一样,只选择与其相关的元素。任何进程都可以使用 CronJob。

所以关键 - 数据流的人,增强这部分可能是一个好主意,这样可以防止那种“隐形”问题。我说不可见是因为我们得到的唯一错误是对 Schedule 项目的验证,提示名称为空的事实,那是因为 CronJob 没有以任何方式链接到 SCDF 任务。

希望这可以帮助将来的人。

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

公关发布:https://github.com/spring-cloud/spring-cloud-deployer-kubernetes/pull/348

关于kubernetes - 在 Kubernetes 下调度任务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565522/

相关文章:

spring - 使用 Java 和 Spring 的 AWS kinesis 消费者

Azure 数据工厂映射数据流 VS SSIS

go - 在 k8s golang api 中观看并获取事件,但一段时间后不再获取任何事件

kubernetes - Gitlab-CI 多行脚本和多脚本的区别

apache-spark - 如何使用 Helm 图表在K8S上产生 Spark

spring-boot - 使用 Eureka 服务器时出现 "Whitelabel Error Page"

java - 无法在 Spring Cloud Dataflow 上部署流

kubernetes - GKE Nginx入口-分配静态IP

azure - 如何强制 Azure 数据工厂数据流使用 Databricks

verilog - 数组中的个数