为 spring 云数据流任务和 kubernetes 上的流部署设置节点选择器

Setting node selector for spring cloud dataflow task and stream deployments on kubernetes

我们想将所有 spring 云数据流任务和流部署修复到一组特定的节点。

我有这个手动工作的示例任务,例如

task launch test-timestamp --properties "deployer.*.kubernetes.deployment.nodeSelector=env:development"

(这并不明显,因为此处的文档 https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#configuration-kubernetes-deployer 似乎暗示关键只是 nodeSelector 而不是 deployment.nodeSelector)

这正确地将节点选择器添加到 kubernetes 的 pod yaml 中。

但我希望它自动设置,即使用 SCDF 服务器配置中的 task.platform.kubernetes.accounts.default 属性。

我试过:

task.platform.kubernetes.accounts.default.deployment.nodeSelector: env:development

task.platform.kubernetes.accounts.default.nodeSelector: env:development

但似乎都不起作用。正确的配置方法是什么?

通过 skipper 进行流部署的相同问题。

另外,如何为计划任务设置它?

抱歉,您必须尝试一些选项才能找到真正有效的正确部署程序 属性。

一般来说,根据 SCDF 的 Shell/UI,deployer 标记是 spring.cloud.deployer.kubernetes 属性 的 short-form。当您要在 stream/task 中配置更多部署程序属性时,需要重复提供这些内容,因此我们有一个 short-form。

但是,nodeSelector 不是具有默认值的 deployer-level 属性。它仅作为部署级别 属性 提供,这意味着它 作为每个部署基础的选项提供。

换句话说,它不能作为 "global" 配置的一个选项,所以这就是 task.platform.kubernetes.accounts.default.deployment.nodeSelector: env:development 没有考虑在内的原因。通过 Skipper 的 Streams 也是如此。

虽然可以改进。我创建了 spring-cloud/spring-cloud-deployer-kubernetes#300 用于跟踪 - 请随时订阅通知。然后,Streams 和 Tasks 都应该能够将其用作全局配置。合并 PR 后,您应该可以尝试使用 SCDF 的 2.2.0.BUILD-SNAPSHOT 图像。

至于 K8s-scheduler 实现,我们还不支持 nodeSelectors。我创建了 spring-cloud/spring-cloud-scheduler-kubernetes#25 - 如果您想从 K8s-deployer 移植功能,我们可以在 PR 上进行协作。