Ограничение ресурсов 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. Этот параметр следует использовать для указания свойств развертывания для рабочих задач.

Другие вопросы по тегам