我正在使用 Spring Cloud Data Flow Java Task DSL在 Kubernetes 上启动 Spring Cloud Flow Tasks。在某些情况下,我可以看到调用Task.launch()
导致客户端出现以下异常:
org.springframework.web.client.HttpServerErrorException$GatewayTimeout: 504 Gateway Time-out: [no body]
at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:116)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:186)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:125)
更新:
据我了解,此问题的根本原因是 Task DSL 向 Spring Cloud Data Flow Server 发送了一个请求,后者又向 Kubernetes API 发送了一个请求以部署 pod。Kubernetes API 超时,进而导致 SCDF 向任务 DSL 返回网关错误。
我做了一些深入的挖掘,如果我理解正确的话,Spring Cloud Data Flow Server 使用fabrics8io库在 Kubernetes 上部署任务。例如,查看OpenShift的 fabrics8io 代码,我发现它在OkHTTPClient
内部使用,这似乎是罪魁祸首。这似乎正在使用 rhe 默认超时。当 Kubernetes 集群运行缓慢时,“OkHttpClient”会超时,进而导致数据流服务器的管道损坏,进而导致客户端收到 504。
问题在使用 Spring Cloud Data Flow 时,有没有办法增加OkHTTPClient
内部使用的 fabrics8io 的请求超时?