Я запускаю пакетные задания Spring из SCDF. Пакетное приложение развертывается как образ докера в среде openshift. И SCDF работает в той же среде openshift под тем же пространством имен, что и образ докера.
Конфигурационная карта, созданная для SCDF, работает хорошо. Но когда я добавляю application.yaml пакетного проекта в конфигурационную карту openshift, он не передается POD, когда он запускается из SCDF. Я дал то же имя для spring.applciation.name и config-map's metadata.name. Также я добавил следующие свойства в пакетное приложение. Но это бесполезно. Свойства из config-map не читаются.
application.yaml
spring:
application:
name: batch-app
cloud:
kubernetes:
config:
name: batch-app
namespace: batch-app-qa
sources:
- name: batch-app
config-map.yaml
apiVersion: v1
kind: ConfigMap
metaData:
name: batch-app
namespace: batch-app-qa
labels:
app: batch-app
data:
application.properties: |-
message=In QA Environment
spring.datasource.batch.password=**********
spring.datasource.batch2.password=********
Журналы заданий / POD:
[main] WARN org.springframework.cloud.kubernetes.config.ConfigMapPropertySource.getData - Can't read configMap with name: [batch-app] in namespace:[batch-app-qa]. Ignoring.
io.fabric8.kubernetes.client.KubernetesClientException: Operation: [get] for kind: [ConfigMap] with name: [batch-app] in namespace: [batch-app-qa] failed.
at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:72) ~[kubernetes-client-4.4.1.jar!/:na]
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:229) ~[kubernetes-client-4.4.1.jar!/:na]
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:162) ~[kubernetes-client-4.4.1.jar!/:na]
at org.springframework.cloud.kubernetes.config.ConfigMapPropertySource.getData(ConfigMapPropertySource.java:95) [spring-cloud-kubernetes-config-1.1.2.RELEASE.jar!/:1.1.2.RELEASE]
at org.springframework.cloud.kubernetes.config.ConfigMapPropertySource.<init>(ConfigMapPropertySource.java:76) [spring-cloud-kubernetes-config-1.1.2.RELEASE.jar!/:1.1.2.RELEASE]
at org.springframework.cloud.kubernetes.config.ConfigMapPropertySourceLocator.getMapPropertySourceForSingleConfigMap(ConfigMapPropertySourceLocator.java:95) [spring-cloud-kubernetes-config-1.1.2.RELEASE.jar!/:1.1.2.RELEASE]
at org.springframework.cloud.kubernetes.config.ConfigMapPropertySourceLocator.lambda$locate$0(ConfigMapPropertySourceLocator.java:78) [spring-cloud-kubernetes-config-1.1.2.RELEASE.jar!/:1.1.2.RELEASE]
Caused by: javax.net.ssl.SSLException: java.net.SocketException: Broken pipe (Write failed)
at sun.security.ssl.Alerts.getSSLException(java.base@9-internal/Alerts.java:214) ~[na:na]
at sun.security.ssl.SSLSocketImpl.fatal(java.base@9-internal/SSLSocketImpl.java:1962) ~[na:na]
[main] INFO org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize - Located property source: [BootstrapPropertySource {name='bootstrapProperties-configmap.batch-app.batch-app-qa'}]
ЖУРНАЛ SCDF при выполнении задания
2020-07-24 12:24:33.479 WARN 1 --- [-nio-80-exec-10] ApplicationConfigurationMetadataResolver : Failed to retrieve properties for resource:Docker Resource [docker:docker-registry.default.svc:5000/batch-app-qa/batch-job] ---> **This is the Batch Application being loaded into scdf for job launch**
java.lang.NullPointerException: null
at org.springframework.cloud.dataflow.configuration.metadata.container.DefaultContainerImageMetadataResolver.getRegistryRequest(DefaultContainerImageMetadataResolver.java:162) ~[spring-cloud-dataflow-configuration-metadata-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.configuration.metadata.container.DefaultContainerImageMetadataResolver.getImageLabels(DefaultContainerImageMetadataResolver.java:110) ~[spring-cloud-dataflow-configuration-metadata-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.configuration.metadata.BootApplicationConfigurationMetadataResolver.resolvePropertiesFromContainerImage(BootApplicationConfigurationMetadataResolver.java:157) ~[spring-cloud-dataflow-configuration-metadata-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.configuration.metadata.BootApplicationConfigurationMetadataResolver.listProperties(BootApplicationConfigurationMetadataResolver.java:134) ~[spring-cloud-dataflow-configuration-metadata-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.server.controller.WhitelistProperties.qualifyProperties(WhitelistProperties.java:62) [spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.server.service.impl.TaskServiceUtils.mergeAndExpandAppProperties(TaskServiceUtils.java:164) [spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.server.service.impl.TaskAppDeploymentRequestCreator.createRequest(TaskAppDeploymentRequestCreator.java:115) [spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService.executeTask(DefaultTaskExecutionService.java:258) [spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService$$FastClassBySpringCGLIB$$422cda43.invoke(<generated>) [spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) [spring-aop-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366) ~[spring-tx-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) [spring-aop-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskExecutionService$$EnhancerBySpringCGLIB$$4d03bb9f.executeTask(<generated>) ~[spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at org.springframework.cloud.dataflow.server.controller.TaskExecutionController.launch(TaskExecutionController.java:172) ~[spring-cloud-dataflow-server-core-2.5.1.RELEASE.jar!/:2.5.1.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_212]
Как предоставить карту конфигурации для модуля, запускаемого из SCDF. Поскольку пакетное приложение загрузки Spring не имеет / не нуждается в файле конфигурации развертывания, как мне указать, чтобы приложение пакетной загрузки ссылалось на конфигурационную карту, когда оно запускается как pod из scdf?
Спасибо.
docker-registry.default.svc:5000
(из которого разрешается batch-app-qa / batch-job) реестр докеров защищен секретами? они установлены? Некоторая общая информация о том, как настроить частный реестр докеров, доступна здесь: dataflow.spring.io/docs/2.6.0.SNAPSHOT/feature-guides/general/ - person tzolov   schedule 24.07.2020