Ограничение ресурсов Worker Pod в Spring Batch и Spring Cloud Deployer kubernetes
Я пытаюсь запустить приложение Spring Batch в кластере кубернетов. Я могу установить ограничения ресурсов для основного модуля приложения, разместив следующий фрагмент в yaml развертывания:
resources:
limits:
cpu: 500m
ephemeral-storage: 500Mi
memory: 250Mi
Эти настройки применяются, и их можно увидеть в модуле pod yaml (пакет модуля редактирования kubectl).
Однако эти ограничения не распространяются на рабочие модули. Я попытался добавить следующие свойства в configmap пакета, чтобы установить ограничения процессора и памяти:
SPRING.CLOUD.DEPLOYER.KUBERNETES.CPU: 500m
SPRING.CLOUD.DEPLOYER.KUBERNETES.MEMORY: 250Mi
Однако рабочие модули не получают этих ограничений. Я также попытался предоставить следующие переменные env, но все же ограничения не были применены к рабочему модулю:
SPRING_CLOUD_DEPLOYER_KUBERNETES_CPU: 500m
SPRING_CLOUD_DEPLOYER_KUBERNETES_MEMORY: 250Mi
Участвующие версии:
- Spring Boot: 2.1.9.RELEASE
- Весеннее облако: 2020.0.1
- Spring Cloud Deployer: 2.5.0
- Задача Spring Cloud: 2.1.1.RELEASE
- Kubernetes: 1.21
Как я могу установить эти ограничения?
РЕДАКТИРОВАТЬ: добавление кода для DeployerPartitionerHandler:
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 ответ
Поскольку создается с использованием
new
оператор в
partitionHandler
метод, ему не известны значения из файла свойств. В
DeployerPartitionHandler
предоставляет сеттер для
deploymentProperties
. Этот параметр следует использовать для указания свойств развертывания для рабочих задач.