问题标签 [spring-cloud-deployer-kubernetes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-batch - Spring Batch Worker Pod 无法为 Spring Cloud 部署程序 kubernetes 选择自定义服务帐户
我正在尝试使用 spring-cloud-deployer-kubernetes 在 K8s 集群上运行带有远程分区的 spring 批处理。尽管我已经配置了一个服务帐户并在我的应用程序属性中提到了以下方式
主任务仍然无法生成工作 pod,并且在从 spring 云数据流 UI 启动任务时似乎没有选择属性,并在主 pod 中引发此错误:
PS:我使用的是spring-cloud-deployer-kubernetes 2.5.0版本
请有关如何正确配置服务帐户的一些提示?提前致谢!
spring - deploymentServiceAccountName 不适用于春季云数据流中的计划
我正在使用 Spring Cloud 数据流进行 Spring 批处理(带有远程分区),并使用 Spring Cloud 任务包装,部署在 kubernetes 中。我还为此创建了一个服务帐户。当我在 SCDF UI 的任务选项卡上使用启动选项时,批处理运行良好。但是当我在 SCDF UI 中尝试调度选项时,它似乎没有考虑配置的服务帐户名称,它给出了以下错误
以下是 SCDF 服务器配置中提供的示例配置
请阐明这个问题并帮助我解决这个问题
spring - spring batch 和 spring cloud deployer kubernetes 中的 Worker pod 资源限制
我正在尝试在 kubernetes 集群中运行 Spring Batch 应用程序。通过在部署 yaml 中放置以下代码段,我可以对主应用程序 pod 实施资源限制:
这些设置正在应用中,可以在 pod yaml(kubectl edit pod batch)中看到。
但是,这些限制不会传播到 worker pod。我尝试在批处理的 configmap 中添加以下属性来设置 cpu 和内存限制:
但是,worker pod 没有受到这些限制。我也尝试提供以下环境变量,但仍然没有将限制应用于工作 pod:
涉及的版本有:
- Spring Boot:2.1.9.RELEASE
- 春云:2020.0.1
- Spring Cloud 部署器:2.5.0
- Spring Cloud 任务:2.1.1.RELEASE
- Kubernetes:1.21
如何设置这些限制?
编辑:为 DeployerPartitionerHandler 添加代码:
kubernetes - Spring 批处理工作程序 pod 仅安排 2 个工作程序节点
我在 Kubernetes 环境中运行 Spring Batch 应用程序。k8s 集群有一个主节点和三个工作节点。我正在高负载下测试弹簧批次,它产生了大约 100 个工作容器。但是,所有 100 个 pod 仅在三个工作节点中的两个上出现。没有对节点进行节点选择器或附加标签。
我已经使用 Spring cloud deployer Kubernetes 在 Kubernetes 中创建了 worker pod。
涉及的版本有:
- Spring Boot:2.1.9.RELEASE
- 春云:2020.0.1
- Spring Cloud 部署器:2.5.0
- Spring Cloud 任务:2.1.1.RELEASE
- Kubernetes:1.21
如何确保在所有可用的工作程序节点上均匀地安排工作程序 pod?
以下是负责启动任务的分区处理程序实现。
spring-cloud-dataflow - 春季云数据流服务器任务参数
spring 云数据流服务器任务参数通过数据流服务器 UI 正确传递。它作为查询字符串传递并附加在 url 的末尾。
/tasks/executions?name=wr3-processing-smc-118&arguments=--INSTANCE=local
但是当我通过下面的java代码启动任务时,
arguments.add("--INSTANCE=local"); task.launch(arguments);
我在控制台中看到如下 POST 调用:
但是值 INSTANCE 不会传递到已启动的任务中。请说清楚
java - Spring Cloud Data Flow:无法为作业注释传递逗号分隔列表
我正在使用 Spring Cloud Data Flow Java Task DS L 在 Kubernetes 上启动 Spring Cloud Flow Tasks。
一切都按预期工作,并且 pod 启动成功;但是,当我尝试通过传递逗号分隔的作业注释作为输入参数来启动 pod 时,如下所示 (value1,value2),pod 的启动失败:
尝试使用上述参数启动任务会导致以下异常:
org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [[{"logref":"IllegalArgumentException","message":"无效注释值: value2","links":[]}]]
但是,如果我只传递一个注释值(即 value1),则相同的代码可以正常工作:
在进一步挖掘中,我发现问题的根本原因是Spring Cloud Data Flow 用于解析输入属性的PropertyParseUtils类:
在上面的类中编写代码的方式(参见Assert.isTrue
语句),它永远不会允许为给定的注释传递逗号分隔的列表。
问题:使用 Spring Cloud Data Flow 时,我们如何为注释传递逗号分隔的值列表?
更新 1:Spring Cloud Deployer Git Page也在跟踪这个问题
我尝试使用内部使用 Spring Cloud Deployer Kubernetes 版本(2.7.2)的最新 Spring Cloud Data Flow 版本(2.9.2),但仍然看到相同的问题。以下是 SCDF 服务器端的日志:
java.lang.IllegalArgumentException:无效的注释值:org.springframework.util.Assert.isTrue(Assert.java:121) 的 A"' ~[spring-core-5.3.14.jar!/:5.3.14] 在 org .springframework.cloud.deployer.spi.kubernetes.support.PropertyParserUtils.getStringPairsToMap(PropertyParserUtils.java:46) ~[spring-cloud-deployer-kubernetes-2.7.2.jar!/:2.7.2] 在 org.springframework。 cloud.deployer.spi.kubernetes.DeploymentPropertiesResolver.getJobAnnotations(DeploymentPropertiesResolver.java:701) ~[spring-cloud-deployer-kubernetes-2.7.2.jar!/:2.7.2] at org.springframework.cloud.deployer.spi .kubernetes.KubernetesTaskLauncher.launch(KubernetesTaskLauncher.java:283) ~[spring-cloud-deployer-kubernetes-2.7.2.jar!/:2.7.2] 在 org.springframework.cloud.deployer.spi.kubernetes.KubernetesTaskLauncher。启动(KubernetesTaskLauncher.java:120) ~[spring-cloud-deployer-kubernetes-2.7.2.jar!/:2.7.2] at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService.executeTask(DefaultTaskExecutionService.java:402) ~ [spring-cloud-dataflow-server-core-2.9.2.jar!/:2.9.2] at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService$$FastClassBySpringCGLIB$$422cda43.invoke() ~ [spring-cloud-dataflow-server-core-2.9.2.jar!/:2.9.2]2.9.2]2.9.2]
更新 2:此问题也可以通过直接调用 Rest Endpoint 来启动任务来重现:
更新:@cppwfs 我使用了您的示例客户端代码,并指向了托管在我们的企业OpenShift平台上的 SCDF 服务器 pod。我仍然能够重现该错误。
到目前为止,我们知道什么?
- 从PropertyParserUtilsTest ** 中的testAnnotationParseInvalidValue单元测试很明显,它不支持同一注释的逗号分隔值。
- 从 SCDF 服务器日志中可以明显看出,SCDF 服务器正在调用PropertyParserUtils#getStringPairsToMap ,并且它无法解析相同注释的逗号分隔值。
查看上面的#1 和#2,我们可以得出结论,需要修复PropertyParserUtils#getStringPairsToMap以支持同一注释的逗号分隔值?
您也许可以从 PropertyParserUtils.java 向后工作,以了解为什么在您的情况下不调用它,但我会说,我提供的 JUnits 和服务器日志非常确定根本原因,并且需要重构 PropertyParserUtils.java 以支持注释的逗号分隔值。
**错误消息:在客户端**
尝试启动任务时出现 HTTP 异常。根本原因:{"_embedded":{"errors":[{"message":"无效的注释值:key2","logref":"IllegalArgumentException","_links":{"self":{"href":" /"}}}]}}
java.lang.IllegalArgumentException:无效的注释值:org.springframework.util.Assert.isTrue(Assert.java:121) 的 key2 ~[spring-core-5.3.15.jar!/:5.3.15] 在 org.springframework .cloud.deployer.spi.kubernetes.support.PropertyParserUtils.getStringPairsToMap( PropertyParserUtils.java:46) ~[spring-cloud-deployer-kubernetes-2.7.2.jar!/:2.7.2] at org.springframework.cloud.deployer.spi.kubernetes.DeploymentPropertiesResolver.getJobAnnotations(DeploymentPropertiesResolver.java:701) ~[spring- cloud-deployer-kubernetes-2.7.2.jar!/:2.7.2] 在 org.springframework.cloud.deployer.spi.kubernetes.KubernetesTaskLauncher.launch(KubernetesTaskLauncher.java:283) ~[spring-cloud-deployer-kubernetes -2.7.2.jar!/:2.7.2] 在 org.springframework.cloud.deployer.spi.kubernetes.KubernetesTaskLauncher.launch(KubernetesTaskLauncher.java:120) ~[spring-cloud-deployer-kubernetes-2.7.2. jar!/:2.7.2] 在 org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService.executeTask(DefaultTaskExecutionService.java:402) ~[ spring-cloud-dataflow-server-core-2.9.2.jar!/:2.9.2] 在 org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService$$FastClassBySpringCGLIB$$422cda43.invoke() ~[spring-cloud-dataflow-server-core-2.9.2.jar !/:2.9.2] 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.15.jar!/:5.3.15] 在 org.springframework.aop .framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.15.jar!/:5.3.15] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 163) ~[spring-aop-5.3.15.jar!/:5.3.15] 在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.15 .jar!/:5.3.15] 在 org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.15.jar!/:5.3.15] 在 org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.15.jar !/:5.3.15] 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.15.jar!/:5.3.15] 在 org.springframework.aop .framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.15.jar!/:5.3.15] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java: 753)~[spring-aop-5.3.15.jar!/:5.3.15] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)~[spring-aop-5.3.15 .jar!/:5.3.15] 在 org.springframework.cloud.dataflow.server.service.impl。DefaultTaskExecutionService$$EnhancerBySpringCGLIB$$72a9e518.executeTask() ~[spring-cloud-dataflow-server-core-2.9.2.jar!/:2.9.2] 在 org.springframework.cloud.dataflow.server.controller.TaskExecutionController。启动(TaskExecutionController.java:193)~[spring-cloud-dataflow-server-core-2.9.2.jar!/:2.9.2]
docker - SCDF 无法从本地注册表中的映像读取应用程序属性:错误:“找不到注册表配置"
在本地裸机 kubernetes 集群中运行 SCDF。能够从公共和私有 docker 注册表(在 hub.docker.com)注册和运行任务应用程序。我重新标记图像并将其推送到私有本地注册表。但是当我现在注册它们时,SCDF 无法读取应用程序属性的图像元数据标签。该应用程序在使用本地注册表的 imagePullSecret 的集群中运行良好。SCDF 日志有以下错误:
我根据私有注册表的文档做了以下操作。
为本地注册表创建一个秘密:
kubectl create secret docker-registry myregcred --docker-server=172.16.16.51:5000 --docker-username=<reguser> --docker-password=<regpwd> --docker-email=<email>
将密钥作为文件挂载到 SCDF 容器。我验证了 myregcred 的秘密已安装。SCDF pod 中的 /etc/secrets/myregcred 目录具有密钥文件 .dockerconfigjson
通过提供注册表配置覆盖禁用 SSL 验证(因为注册表是自签名的)
使用 URI 在 SCDF 仪表板 UI 中注册应用程序:
我了解注册表配置是由 SCDF 基于已安装的机密推断的。所以不知道为什么我会收到这个错误。相同的秘密 myregcred 被用作 imagePullSecret 并且图像从本地注册表中提取并且应用程序运行良好。欣赏任何想法。谢谢。