Qué es Helm y cómo facilita los despliegues

Autor: Publicado

En resumen: Helm es un gestor de paquetes para Kubernetes: una herramienta que facilita la instalación, configuración y actualización de aplicaciones en un clúster. En lugar de gestionar por separado muchos archivos que describen la aplicación, utilizas un paquete llamado chart y le proporcionas tus propios ajustes. Helm también ayuda a seguir los sucesivos despliegues, pero no sustituye a Kubernetes ni garantiza que una actualización sea segura.

¿Qué problema resuelve Helm?

Kubernetes es un sistema que ejecuta y gestiona aplicaciones en contenedores. Un clúster, es decir, un entorno compuesto por máquinas gestionadas por Kubernetes, necesita una descripción de lo que debe ejecutar. Esa descripción suele guardarse en manifiestos: archivos YAML que definen recursos, como un Deployment que gestiona las instancias de la aplicación o un Service que permite conectarse a ellas.

Una aplicación puede necesitar varios de estos recursos, incluso más de diez. Si la ejecutas por separado en un entorno de pruebas y otro de producción, algunos ajustes serán comunes y otros distintos: el número de instancias, la dirección del dominio, la versión de la imagen del contenedor o los límites de memoria. Copiar los manifiestos manualmente dificulta mantener la coherencia.

Helm permite reunir las plantillas de esos recursos en un único paquete. A partir de las plantillas y la configuración, genera manifiestos y después los envía a Kubernetes. La idea es similar a la de un gestor de paquetes de un sistema operativo, aunque Helm gestiona recursos del clúster, no programas instalados en un portátil.

Chart, release y values: tres conceptos básicos

Un chart es un paquete de Helm que contiene plantillas de recursos de Kubernetes, ajustes predeterminados e información sobre el paquete. Puede describir una sola aplicación o un conjunto de componentes relacionados. Un chart también puede tener dependencias, es decir, utilizar otros charts.

Una release es una instalación concreta de un chart en el clúster, con su propio nombre. Puedes instalar el mismo chart varias veces: por ejemplo, como tienda-test y tienda-prod, con ajustes distintos. Por tanto, release no se refiere únicamente a una versión de la aplicación: identifica un despliegue gestionado por Helm.

Values son los valores de configuración que se insertan en las plantillas. Un chart suele incluir un archivo predeterminado values.yaml, y el usuario puede proporcionar otro archivo con sus propios ajustes. Los nombres de los parámetros disponibles dependen de cada chart; Helm no impone un campo universal para configurar todas las aplicaciones.

La estructura de un chart sencillo puede ser así:

mi-aplicacion/
├── Chart.yaml
├── values.yaml
└── templates/
    ├── deployment.yaml
    └── service.yaml

El archivo Chart.yaml describe el paquete, values.yaml contiene la configuración predeterminada y el directorio templates almacena las plantillas. La versión del chart y la versión de la aplicación son cosas distintas: cambiar la forma de desplegarla no implica necesariamente modificar el programa.

¿Cómo se despliega una aplicación con Helm?

Supongamos que un equipo mantiene la aplicación de una tienda. Necesita una instancia en el entorno de pruebas y tres en producción. Puede utilizar un chart y dos archivos de configuración, en lugar de crear dos copias independientes de los manifiestos.

Si el chart ofrece el parámetro replicaCount, el archivo values-test.yaml puede contener:

replicaCount: 1

El siguiente ejemplo presupone que tienes instalado Helm, acceso al clúster y un chart local en el directorio mi-aplicacion. Primero puedes generar los manifiestos sin instalar la aplicación:

helm template tienda-test ./mi-aplicacion -f values-test.yaml

Esto permite comprobar el resultado de las plantillas, pero todavía no confirma que el clúster vaya a aceptar todos los recursos ni que la aplicación vaya a funcionar. Para instalar o actualizar la release, ejecuta:

helm upgrade --install tienda-test ./mi-aplicacion \
  -f values-test.yaml --namespace test --create-namespace

Un namespace es un espacio delimitado de forma lógica para los recursos del clúster. La opción --install permite instalar la release si todavía no existe; en caso contrario, el comando la actualiza. Antes de ejecutarlo, comprueba el contexto actual de Kubernetes para no desplegar la aplicación en producción por accidente.

Actualizaciones y límites de la reversión de cambios

Helm guarda un historial de las sucesivas revisiones de la release, es decir, de los cambios en su despliegue. El comando helm history tienda-test -n test muestra ese historial, y helm rollback permite volver a una revisión anterior.

Un rollback no es una copia de seguridad de la aplicación ni de sus datos. Revertir la configuración de los recursos no deshace automáticamente una migración de la base de datos, los cambios realizados en un servicio externo ni los efectos de la ejecución del programa. Las actualizaciones de aplicaciones que almacenan datos requieren un plan específico de copias de seguridad y compatibilidad entre versiones.

Helm tampoco elimina la necesidad de comprender Kubernetes. Unos límites de recursos incorrectos, la falta de permisos necesarios o una imagen de contenedor incorrecta pueden impedir que la aplicación se ejecute, tanto si los manifiestos se han creado manualmente como si proceden de un chart.

¿Cuándo elegir Helm y cómo evaluar un chart existente?

Helm resulta útil cuando repites despliegues, mantienes varios entornos o instalas una aplicación compuesta por muchos recursos. Si solo tienes unos pocos manifiestos sencillos que apenas cambian, puede añadir una capa innecesaria de plantillas. Una posible alternativa es Kustomize, que adapta manifiestos existentes en lugar de utilizar plantillas de Helm.

Antes de utilizar un chart existente, comprueba su procedencia, documentación, versiones requeridas de Kubernetes, permisos y forma de gestionar los datos persistentes. Revisa los manifiestos generados, especialmente los recursos que conceden permisos y los servicios que exponen la aplicación fuera del clúster. Las contraseñas incluidas en el archivo values no se vuelven seguras por el mero hecho de usar Helm: no las guardes en un repositorio de código convencional.

Para empezar, elige un entorno de pruebas y un chart. Confirma los parámetros disponibles en la documentación de la versión concreta de ese chart y, después, comprueba la instalación, la actualización y qué ocurre con los datos al revertir los cambios.

Consulta también: ¿Qué es Brave?

Lee también

Descubre cómo PHP-FPM atiende peticiones PHP, en qué se diferencia de un servidor web y cómo ajustar sus procesos al tráfico y los recursos.
Conoce BIND, el software abierto de servidor DNS: sus funciones, cómo gestiona dominios y cuándo conviene instalarlo por tu cuenta.
Descubre qué son el registro REGON de Polonia y su número, en qué se diferencian de NIP y KRS y cómo verificar los datos de una empresa.