Hoy les traigo una publicación de un colega, Ramiro Duarte (Platform Engineer), quien nos compartió un articulo interesante de Helm usando dependencies.
En el mundo de Kubernetes, la eficiencia y la mantenibilidad son clave. Dos herramientas que destacan en este aspecto son Helm y ArgoCD. En este artículo, exploraremos cómo puedes utilizar Helm Charts personalizados junto con Helm Dependencies para simplificar la gestión de tus servicios, y cómo esto se compara con el uso de Helm + Kustomize.
¿Qué es Helm?
Helm es un gestor de paquetes para Kubernetes que permite definir, instalar y actualizar aplicaciones empaquetadas como charts. Los charts son colecciones de archivos que describen los recursos de Kubernetes.
¿Qué es ArgoCD?
ArgoCD es una herramienta de entrega continua (CD) para Kubernetes que gestiona la implementación de aplicaciones. Utiliza un enfoque de GitOps, donde las configuraciones se almacenan en un repositorio de Git y ArgoCD se encarga de sincronizar el estado deseado con el estado real del clúster.
Uso de Helm Charts Personalizados con Helm Dependencies
Problema
Imagina que tienes varios servicios en tu aplicación, y cada uno necesita configuraciones similares, como la configuración de Ingress, secrets o ConfigMaps. La forma tradicional de manejar esto sería tener un chart para cada servicio, lo cual puede volverse repetitivo y difícil de mantener.
Solución: Helm Dependencies
En lugar de duplicar configuraciones, puedes crear un Helm Chart base que contenga todas las configuraciones comunes y luego usar Helm Dependencies en el archivo Chart.yaml para incluir este chart base en los charts de tus servicios.
Estructura de Carpeta
Imagina la siguiente estructura de carpetas:
/Charts
/base
Chart.yaml
templates/
_helpers.tpl
ingress.yaml
secrets.yaml
/products
/service-a
Chart.yaml
values-dev.yaml
values-prod.yaml
/service-b
Chart.yaml
values-dev.yaml
values-prod.yaml
Ejemplo de Chart.yaml con Dependencias
El archivo Chart.yaml del servicio podría verse así:
apiVersion: v2
name: service-a
version: 0.1.0
dependencies:
- name: base
version: 0.1.0
repository: "file://../../Charts/base"
Ejemplo de Uso: Solución de Observabilidad
Imagina que quieres implementar una solución de observabilidad que incluya Prometheus, kube-state-metrics y metrics-server. En este caso, puedes definir las dependencias en el Chart.yaml de tu solución de observabilidad:
apiVersion: v2
name: observability
version: 0.1.0
dependencies:
- name: prometheus
version: 14.11.1
repository: "https://prometheus-community.github.io/helm-charts"
- name: kube-state-metrics
version: 3.2.2
repository: "https://kubernetes.github.io/kube-state-metrics"
- name: metrics-server
version: 5.8.1
repository: "https://kubernetes-sigs.github.io/metrics-server"
Ventajas
- Reutilización de Código: Reduce la duplicación de configuraciones comunes.
- Mantenibilidad: Facilita la actualización de configuraciones comunes desde un único lugar.
- Consistencia: Asegura que todas las configuraciones compartidas estén alineadas.
Para más información y un tutorial detallado, puedes consultar la siguiente documentación
Comparación con Helm + Kustomize
Helm y Kustomize son herramientas complementarias. Kustomize permite la superposición y personalización de configuraciones sin necesidad de modificar los archivos originales. Combinado con Helm, puedes obtener un control granular y flexible sobre las configuraciones de tus servicios.
Ejemplo con Kustomize
Imagina que tienes la siguiente estructura:
/base
deployment.yaml
service.yaml
/overlays
/service-a
kustomization.yaml
deployment-patch.yaml
/service-b
kustomization.yaml
deployment-patch.yaml
En kustomization.yaml:
resources: - ../../base patchesStrategicMerge: - deployment-patch.yaml
Uso de Helm Charts en Kustomize
Helm Charts directamente en Kustomize. Por ejemplo, puedes definir Helm Charts en el archivo kustomization.yaml de la siguiente manera:
Siguiendo el ejemplo anterior de observabilidad, puedes definir los Helm Charts para Prometheus, kube-state-metrics y metrics-server en tu kustomization.yaml:
# ./base/kustomization.yaml
helmCharts:
- name: prometheus
repo: https://prometheus-community.github.io/helm-charts
version: 14.11.1
releaseName: my-prometheus
namespace: monitoring
- name: kube-state-metrics
repo: https://kubernetes.github.io/kube-state-metrics
version: 3.2.2
releaseName: my-kube-state-metrics
namespace: monitoring
- name: metrics-server
repo: https://kubernetes-sigs.github.io/metrics-server
version: 5.8.1
releaseName: my-metrics-server
namespace: monitoring
Esta configuración permite que Kustomize gestione los Helm Charts, lo que facilita la integración y personalización de recursos en Kubernetes.
Para más información y un tutorial detallado, puedes consultar esta guía de Google Cloud.
Conclusión
El uso de Helm Charts personalizados con Helm Dependencies en combinación con ArgoCD puede simplificar enormemente la gestión de configuraciones en Kubernetes. Este enfoque no solo mejora la reutilización de código y la mantenibilidad, sino que también asegura la consistencia a través de tus servicios. Comparado con el uso de Helm + Kustomize, ofrece una alternativa poderosa y flexible para la implementación y gestión de aplicaciones.
Espero que este artículo te haya dado una visión clara de cómo puedes mejorar tus prácticas de gestión de configuraciones en Kubernetes. ¡No dudes en experimentarlo y descubrir cuál funciona mejor para tu caso de uso!






