我在 Kubernetes 环境中运行 Spring Batch 应用程序。k8s 集群有一个主节点和三个工作节点。我正在高负载下测试弹簧批次,它产生了大约 100 个工作容器。但是,所有 100 个 pod 仅在三个工作节点中的两个上出现。没有对节点进行节点选择器或附加标签。
我已经使用 Spring cloud deployer Kubernetes 在 Kubernetes 中创建了 worker pod。
涉及的版本有:
- Spring Boot:2.1.9.RELEASE
- 春云:2020.0.1
- Spring Cloud 部署器:2.5.0
- Spring Cloud 任务:2.1.1.RELEASE
- Kubernetes:1.21
如何确保在所有可用的工作程序节点上均匀地安排工作程序 pod?
以下是负责启动任务的分区处理程序实现。
@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);
}