Uso Eficiente de Helm Charts y Helm Dependencies

Published:

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

  1. Reutilización de Código: Reduce la duplicación de configuraciones comunes.
  2. Mantenibilidad: Facilita la actualización de configuraciones comunes desde un único lugar.
  3. 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!

- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles