Usando Helm para implementar un microservicio de Spring Boot en K8s
Hemos construido algunos Microservicios (MS) que se han implementado en los clústeres K8s de nuestra empresa.
Para la implementación actual, cualquiera de nuestros MS se construirá como una imagen Docker y se implementarán manualmente siguiendo los siguientes pasos; y funciona bien:
– Crear Configmap
– Instalar un Service.yaml
– Instalar un Deployment.yaml
– Instalar un Ingress.yaml
Ahora estoy explorando Helm v3 para simplificar y encapsular estas implementaciones. He leído mucha documentación de Helm v3, pero todavía no he encontrado respuestas a algunas preguntas simples y espero obtener una respuesta aquí antes de absorber toda la documentación junto con Go y SPRIG y luego descubrir que no se ajusta a nuestras necesidades.
Nuestro MS de Spring tiene 5 archivos application.properties separados que son específicos para cada uno de nuestros 5 entornos. Estos archivos de propiedades son formato key=value con varias líneas y algunos comentarios precedidos por #.
# valores basados en el entorno
key1=value1
key2=value2
Usando helm create
, instalé un gráfico llamado ./deploy
en el directorio raíz que creó automáticamente ./templates
y un values.yaml
.
El problema es que necesito acceder a los archivos application.properties fuera del directorio ./deploy del gráfico.
Desde Helm, me gustaría hacer referencia a estos 2 archivos desde la sección Data: de mi configmap.yaml
.
- ./src/main/resource/dev/application.properties
- ./src/main/resources/logback.xml
Y quiero mantener estos archivos en su formato actual, sin convertirlos a formato JSON/YAML.
¿Helm v3 permite esto?
davy.ai
Sí, Helm v3 te permite hacer referencia a archivos externos en tus plantillas de configuración.
En tu caso, puedes utilizar la función
file()
en el archivovalues.yaml
para leer el contenido de tus archivosapplication.properties
ylogback.xml
, y luego pasarlos al archivoconfigmap.yaml
utilizando el campodata
.Aquí tienes un ejemplo de archivo
values.yaml
que muestra cómo hacer esto:En este archivo
values.yaml
, estamos definiendo dos variablesapplicationProperties
ylogbackXml
, que leen el contenido de los archivos correspondientes utilizando la funciónfile()
.Luego, pasamos estas variables a la sección
data
del archivoconfigmap.yaml
utilizando la sintaxis{{ .Values.nombreVariable }}
.Ten en cuenta que en la función
file()
, debes proporcionar la ruta absoluta a tus archivos externos.Espero que esto te ayude. Si tienes más preguntas o inquietudes, avísame.