Spring 批处理工作程序 pods 仅安排 2 个工作程序节点

Spring batch worker pods getting scheduled only 2 worker nodes

我是运行SpringKubernetes环境下的批量应用。 k8s 集群有 1 个 master 节点和 3 个 worker 节点。我正在高负载下测试 spring 批次,它产生了大约 100 个工人 pods。但是,所有 100 pods 只出现在三个工作节点中的两个上。节点上没有节点选择器或附加标签。

我已经使用 Spring 云部署器 Kubernetes 在 Kubernetes 中创建了 worker pods。

涉及的版本有:

如何确保工作人员 pods 在所有可用的工作人员节点上得到均匀安排?

以下是负责启动任务的分区处理程序实现。

@Bean
public PartitionHandler partitionHandler(TaskLauncher taskLauncher, JobExplorer jobExplorer) {

    Resource resource = this.resourceLoader.getResource(resourceSpec);

    DeployerPartitionHandler partitionHandler = new DeployerPartitionHandler(taskLauncher, jobExplorer, resource,
        "worker");

    commandLineArgs.add("--spring.profiles.active=worker");
    commandLineArgs.add("--spring.cloud.task.initialize.enable=false");
    commandLineArgs.add("--spring.batch.initializer.enabled=false");
    commandLineArgs.add("--spring.cloud.task.closecontext_enabled=true");
    commandLineArgs.add("--logging.level.root=DEBUG");

    partitionHandler.setCommandLineArgsProvider(new PassThroughCommandLineArgsProvider(commandLineArgs));
    partitionHandler.setEnvironmentVariablesProvider(environmentVariablesProvider());
    partitionHandler.setApplicationName(appName + "worker");
    partitionHandler.setMaxWorkers(maxWorkers);

    return partitionHandler;
}

@Bean
public EnvironmentVariablesProvider environmentVariablesProvider() {
    return new SimpleEnvironmentVariablesProvider(this.environment);
}

为了更好的可见性,将评论作为社区 wiki 发布,随时编辑和扩展。


有一些调度机制可以阻止某些节点上的调度pods:

如果未设置任何内容,则值得尝试重新加入节点。例如它可能没有正确注册(这解决了上面的问题)。