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。
涉及的版本有:
- Spring 启动:2.1.9.RELEASE
- Spring云:2020.0.1
- Spring 云部署器:2.5.0
- Spring 云任务:2.1.1.RELEASE
- Kubernetes:1.21
如何确保工作人员 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:
如果未设置任何内容,则值得尝试重新加入节点。例如它可能没有正确注册(这解决了上面的问题)。
我是运行SpringKubernetes环境下的批量应用。 k8s 集群有 1 个 master 节点和 3 个 worker 节点。我正在高负载下测试 spring 批次,它产生了大约 100 个工人 pods。但是,所有 100 pods 只出现在三个工作节点中的两个上。节点上没有节点选择器或附加标签。
我已经使用 Spring 云部署器 Kubernetes 在 Kubernetes 中创建了 worker pods。
涉及的版本有:
- Spring 启动:2.1.9.RELEASE
- Spring云:2020.0.1
- Spring 云部署器:2.5.0
- Spring 云任务:2.1.1.RELEASE
- Kubernetes:1.21
如何确保工作人员 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:
如果未设置任何内容,则值得尝试重新加入节点。例如它可能没有正确注册(这解决了上面的问题)。