Планируется, что поды Spring Batch Worker только 2 рабочих узла
Я запускаю приложение Spring Batch в среде kubernetes. Кластер k8s состоит из одного главного и трех рабочих узлов. Я тестирую весеннюю партию при высокой нагрузке, которая порождает около 100 рабочих модулей. Однако все 100 подов появляются только на двух из трех рабочих узлов. Селектор узлов или дополнительная маркировка узлов не выполнялись.
Я использовал Spring Cloud Deployer kubernetes для создания рабочих модулей в кубернетах.
Участвующие версии:
- Spring Boot: 2.1.9.RELEASE
- Весеннее облако: 2020.0.1
- Spring Cloud Deployer: 2.5.0
- Задача Spring Cloud: 2.1.1.RELEASE
- Kubernetes: 1.21
Как я могу обеспечить равномерное планирование рабочих подов на всех доступных рабочих узлах?
Ниже представлена реализация обработчика разделов, отвечающего за запуск задач.
@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);
}
1 ответ
Разместив это из комментариев как вики сообщества для лучшей видимости, не стесняйтесь редактировать и расширять.
Существуют механизмы планирования, которые могут предотвратить создание модулей планирования на некоторых узлах:
Если ничего не установлено, стоит попробовать снова присоединиться к узлу. Например, он мог быть неправильно зарегистрирован (это решило проблему, указанную выше).