spring 批次和 spring 云部署器 kubernetes 中的 Worker pod 资源限制

Worker pod resource limit in spring batch and spring cloud deployer kubernetes

我正在尝试 运行 Spring kubernetes 集群中的批处理应用程序。通过在部署 yaml 中放置以下代码片段,我能够对主应用程序 pod 实施资源限制:

resources:
  limits:
    cpu: 500m
    ephemeral-storage: 500Mi
    memory: 250Mi

正在应用这些设置,并且可以在 pod yaml 中看到(kubectl edit pod batch)。

但是,这些限制不会传播到工作人员 pods。我尝试在批处理的 configmap 中添加以下属性来设置 cpu 和内存限制:

SPRING.CLOUD.DEPLOYER.KUBERNETES.CPU: 500m
SPRING.CLOUD.DEPLOYER.KUBERNETES.MEMORY: 250Mi

但是,工作人员 pods 没有得到这些限制。我也尝试提供以下 env 变量,但限制仍未应用于 worker pod:

SPRING_CLOUD_DEPLOYER_KUBERNETES_CPU: 500m
SPRING_CLOUD_DEPLOYER_KUBERNETES_MEMORY: 250Mi

涉及的版本有:

如何设置这些限制?

编辑:为 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);
}

由于 DeployerPartitionHandler 是在 partitionHandler 方法中使用 new 运算符创建的,因此它不知道属性文件中的值。 DeployerPartitionHandlerdeploymentProperties 提供了 setter。您应该使用此参数来指定工作任务的部署属性。

编辑:基于 Glenn Renfro 的评论

部署 属性 应该是 spring.cloud.deployer.kubernetes.limits.cpu 而不是 spring.cloud.deployer.kubernetes.cpu