ConfigMap for PODS, созданный для пакетных заданий, запускаемых из SCDF

Я запускаю пакетные задания 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?

Спасибо.


person Rajesh2389    schedule 24.07.2020    source источник
comment
Ваш 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
comment
Реестр Docker находится там же, где запущен SCDF. Я могу вытащить изображение, запустить внутри него Job. Но вакансии не находят и не находят конфигурационную карту при запуске из SCDF.   -  person Rajesh2389    schedule 24.07.2020


Ответы (1)


Если вы пытаетесь передать некоторые конфигурации для своих приложений-задач, вы можете либо иметь свои конфигурации в конфигурации весеннего облака и передать URL-адрес облачной конфигурации в качестве переменных среды для приложения-задачи, либо передать конфигурацию напрямую как переменные среды.

как передавать переменные среды описано в этом Документация SCDF

person Janani Kamaraj    schedule 05.11.2020