当前位置: 首页 > 知识库问答 >
问题:

Spring批处理和Spring云部署程序kubernetes中的Worker pod资源限制

丘飞
2023-03-14

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

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

这些设置正在应用,可以在pod yaml(kubectl编辑pod批处理)中看到。

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

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

然而,工人舱没有达到这些限制。我也尝试提供以下环境变量,但这些限制仍不适用于工作吊舱:

SPRING_CLOUD_DEPLOYER_KUBERNETES_CPU: 500m
SPRING_CLOUD_DEPLOYER_KUBERNETES_MEMORY: 250Mi

涉及的版本有:

  • Spring启动:2.1.9.发布
  • 春云:2020.0.1
  • Spring云部署器:2.5.0
  • 春云任务:2.1.1.发布
  • Kubernetes: 1.21

我如何设置这些限制?

编辑:添加部署分区处理程序的代码:

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个答案

寿浩言
2023-03-14

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

编辑:基于格伦·伦弗罗的评论

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

 类似资料:
  • 我正在使用带有thymeleaf的Spring Boot,我所有的资源都在Spring应用程序之外的路径上,例如。在dev env上应该使用url解析路径,并且live env继续路径。 为什么资源处理程序不处理这些类型的资源,但是如果我处理没有问题?我错过了什么吗? 编辑:如果是并且位置是url也没有被处理

  • 我使用的是最新的Spring Batch Admin(1.3.0.Release),并且在我的WAR工件pom文件中包含了'admin-manager'和'admin-resources'。 我的问题是css和图像资源从来没有正确的链接,所以我的管理主页看起来像这样。关于如何配置上下文以正确地包括这些资源,有什么建议吗?

  • 我需要依次执行七个不同的流程(一个接一个)。数据存储在Mysql中。我正在考虑以下选项,如果我错了,或者有更好的解决方案,请纠正我。 要求: > 需要分块处理数据。 我的解决方案和问题:数据读取: 使用JdbcCursorItemReader读取数据,因为这是性能最好的db阅读器-但是,SQL非常复杂,所以我可能不得不考虑使用JdbcTemboard的自定义ItemReader?这让我在处理数据时

  • 我需要访问两个数据源: Spring批处理存储库:在内存H2中 我的步骤需要访问。 我在那里看到了几个关于如何创建自定义

  • 我需要使用Spring batch创建批处理作业。 作业将访问oracle DB,然后获取记录,在tasklet中处理它们并提交结果。 我打算用hibernate和Spring一起处理数据。作业将通过AutoSys执行。我使用的命令行JobRunner作为切入点。 (额外信息-我使用的DynamicWebProject已转换为Gradle、STS、Spring 4.0、Hibernate 5.0,

  • 我正在学习spring cloud dataflow的概念,并想知道存储全局资源的常见方式是什么。 例如,当我有一个带有PMML处理器的流时,我希望通过Spring-Cloud-Task周期性地重新训练底层的PMML模型。 我将在哪里存储模型,以便它可以被处理器用作(只读)资源,并由任务每晚更新?Spring云数据流中是否有一个全局存储的概念?我应该使用spring-cloud之外的传统数据库,还