Helm, el gestor de paquetes para Kubernetes, es una herramienta poderosa para gestionar aplicaciones complejas de Kubernetes. Una de sus características avanzadas son los hooks de Helm. Los hooks te permiten intervenir en diferentes puntos de una operación de Helm, como antes o después de una instalación, actualización o eliminación. En este artículo, profundizaremos en los hooks disponibles, exploraremos cómo definirlos en tus charts de Helm y proporcionaremos casos de uso para cada uno.
¿Qué son los Hooks de Helm?
Los hooks de Helm son anotaciones especiales que se pueden agregar a los recursos en un chart de Helm. Estos hooks desencadenan acciones específicas durante el ciclo de vida de la liberación de un chart de Helm. Permiten a los desarrolladores realizar tareas como configurar requisitos previos, limpiar después de una operación o validar un despliegue.
Hooks de Helm Disponibles y Casos de Uso
Helm proporciona varios hooks que se pueden usar en diferentes etapas de una operación de Helm. Aquí hay un desglose de los hooks disponibles:
1. pre-install
Momento de Ejecución: Después de que las plantillas se renderizan pero antes de que se creen recursos en Kubernetes.
Casos de Uso: Imagina que necesitas crear un ConfigMap o secreto del que depende tu aplicación pero que no forma parte del chart principal. El hook pre-install puede crear este recurso antes de que se despliegue el resto del chart.
apiVersion: v1
kind: Job
metadata:
name: setup-config
annotations:
"helm.sh/hook": pre-install
spec:
template:
spec:
containers:
- name: config-creator
image: busybox
command: ['sh', '-c', 'echo "config data" > /config/config.txt']
2. post-install
Momento de Ejecución: Después de que todos los recursos se crean en Kubernetes.
Casos de Uso: Si tu aplicación requiere que se carguen algunos datos iniciales en una base de datos después de que esté en funcionamiento, un hook post-install podría usarse para ejecutar un trabajo que pueble estos datos.
apiVersion: batch/v1
kind: Job
metadata:
name: init-database
annotations:
"helm.sh/hook": post-install
spec:
template:
spec:
containers:
- name: db-init
image: busybox
command: ['sh', '-c', 'init-db-command']
3. pre-delete
Momento de Ejecución: En una solicitud de eliminación, antes de que se eliminen recursos de Kubernetes.
Casos de Uso: Usa un hook pre-delete para apagar servicios de manera ordenada o para respaldar datos importantes antes de eliminar una liberación de Helm.
apiVersion: batch/v1
kind: Job
metadata:
name: backup-before-delete
annotations:
"helm.sh/hook": pre-delete
spec:
template:
spec:
containers:
- name: backup
image: busybox
command: ['sh', '-c', 'backup-command']
4. post-delete
Momento de Ejecución: Después de que se han eliminado todos los recursos de la liberación.
Casos de Uso: Un hook post-delete podría usarse para limpiar recursos externos a Kubernetes que fueron creados por el chart de Helm, como recursos en la nube o entradas de bases de datos.
apiVersion: batch/v1
kind: Job
metadata:
name: cleanup
annotations:
"helm.sh/hook": post-delete
spec:
template:
spec:
containers:
- name: cleanup
image: busybox
command: ['sh', '-c', 'cleanup-command']
5. pre-upgrade
Momento de Ejecución: En una solicitud de actualización, después de que las plantillas se renderizan, pero antes de que se actualicen los recursos.
Casos de Uso: Supón que necesitas validar algunas condiciones previas antes de aplicar una actualización. Un hook pre-upgrade puede ejecutar un trabajo para verificar el entorno o validar la nueva configuración.
apiVersion: batch/v1
kind: Job
metadata:
name: pre-upgrade-check
annotations:
"helm.sh/hook": pre-upgrade
spec:
template:
spec:
containers:
- name: upgrade-check
image: busybox
command: ['sh', '-c', 'upgrade-check-command']
6. post-upgrade
Momento de Ejecución: Después de que todos los recursos han sido actualizados.
Casos de Uso: Después de una actualización exitosa, un hook post-upgrade podría usarse para desencadenar un trabajo que verifique la funcionalidad de la aplicación o migre datos a un nuevo esquema.
apiVersion: batch/v1
kind: Job
metadata:
name: post-upgrade-verify
annotations:
"helm.sh/hook": post-upgrade
spec:
template:
spec:
containers:
- name: verification
image: busybox
command: ['sh', '-c', 'verify-upgrade']
7. pre-rollback
Momento de Ejecución: En una solicitud de reversión, después de que las plantillas se renderizan, pero antes de que se reviertan los recursos.
Casos de Uso: Este hook puede usarse para preparar el sistema para la reversión, como respaldar datos o notificar a otros sistemas sobre la reversión inminente.
apiVersion: batch/v1
kind: Job
metadata:
name: pre-rollback-backup
annotations:
"helm.sh/hook": pre-rollback
spec:
template:
spec:
containers:
- name: backup
image: busybox
command: ['sh', '-c', 'rollback-backup']
8. post-rollback
Momento de Ejecución: Después de que todos los recursos han sido modificados por la reversión.
Casos de Uso: Usa un hook post-rollback para verificar el estado de la aplicación después de una reversión o para notificar a sistemas externos sobre la finalización de la reversión.
apiVersion: batch/v1
kind: Job
metadata:
name: post-rollback-verify
annotations:
"helm.sh/hook": post-rollback
spec:
template:
spec:
containers:
- name: verify
image: busybox
command: ['sh', '-c', 'verify-rollback']
9. test
Momento de Ejecución: Se ejecuta cuando se invoca el subcomando helm test.
Casos de Uso: Este hook es ideal para ejecutar pruebas contra una liberación de Helm para verificar que funcione como se espera.
apiVersion: batch/v1
kind: Job
metadata:
name: test-application
annotations:
"helm.sh/hook": test
spec:
template:
spec:
containers:
- name: test
image: busybox
command: ['sh', '-c', 'run-tests']
Anotaciones en Hooks de Helm
Además de definir hooks, Helm te permite controlar la ejecución de hooks usando anotaciones:
helm.sh/resource-policy: Previene que los recursos sean eliminados después de que el hook se ejecute. Valor posible:keep: Mantiene el recurso después de que el hook se ejecute, útil para depuración o retención de registros.helm.sh/hook-weight: Especifica el orden en el que los hooks deben ejecutarse. Los hooks con pesos más bajos se ejecutan antes que aquellos con pesos más altos.helm.sh/hook-delete-policy: Controla cuándo deben eliminarse los recursos del hook. Los valores posibles incluyen:hook-succeeded: Elimina el recurso si la ejecución del hook es exitosa.hook-failed: Elimina el recurso si la ejecución del hook falla.before-hook-creation: Elimina recursos de hooks anteriores antes de crear nuevos, asegurando que solo una instancia del hook esté activa.
Conclusión
Los hooks de Helm son herramientas poderosas que proporcionan un control detallado sobre el ciclo de vida de despliegue de tus aplicaciones en Kubernetes. Al entender y aprovechar estos hooks, puedes asegurar que tus despliegues de Helm sean tanto robustos como confiables. Asegúrate de usar las anotaciones apropiadas para afinar aún más el comportamiento de tus hooks, optimizándolos para tu caso de uso específico.




