Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

970
Vistas
Spring Boot: invalidar las propiedades application.yml de Kubernetes ConfigMap

Necesito reemplazar algunas de las propiedades definidas en una aplicación.yml de la aplicación Spring Boot que se ejecuta en k8s. ¿Cómo puedo hacer esto? La única forma que encontré es montar application.yml completo, pero solo necesito anular una propiedad.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Las aplicaciones Spring Boot deben anular las propiedades en los archivos de configuración (también conocido como application.yml la mayoría de las veces) con variables de entorno.

Suponiendo que la aplicación se implementa en Kubernetes con un pod (pero no importa, las implementaciones, los StatefulSets, los trabajos son todos iguales en cuanto al entorno), puede inyectar variables de entorno dentro del contenedor asignándolas directamente a la implementación en sí, o con un ConfigMap (o un secreto, en caso de que la propiedad sea más segura y enmascarada)

 apiVersion: v1 kind: Pod metadata: name: example spec: containers: - name: example-container image: example-image:latest env: - name: THIS_IS_AN_ENV_VARIABLE value: "Hello from the environment" - name: spring.persistence.url value: "The persistence url, for example"

Aún mejor, puede inyectar todo el contenido de un ConfigMap como variables de entorno:

 apiVersion: v1 kind: ConfigMap metadata: name: example-config data: spring.persistence.url: "your persistence url" spring.mail.user: "your mail user"

Y luego tu Pod:

 apiVersion: v1 kind: Pod metadata: name: example spec: containers: - name: example-container image: example-image:latest envFrom: - configMapRef: name: example-config

Dentro del contenedor, las variables estarán en el entorno... y Spring debería usarlas para anular las variables con el mismo nombre que están definidas (o tal vez ni siquiera definidas) en su application.yml

Para más información:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/ https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod- información/ https://docs.spring.io/spring-boot/docs/1.3.3.RELEASE/reference/html/boot-features-external-config.html

over 4 years ago · Santiago Trujillo Denunciar

0

Podría ser factible de otra manera, por eso estoy respondiendo de nuevo. Hazlo de una manera fácil.

Cree su application.yml en un mapa de configuración y móntelo como un subdirectorio llamado config en el mismo directorio donde se encuentra el contenedor de arranque Spring.

La documentación de Spring Boot (propiedades de la aplicación externa) dice:

Spring Boot buscará y cargará automáticamente los archivos application.properties y application.yaml desde las siguientes ubicaciones cuando se inicie su aplicación:

La raíz del classpath

El paquete classpath /config

El directorio actual

El subdirectorio /config en el directorio actual

Directorios secundarios inmediatos del subdirectorio /config

Lo que significa que no tenemos que ocuparnos de configurar nada. Debería encontrar la configuración dentro del subdirectorio config.

 apiVersion: v1 kind: ConfigMap metadata: name: spring-application-config data: application.yml: | spring: application: name: This is just an example, add as many values as you want.

pod.yaml:

 ... volumeMounts: - name: spring-application-config mountPath: /app/config - name: spring-application-config configMap: name: spring-application-config ...

Suponiendo que su archivo jar de arranque de primavera se encuentra en la ruta / aplicación

over 4 years ago · Santiago Trujillo Denunciar

0

Tuvimos que hacer algo similar. Y te explico cómo lo hicimos. Posiblemente esto ayude.

Si puede modificar su Dockerfile, cree un script entrypoint.sh. Podría contener lo siguiente:

punto de entrada.sh

 #!/bin/bash set -e # Source custom scripts, if any if [ -d /etc/spring.d ]; then for f in /etc/spring.d/*; do if [ -x "$f" ]; then echo "Running $f ..." >&2 "$f" else echo "Could not run $f, because it's missing execute permission (+x)." >&2 fi done unset f fi exec "$@"

El entrypoint.sh está ejecutando scripts personalizados dentro del directorio /etc/spring.d al inicio. Puedes poner cualquier script ejecutable dentro, lo que quieras.

Dentro de /etc/spring.d puede crear un script de copia que copie una aplicación.yml en el mismo directorio donde se encuentra el archivo jar de arranque de Spring . El ejemplo sigue.

Su Dockerfile podría verse como

 FROM adoptopenjdk:15-jre RUN mkdir /app COPY application.jar /app/ COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["java", "-jar", "/app/application.jar"]

Si está preparado, puede usar un configMap para definir el script de copia y montarlo en el directorio /etc/spring.d

 apiVersion: v1 kind: ConfigMap metadata: name: spring-d data: copy-yaml.sh: | #!/bin/bash cp /config/application.yml /app/application.yml

El script de copia se encargará de que application.yaml (que también se montará como configMap) se copie en el lugar correcto.

Y otro mapa de configuración para su aplicación.yml

 apiVersion: v1 kind: ConfigMap metadata: name: app-yaml data: application.yml: | spring: application: name: This is just an example, add as many values as you want.

Dentro de tu pod yaml podrías hacer algo como esto:

 ... volumeMounts: - name: spring-d mountPath: /etc/spring.d - name: app-yaml mountPath: /config - name: spring-d configMap: name: spring-d defaultMode: 0777 - name: app-yaml configMap: name: app-yaml ...

ESTE CÓDIGO NO ESTÁ PROBADO ACTUALMENTE, SÓLO ESTÁ MOSTRANDO UN EJEMPLO DE CÓMO PUEDE RESOLVER SU PROBLEMA DE UNA MANERA MUY FLEXIBLE.

Usé fragmentos de mis guiones y los copié aquí juntos, por lo que tal vez podría haber pequeños errores en el interior. Por favor hagamelo saber.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda