martes, 6 de julio de 2021

Helm plantillas para los recursos de kubernetes

Ya de por sí tener kubernetes si se usa con archivos que nos definan los recursos de infraestructura es un gran ventaja por que tenemos una forma replicable, usualmente versionada de la infraestructura que nos permite rastrear errores con facilidad. 


Los desarrolladores en general van y siguen automatizando/generalizando más para ganar velocidad y evitar que con la réplica de copiar/pegar se generen errores inesperados en este caso en la definición de recursos de kubernetes.


Es que un problema que puede ser frecuente es tener un recurso desplegado en algún proveedor de nube que debemos definir para un ambiente de desarrollo y para un ambiente de producción, usualmente con pequeñas diferencias como:

  • en uno se puede estar usando una url diferente
  • tener habilitado un mecanismos de seguridad adicional en producción
  • usar un espacio de nombres diferentes

Al final es como si tuviéramos un plano del recurso y en puntos específicos quisiéramos definir valores dependendiendo de lo que necesitamos del recurso y esto es lo que permite hacer helm

Una forma de definir plantillas para los recursos de kubernetes que podemos aplicar con diferentes valores usualmente una para cada ambiente pero también una sola plantilla se puede estar usando múltiples veces para un recurso del mismo tipo en el mismo ambiente por ejemplo si un equipo realiza spring-boot.

para definir un recurso de esta manera lo primero es definir un chart que nos permite colocar entre otras cosas un nombre,una descripción, quienes mantienen esta plantilla etc
(Chart.yaml)

apiVersion: v2
name: <the-name>
description: <the description>
version: 1.0.0 # chart version




Luego creamos una carpeta templates y dentro definimos nuestro recurso o recursos de kubernetes con la ubicación de los valores que vamos a definir en otros archivos. incluso podemos colocar condiciones if para que dado que un valor se defina una configuración o no
templates/<uno o muchos archivos>.yaml

{{ .Values.host }} # para obtener valores de la definicion de values que
 tengamos
{{- if .Values.tls.enabled }}
{{- end }} # hay que tener cuidado respetando la indentacion 
nos permite poner definiciones dinamicas solo si es true el 
codigo en el medio entre if y end se agrega 
 

finalmente definimos un archivo de valores que se van a aplicar a nuestros templates
(values-xxx.yaml)

host: dev.example.com
tls:
enabled: false

para instalar esta definición con nuestra plantilla podemos usar el comando(previo a estar conectado a nuestro cluster sea el proveedor de nube o un cluster corriendo en la maquina propia como minikube)


$ helm install -f <whatever-name> values-xxx.yaml .


instalar el nombre que le pongamos el archivo values qué le vamos a aplicar a la plantilla con el . osea chart en el directorio actual
y si realizamos algún cambio sea en las plantillas o en los valores después de haberlo instalado podemos actualizarlo con 


$ helm upgrade -f <whatever-name> values-xxx.yaml .

Otra herramienta en la misma línea de helm es kustomize. helm se recomienda para aplicaciones propias en las que buscamos definir todo mientras kustomize se recomienda cuando vamos a definir despliegue de aplicaciones de terceros a las que solo queremos sobrescribir pequeños detalles con la configuración propia(por ejemplo una url).

No hay comentarios:

Publicar un comentario