spring - spring batch 和 spring cloud deployer kubernetes 中的 Worker pod 资源限制
问题描述
我正在尝试在 kubernetes 集群中运行 Spring Batch 应用程序。通过在部署 yaml 中放置以下代码段,我可以对主应用程序 pod 实施资源限制:
resources:
limits:
cpu: 500m
ephemeral-storage: 500Mi
memory: 250Mi
这些设置正在应用中,可以在 pod yaml(kubectl edit pod batch)中看到。
但是,这些限制不会传播到 worker pod。我尝试在批处理的 configmap 中添加以下属性来设置 cpu 和内存限制:
SPRING.CLOUD.DEPLOYER.KUBERNETES.CPU: 500m
SPRING.CLOUD.DEPLOYER.KUBERNETES.MEMORY: 250Mi
但是,worker pod 没有受到这些限制。我也尝试提供以下环境变量,但仍然没有将限制应用于工作 pod:
SPRING_CLOUD_DEPLOYER_KUBERNETES_CPU: 500m
SPRING_CLOUD_DEPLOYER_KUBERNETES_MEMORY: 250Mi
涉及的版本有:
- Spring Boot:2.1.9.RELEASE
- 春云:2020.0.1
- Spring Cloud 部署器: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);
}
解决方案
由于DeployerPartitionHandler
是使用方法中的new
运算符创建的partitionHandler
,因此它不知道属性文件中的值。DeployerPartitionHandler
为deploymentProperties
. _ 您应该使用此参数来指定工作任务的部署属性。
编辑:根据 Glenn Renfro 的评论
部署属性应该是spring.cloud.deployer.kubernetes.limits.cpu
而不是spring.cloud.deployer.kubernetes.cpu
。
推荐阅读
- reactjs - 为什么在 _document.js 中使用 getInitialProps 会导致 Next.js 应用程序崩溃?
- python - 为什么我的代码会输出?(可能逻辑问题)
- istio - 命名空间“istio-system”中没有 Istio pod
- java - JDA - 新用户加入公会时的事件
- python - 使用枚举函数打印列表的单个值
- linux - 可能是什么原因使程序在两个具有很大不同 ipc(每秒仪器)的计算上运行?
- python - 无法根据类别显示帖子(Django)
- kubernetes - 如何在 digitalocean 上的集群中添加负载均衡器
- emgucv - emgu.cv 框架“Microsoft.WindowsDesktop.App”
- c++ - C++ 函子,有什么有效的方法吗?